gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 14:02:51 24 4
gpt4 key购买 nike

我正在处理 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com