1
止まる問題を解決する私の試みを混乱させる
注:その性質上、この課題の仕様を理解することは困難です。少なくとも、計算可能性理論の新入生コース、または同等のバックグラウンドリーディングが必要です。さらに、チャレンジ自体はかなり難しいです。それに答えるには、選択した言語の一部のインタープリター全体を書く必要があり、それだけでなく、インタープリターはクインのようなものの形である必要があります。答えがこれをすべて行っていない場合、仕様を満たさないことはほぼ確実です。 この課題を解決するために、停止問題を(部分的にでも)解決する必要はありません。しかし、あなたはほぼ確実に行うことがフィーチャ、完全である必要はないが、(それが解釈し、同じ言語で書かれた、使用している言語の)インタプリタを書く必要があります。これが、これを興味深い挑戦にしています。 私は、仕様を満たす最初の回答に対して500ポイントの報奨金を授与することを約束しました。これは、ジョー・キングのBF回答に授与されます。 チャレンジ 停止問題の解決不可能性のアランチューリングの証明の大まかな簡略版は、次のようになります。 F停止しているプログラムを解決するためのプログラムを書いたとします。つまりF、別のプログラムのソースコードを入力として受け取り、停止F(G)した1場合に戻りG、0そうでない場合に戻ります。 しかし、プログラムを提供すると、入力としてプログラムを実行するF別のプログラムを作成できます。場合戻り、その後を返し、そうでなければ、それは意図的に無限ループに入ります。これは逆説につながり、結局停止問題を解決できないと結論付けなければなりません。HHF(H)0H0F あなたの仕事はプログラムを書くHことですが、ひねりを加えて:私はあなたに私のプログラムを提供するつもりはありません。代わりに、プログラムは入力としてプログラムのソースコードを受け取ります。あれは: あなたのプログラムは、私のプログラムをソースコード形式で入力として受け取ります。(たとえば、ファイルまたはコマンドライン入力として、詳細はあなた次第です。) 私のプログラムはあなたのプログラムと同じ言語で書かれ、ソースコード文字列の形式で入力を受け取ります。 場合は私のプログラムのリターンが0与えられたとき、あなたのプログラムを入力として、あなたのプログラムが停止(と返す必要があります0与えられたときに)私のプログラムを入力として。(「リテーリング0」の正確な意味はあなた次第です。) 私のプログラムが停止しない場合、または0プログラムが入力として与えられた場合以外の何かを返す場合、プログラムは無期限に実行し続ける必要があります。 ひねりは、それを本当にかなり難しくするために、次の規則に従う必要があるということです: いかなる種類の組み込み関数execまたはeval-type関数も使用できません。 独自のプログラムのソースコードを取得するために、「チート」メソッドを使用することはできません。(たとえば、「これを「プログラム」というファイルに保存する」と言ってopen(program)から、プログラムに入れることはできません。) これは、プログラムが文字列の形式で独自のソースコードを再現できるだけでなく、記述された言語を正しく解析および解釈できる、ある種のクレイジーなスーパークインでなければならないことを意味します。 非常に難しいことを少し減らすために、選択した言語の(チューリング完全な)サブセットのみを使用することができます。あなたのプログラムがPythonで書かれていて、私のプログラムにifsとwhileループと基本的な文字列操作しか含まれていない場合にのみ機能するのであれば、あなたのプログラムもこれらのものだけを使用していれば問題ありません。(つまり、選択した言語の標準ライブラリ全体の実装について心配する必要はありません!)ただし、プログラムを実際に実行する必要があります-独自の言語を作成することはできません。 これは人気コンテストなので、投票数が最も多い答えが勝ちます。ただし、上記のように、仕様を満たすことは非常に難しい課題であるため、私の判断に従って、最初の回答に対して500ポイントの賞金を授与します。 注意してください:私が使用した正確な言葉遣いを考えると、間違いなくこの挑戦で「だます」ことができる多くの方法があります。しかし、質問の精神に入る答えを本当に望んでいます。意図したとおりの挑戦は非常に難しいが可能ですが、私は本当にそれに対する真の解決策を期待しています。私の判断でチートな感じがする答えには賞金を授与しません。 注:このチャレンジは元々、popular-contestとして投稿されましたが、「客観的な勝利基準」がないため2016年に終了し、再開するためにコードゴルフに変更しました。ただし、2018年1月の時点で、PPCGの人気コンテストは実際には禁止されていないことがわかりました(これが最新のメタディスカッションであるため)、そもそもサイトのポリシーに反することです。ポプコンは最近人気がないことを理解していますが、これは古い挑戦であり、その性質によりコードゴルフには本当に不適切ですスコアリングシステム。まだ許可されてはならないと強く感じている人がいる場合は、投票を開始する前にメタディスカッションをしましょう。最後に、去年誰かがソリューションをゴルフしようとして過ごしたという偶然について、それはこの挑戦と同じくらい競争力があり、コードゴルフと同じように賞金に値することを保証しますバージョン。