前書き
これは私のお気に入りの数学パズルの1つです。
数字(3など)とその数字を使用する回数(5など)を指定して、+のみを使用して1、2、3、4、5、6、7、8、9、10になる10個の式を生成します。 −、×、÷、^、および√(ルート)(グループは操作をグループ化できます)。
例えば:
(3^3 + 3)/(3 + 3) = (33 - 3)/(3 + 3) = 3 + 3/3 + 3/3 = 5
上記のすべてが5つの3を使用し、数学演算と結果が5になることに注意してください。√の前に3を使用して、立方根を表すこともできます。4番目のルートを示すために、√の前に4を使用する場合も同様です。
また、2つの3を使用して33を形成したり、3つの3を使用して333を形成したりできることにも注意してください。
チャレンジ
- 関数の引数、STDIN、またはコマンドライン引数として2つの数字(両方とも1〜5)が与えられます。
- 最初の数字は使用する数字を示し、2番目の数字はその数字が式で使用される回数を示します。
- プログラムは、サイズ10(またはスペースで区切られた10個の数値)の配列を出力する必要があります。各要素は、
(index + 1)
数値を生成する数式(許可演算子のみを使用)が可能かどうかを示します。
たとえば、入力が
1 3
次に、出力は
[1, 1, 1, 0, 0, 0, 0, 0, 0, 1]
なぜなら、1、2、3、および10のみが3つの1を使用して表現できるからです。
スコア
- これはコードゴルフなので、バイト単位の最小コード長が優先されます。
ボーナス
Print-em-all [−50]
出力配列要素が妥当な組み合わせの合計数に等しい場合は、スコアから50 (index + 1)
を引いて、真の値または偽の値ではなく値を取得します。
たとえば、5になる5つの3の可能な組み合わせが3つしかない場合、出力配列の4 番目のエントリは3になります。
エクストリーム数学[−100]
出力配列要素に、(index + 1)
値になる結果の実際の式が少なくとも1つ含まれている場合は、スコアから100を引きます。
たとえば、5つの3を使用する場合、出力配列の4 番目のエントリは(3^3 + 3)/(3 + 3)
、(33 - 3)/(3 + 3)
または3 + 3/3 + 3/3
オーバーキル[−200]
出力配列要素に可能なすべての組み合わせが含まれている場合は、スコアから200を引きます(で区切られます|
)。このボーナスはExtreme Mathsボーナスに追加されるため、合計で-300が得られます。
たとえば、5つの3を使用する場合、出力配列の4 番目の要素は次のようになります。(3^3 + 3)/(3 + 3)|(33 - 3)/(3 + 3)|3 + 3/3 + 3/3
注:同じ結果を得るための2つの式は、論理的に異なり、両方のアプローチが異なります。
例えば、5 3のを使用して5を取得するには、3 + 3/3 + 3/3
同じである3/3 + 3 + 3/3
か、3/3 + 3/3 + 3
同じアプローチは、それらのそれぞれのために取られているので。分子の30は異なるアプローチで達成されるため(3^3 + 3)/(3 + 3)
、(33 - 3)/(3 + 3)
異なります。
更新:すべての回答を調べた後、すべての回答に単項-
および√のエッジケースによる不完全性があることがわかりました。したがって、回答の完全性が関係する限り、これらのエッジケースが欠落していても問題ありません。
これは難しい質問ですが、かなり興味深い質問です。
ハッピーゴルフ!
1
秒で10を得るにはどうすればいいですか?