clojure - 如何测试多组所有组合中的给定总和?

标签 clojure

我正在处理 Problem 131来自 4Clojure 网站。

我可以添加什么样的“for”语句来组合检查每个集合中总和为 0 的项目子集?

特别是我在这里有几个问题:

  1. 是否有任何 clojure 函数可以接受任意数量的集合?

  2. 如果是这样,我如何生成所有子集并对这些子集求和而不向此代码添加额外的 Clojure,还是我弄错了?

我需要填写 __ 部分。

(= true  (__ #{-1 1 99}
             #{-2 2 888}
             #{-3 3 7777}))

最佳答案

  1. 你指的是集合(而不是 map )?但实际上,这并不重要。
    例如,count接受一个参数,但您可以创建接受任意数量参数的匿名函数。
    ((fn [& args] ( map 计数参数)) #{-1 1 99} #{-2 2 888} #{-3 3 7777})

    (#( map 计数 %&) #{-1 1 99} #{-2 2 888} #{-3 3 7777})

  2. 您可以使用subsets来自combinatorics贡献生成所有子集,然后使用+
    减少它们 #(map(部分减少+)(子集%))

所以,这个问题可以通过这两个函数来解决:

(defn sums [s] 
  (set (map #(reduce + %) (rest (subsets s)))))

(defn cmp [& sets]
  (not (empty? (apply intersection (map sums sets)))))

我无法从 contrib 中导入 4clojure 库,所以我保持原样。

关于clojure - 如何测试多组所有组合中的给定总和?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7946715/

相关文章:

syntax - Clojure 的 defn、defmacro 和 binding 中的方括号真的是一个向量吗?

clojure - 如何使用 clojure 或 jython 修剪数字的小数?

command-line - 如何使用 Clojure 在命令行中更改目录?

clojure - 如何向 leiningen 添加构建步骤?

clojure - 将函数列表应用于值

syntax - Clojure取消引用问题

clojure - 如何在 Clojure 中读取 stdin 中的所有行

file - Clojure 文件响应

Clojure & ClojureScript : clojure. core/read-string, clojure.edn/read-string 和 cljs.reader/read-string

Clojure 函数和 gensym