そして特に第2の法則:孤立システムのエントロピーは時間とともに増加します。
この挑戦のために、
- 「分離されたシステム」は、プログラムまたは機能(以降、「プログラム」と略す)と見なされます。
- 「time」の経過は、プログラムの出力の繰り返し実行に対応し、新しいプログラムと見なされます。
- 「エントロピー」は、シャノンの1次エントロピー(以下で定義)として解釈されます。これは、文字列の文字の多様性の尺度です。
チャレンジ
プログラムは、同じ言語のプログラムとして実行されたときに、前のものよりもエントロピーの多い文字列を生成する空でない文字列を生成する必要があります。この出力実行プロセスを無限に繰り返すと、エントロピー値の厳密に増加するシーケンスが生成される必要があります。
文字列には、Unicode 9.0文字を含めることができます。文字列のシーケンスは(ランダムではなく)確定的でなければなりません。
特定の文字列のエントロピーは、次のように定義されます。一意の文字と文字列内の出現回数を特定します。i番目の一意の文字の頻度p iは、その文字の出現回数を文字列の長さで割ったものです。エントロピーは
ここで、合計は文字列のすべての一意の文字に対するものです。技術的には、これは、文字列で観測される周波数によって与えられる分布を持つ離散確率変数のエントロピーに対応します。
LET H K示すにより作成された文字列のエントロピーのk番目のプログラム、およびlet H 0意味を初期プログラムのソースコードのエントロピーを。また、L 0で初期プログラムの長さを文字で示します。シーケンス{ H k }は、チャレンジ要件に従って単調であり、制限されています(既存の文字の数が有限であるため)。したがって、H H∞という制限があります。
スコア提出は(なりH ∞ - H 0 /)L 0:
- 分子、H ∞ - H 0は、無限時間のスパンでエントロピーを増やすどの程度あなたのコード「従う」の法律に反映されます。
- denonimator、L 0は、文字単位の(バイト単位ではない)初期コードの長さです。
最高スコアのコードが勝ちます。関係は、最も早い提出/編集を支持して解決されます。
文字列のエントロピーを計算するには、この投稿の最後でJavaScriptスニペット(@flawrの提供および@Dennisと@ETHproductionsによる修正)を使用できます。
制限を取得する場合はH ∞があなたの特定のケースでは困難であり、あなたは、任意の下限を使用することができ、言うH 20((あなたが使用してスコアを計算するために、H 20 - H 0)/ L 0)。ただし、いずれにしても、エントロピーの無限シーケンスは厳密に増加している必要があります。
明らかでない場合は、エントロピーのシーケンスが増加しているという説明または簡単な証拠を含めてください。
例
架空の言語では、コードを検討しaabcab
、実行には、文字列生成、cdefgh
実行が発生し、cdefghi
...
元のコードの一意の文字はa
、b
およびc
で、それぞれの周波数は3 / 6、2 / 6および1/6です。そのエントロピーは1.4591です。これはH 0です。
文字列にcdefgh
はより大きいエントロピーがありaabcab
ます。これは、特定の文字数に対して、すべての周波数が等しいときにエントロピーが最大化されるため、計算せずにこれを知ることができます。実際、エントロピーH 1は2.5850です。
このストリングcdefghi
も、前のものよりも多くのエントロピーを持っています。存在しない文字を追加すると常にエントロピーが増加するため、コンピューティングなしでできるようになりました。実際、H 2は2.8074です。
次の文字列が42
チェーンの場合、H 3は2.8074より小さい1になるため、無効になります。
一方、シーケンスが限界と増加エントロピーの文字列を生成する上で行った場合はH ∞ = 3、スコアは(3から1.4597)/ 6 = 0.2567であろう。
謝辞
おかげで
@xnorは、課題の改善に協力してくれました。特に、反復実行から得られるエントロピーの無限の連鎖が実際に可能であることを確信させてくれました。
スコア関数の変更を含むいくつかの提案、および非常に有用なスニペットの作成については、@ flawr。
スコア関数の以前の定義における本質的な欠点を指摘する@Angs。
JavaScriptスニペットの修正については@Dennis。
スニペットの別の修正のための@ETHproductions。
エントロピーの定義の修正については、@ PeterTaylor。