7、31文字、スコア30、安全ではなく、おそらく壊れましたか?
7プログラムは通常、単なる数値ですが、空白を含めることができ、複数の数値に分割します。したがって、この送信は2つの数値(暗黙的に7インタープリターによって連結される)で構成され、プログラムも同様に標準入力を介して2つの数値を入力として受け取ります。(ヘッダーの「31文字」は、2つの数値の合計の長さに1つの分離空白文字を加えたものです。数値を構成する数字は、プログラムとして使用すると8進数として解釈されますが、入力として使用すると10進数として解釈されます。 2つの場合で同じ数字であり、実際の数字ではありません。プログラムとして処理する場合も、入力として処理する場合も、スペースまたは改行で区切るかどうかは関係ありません。送信を無効にしないでください。)
予想される出力は次の数値です(7インタープリターが使用する出力形式であるため、ここでは10進数で表現しています)。
238363505302130098723162537059
Esolang wikiからリンクされた7インタープリターは内部的に数値を単項で格納することに注意してください。つまり、プログラムを実際に実行してそれが何をするかを確認するのに十分なメモリがない可能性は低いです。プログラムの動作を手動で確認し、小さな入力でテストして、期待どおりの動作をしたことを確認して、プログラムを検証しました。別のアプローチは、数値を格納するより効率的な方法を使用するインタープリターを作成することです。
ここでクラックを回避するのは面倒なことでしたが、プログラム自体の数値以外の2つの数値が238363505302130098723162537059を出力として生成できないことに、ようやく満足しました。(1週間後の編集:質問の解釈方法によっては、私が間違っていた可能性があります。以下を参照してください。)
解決
元のプログラムは:
711170237403706
111723603700633
このプログラムは2つの数値バツとy取り、式3 x y− y− 2(すなわちy( 3 x − 1 )− 2)の結果を計算します。我々がこの計算を実行する場合x = 711170237403706とy= 111723603700633、我々は結果を得る238363505302130098723162537059必要に応じて。
次の理由により、他の入力では望ましい結果が得られないことが意図されていました。
y(3 x − 1 )− 2 = 238363505302130098723162537059、つまりy(3 x − 1 )= 238363505302130098723162537061(2を両側に追加)になるように入力を選択する必要があります。この数値は111723603700633あり、2つの要素のみ111723603700633と2133510712211117ます。これらの数値の2133510712211117 1つだけが3 x − 1((3 × 711170237403706 )の形式で表現できます)(3 × 711170237403706 )− 1 = 2133510712211117)。そのため、バツとy数を一意に識別できます。つまり、1つの入力のみが機能します。
ただし、質問の解釈方法によっては、目的の出力を生成する2番目の入力が存在する場合があります(そのため、このソリューションは無効になります)。
残念ながら、セミプライムの2つの乗法パーティションは2つの要素に分かれています。1つは2つの素因数に分割することですが、もう1つは1と数自体からなる自明なパーティションです。1は整数xで3 x − 1形で書くことはできませんが、望ましい出力はできます。したがって、潜在的なメタクラックでは、入力を79454501767376699574387512354および1として指定する必要があります。ただし、ここでの最初の数字には文字(8および9バツ79454501767376699574387512354189)7つのプログラムの文字セットには含まれていません。したがって、入力がプログラムと同じ文字セットに制限されている場合、このソリューションは有効です。ただし、プログラムの文字セット外からの文字を含む入力が許可されている場合、このソリューションは無効です。
説明
意図されたソリューションの機能は次のとおりです。
711170237403706 111723603700633
7 7 7スタック要素セパレーター
111 023 403706 111723603700633初期スタック要素
111ナンバー3、単項
023「数値を入力する」ためのI / O DSL
403706 111723603700633メインプログラム
(暗黙:メインプログラム要素のコピーを実行し、オリジナルを保持します)
40 {program}の上で{023}をスワップし、エスケープします
3 {023}を使用してI / Oを実行します。ポップ{プログラム}
0 I / O:数値
23数値を入力し、その回数{111}をコピーします
706番号に「6」を追加します(デクリメント)
11 2つの空のスタック要素をプッシュする
17236スタック要素「23」をプッシュします(エスケープなし)
0エスケープ{23}、空の要素を消費
3 {23}を使用してI / Oを実行します。ポップ{下の要素}
23スタック入力の先頭を何度もコピーする
7006 "66"を追加する(つまり、2を引く)
3出力{数値として}
3プログラムを終了します(低スタックのため)
1
7
0
6
66
12345
3123451234512345