2011-10-30 12 views
3

私は4ClojureサイトのProblem 131に取り組んでいます。複数のセットのすべての組み合わせで所定の合計をテストするにはどうすればよいですか?

文「の」どのような種類のIは0に合計項目のサブセットのためにこれらのセットのそれぞれをチェック組み合わせ的に追加のでしょうか?

は特に、私はここにいくつかの質問を持っていた:

  1. は、セットの任意の数をとる任意のClojureの機能はありますか?

  2. もしそうなら、どのように私はすべてのサブセットを生成し、このコードに余分なClojureのを追加することなく、それらのサブセットを合計し、または私が間違っていますか?

__部分を入力する必要があります。

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

答えて

4
  1. あなたは(代わりに、マップの)セットを意味ですか?しかし、実際それは問題ではありません。
    例えば、countは1つの引数を取りますが、あなたは、任意の数の引数を取る無名関数を作ることができます。
    ((fn [& args] (map count args)) #{-1 1 99} #{-2 2 888} #{-3 3 7777})
    または
    (#(map count %&) #{-1 1 99} #{-2 2 888} #{-3 3 7777})

  2. あなたがそう+
    #(map (partial reduce +) (subsets %))

でそれらをすべてのサブセットを生成するcombinatoricsのcontribからsubsetsを使用して、reduceことができ、この問題は、これらを解決することができます2つの機能:

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

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

私はのcontribから4clojureインポートライブラリを作成することができませんでしたので、あるように私はそれを残します。

+0

確かに役立ちますが、これは4clojureの質問には答えません。その他の試みはありますか? – jayunit100

+2

上記のように、セットのすべてのサブセットを作成するメカニズムと組み合わせて、それを把握するのに十分なはずです。 –

+0

@ jayunit100:まず、[problem 85](http://www.4clojure.com/problem/85)を解決したいかもしれません。パワーセット(空のセットを差し引いたもの)はまったく別の仕組みです。 –

関連する問題