この質問では、値Vと一意の整数のリストが与えられます。あなたの仕事は、合計がVになるサイズ4の個別のサブセットの数を見つけることです。リスト内の各要素は1回だけ使用できます。そのようなサブセットが見つからない場合は、代わりに0を出力します。
たとえば、整数が[3, 4, 5, 6, 7, 8, 9, 10]
で、値がの30
場合、出力は5になります。サブセットは次のとおりです。
[3, 8, 9, 10]
[4, 7, 9, 10]
[5, 6, 9, 10]
[5, 7, 8, 10]
[6, 7, 8, 9].
この質問を解決するのは難しくありません。最も直接的な方法は、forループを4回ネストすることです。それを行うClojureの方法は何ですか?
これが私がそれをしたであろう方法です:
(ns example.solve
(:require [clojure.math.combinatorics :as combo]))
(defn solve
[s n v]
(filter (comp (partial = v)
(partial reduce +))
(combo/combinations s n)))
math.combinatorics
リストから4つの要素のすべての組み合わせを取得する最も簡単な方法であるため、この例では使用しています。
使用例を次に示しsolve
ます。
=> (solve [3 4 5 6 7 8 9 10] 4 30)
((3 8 9 10) (4 7 9 10) (5 6 9 10) (5 7 8 10) (6 7 8 9))
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加