数を表現する
60年代にフランスはテレビゲーム番組「Des Chiffres et des Lettres」(Digits&Letters)を発明しました。ショーのディジット部分の目標は、いくつかの半ランダムに選択された番号を使用して、特定の3桁のターゲット番号にできるだけ近づけることでした。競技者は次の演算子を使用できます。
- 連結(1と2は12)
- 加算(1 + 2は3)
- 減算(5-3 = 2)
- 除算(8/2 = 4); 除算は、結果が自然数である場合にのみ許可されます
- 乗算(2 * 3 = 6)
- 括弧、操作の通常の優先順位をオーバーライドするには:2 *(3 + 4)= 14
指定された各番号は、一度だけ使用できるか、まったく使用できません。
たとえば、ターゲット番号728は、次の式を使用して、6、10、25、75、5、および50の番号と正確に一致させることができます。
75 * 10 - ( ( 6 + 5 ) * ( 50 / 25 ) ) = 750 - ( 11 * 2 ) = 750 - 22 = 728
このコードチャレンジでは、特定のターゲット番号にできるだけ近い式を見つけるタスクが与えられます。私たちは21世紀に住んでいるので、60年代に比べてより大きな目標数とより多くの数を導入します。
ルール
- 許可される演算子:連結、+、-、/、*、(および)
- 連結演算子には記号がありません。数字を連結するだけです。
- 「逆連結」はありません。69は69であり、6と9に分割することはできません。
- ターゲット番号は正の整数で、最大18桁です。
- 少なくとも2つの数字を使用し、最大で99個の数字を使用できます。これらの数値も、最大18桁の正の整数です。
- 目標番号は、数値と演算子の観点から表現できない可能性があります(実際にはかなり可能性があります)。目標は、可能な限り近づくことです。
- プログラムは妥当な時間(最新のデスクトップPCで数分)で終了するはずです。
- 標準の抜け穴が適用されます。
- このパズルの「スコアリング」セクションにあるテストセットに対して、プログラムが最適化されていない可能性があります。このルールに違反している疑いがある場合、テストセットを変更する権利を留保します。
- これはコードゴルフではありません。
入力
入力は、任意の便利な方法でフォーマットできる数値の配列で構成されます。最初の番号はターゲット番号です。残りの番号は、ターゲット番号を作成するために使用する必要がある番号です。
出力
出力の要件は次のとおりです。
- 次の文字列である必要があります。
- 入力番号のサブセット(ターゲット番号を除く)
- 任意の数の演算子
- 出力はスペースなしの単一行にすることをお勧めしますが、必要に応じて、必要に応じてスペースと改行を追加できます。制御プログラムでは無視されます。
- 出力は有効な数式でなければなりません。
例
読みやすくするため、これらの例にはすべて正確な解があり、各入力番号は1回だけ使用されます。
入力:1515483, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
出力:111*111*(111+11+1)
入力:153135, 1, 2, 3, 4, 5, 6, 7, 8, 9
出力:123*(456+789)
入力:8888888888, 9, 9, 9, 99, 99, 99, 999, 999, 999, 9999, 9999, 9999, 99999, 99999, 99999, 1
出力:9*99*999*9999-9999999-999999-99999-99999-99999-9999-999-9-1
入力:207901, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0
出力:1+2*(3+4)*(5+6)*(7+8)*90
入力:34943, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0
出力:1+2*(3+4*(5+6*(7+8*90)))
ただし、有効な出力も次のとおりです。34957-6-8
得点
プログラムのペナルティスコアは、以下のテストセットの式の相対誤差の合計です。
たとえば、ターゲット値が125で、式が120の場合、ペナルティスコアはabs(1-120/125)= 0,04です。
最も低いスコア(最も低い合計相対誤差)のプログラムが勝ちます。2つのプログラムが同等に終了した場合、最初の提出が勝ちます。
最後に、テストセット(8ケース):
14142, 10, 11, 12, 13, 14, 15
48077691, 6, 9, 66, 69, 666, 669, 696, 699, 966, 969, 996, 999
333723173, 3, 3, 3, 33, 333, 3333, 33333, 333333, 3333333, 33333333, 333333333
589637567, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5
8067171096, 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199
78649377055, 0, 2, 6, 12, 20, 30, 42, 56, 72, 90, 110, 132, 156, 182, 210, 240, 272, 306, 342, 380, 420, 462, 506, 552, 600, 650, 702, 756, 812, 870, 930, 992
792787123866, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765, 10946, 17711, 28657, 46368, 75025, 121393, 196418, 317811, 514229, 832040, 1346269, 2178309, 3524578, 5702887, 9227465, 14930352, 24157817, 39088169
2423473942768, 1, 2, 5, 10, 20, 50, 100, 200, 500, 1000, 2000, 5000, 10000, 20000, 50000, 100000, 2000000, 5000000, 10000000, 20000000, 50000000
以前の同様のパズル
このパズルを作成してサンドボックスに投稿した後、以前の2つのパズルで似たようなもの(同じではない!)に気づきました:here(ソリューションなし)とhereです。このパズルは、連結演算子を導入するため、多少異なります。厳密な一致を求めず、総当たりなしでソリューションに近づくための戦略を見るのが好きです。やりがいがあると思います。