あなたは番号のリスト与えられL = [17, 5, 9, 17, 59, 14]、オペレータのバッグO = {+:7, -:3, *:5, /:1}や数をN = 569。
仕事
L左側のすべての数値を使用Nし、右側の数値のみを使用する方程式を出力します。これが不可能な場合は、Falseを出力します。ソリューション例:
59*(17-5)-9*17+14 = 569
制限と明確化
- 数字を連結することはできません(
[13,37]として使用することはできません1337) - には自然数とゼロのみが表示され
Lます。 - 順序は関係あり
Lません。 - ですべての数字を使用する必要があります
L。 - 唯一の事業者は
+、-、*、/で表示されますO。 O必要以上の演算子を持つことができますが、少なくとも|L|-1演算子- 各演算子は、の値まで何度でも使用できます
O。 - の4つの演算はすべて
O、標準の数学演算です。特に、/正確な分数を持つ通常の除算です。
ポイント
- ポイントが少ないほど良い
- コードのすべての文字が1ポイントを与えます
読みやすい非ゴルフバージョンを提供する必要があります。
バックグラウンド
同様の質問はスタックオーバーフローに頼まれました。面白いコードゴルフの挑戦かもしれないと思った。
計算の複雑さ
ピーターテイラーがコメントで言ったように、これでサブセット和を解くことができます:
- サブセット合計のインスタンスがあります(したがって、整数のセットSと数値x)
- L:= S + [0、...、0](| S |回ゼロ)、N:= x、O:= {+:| S | -1、*:| S | -1、/:0、-:0}
- 今、私の問題のこのインスタンスを解決します
- サブセット合計の解は、ゼロで乗算されないSの数です。
O(2 ^ n)よりも優れたアルゴリズムを見つけた場合、P = NPであることを証明します。以下のようNP対Pがあるミレニアム賞問題、ひいては1,000,000米ドルの価値が、誰かが、このためのソリューションを見つけることはほとんどありません。そこで、ランキングのこの部分を削除しました。
テストケース
有効な答えは以下だけではありません。他の解決策もあり、許可されています。
- (
[17,5,9,17,59,14]、{+:7, -:3, *:5, /:1}、569)
=>59 * (17-5)- 9 * 17 + 14 = 569 - (
[2,2]、{'+':3, '-':3, '*':3, '/':3}、1)
=>2/2 = 1 - (
[2,3,5,7,10,0,0,0,0,0,0,0]、{'+':20, '-':20, '*':20, '/':20}、16)
=>5+10-2*3+7+0+0+0+0+0+0+0 = 16 - (
[2,3,5,7,10,0,0,0,0,0,0,0]、{'+':20, '-':20, '*':20, '/':20}、15)
=>5+10+0*(2+3+7)+0+0+0+0+0+0 = 15
使用する算術はどのようなものか–正確な分数、整数(
—
反時計回りの回転を停止
/≡ div)、浮動小数点および丸め誤差なし...
なぜ計算の複雑さのために複雑なスコアリング規則があるのですか?サブセット合計から簡単に削減できるため、O(2 ^ n)より優れたものは100万米ドルの価値があります。
—
ピーターテイラー
3番目のテストケースはFalseではありません...
—
Shmiddty
5+10+2*3+7*0+0...
m = |L|?はいの場合、ランタイムがそのリストのサイズに依存しないことをどのように期待できますか?たとえば、[2,2],[+,+,...,+,/],1。実際、nはO(m)であるため、すべてmで記述できます。