Und insbesondere das zweite Gesetz : Die Entropie eines isolierten Systems nimmt mit der Zeit zu .
Für diese Herausforderung
- Ein " isoliertes System " ist ein Programm oder eine Funktion (von nun an als "Programm" abgekürzt).
- Das Verstreichen von " Zeit " entspricht iterierten Ausführungen der Programmausgabe , die als neues Programm betrachtet werden.
- " Entropie " wird als Shannons Entropie erster Ordnung (nachstehend definiert) angesehen, die ein Maß für die Verschiedenartigkeit der Zeichen der Zeichenfolge ist.
Die Herausforderung
Ihr Programm sollte eine nicht leere Zeichenfolge erzeugen, die bei Ausführung als Programm in derselben Sprache eine Zeichenfolge mit mehr Entropie erzeugt als die vorherige. Wenn Sie diesen Execute-the-Output-Prozess unendlich oft wiederholen, müssen Sie eine streng ansteigende Folge von Entropiewerten erzeugen .
Die Zeichenfolgen können beliebige Unicode 9.0- Zeichen enthalten. Die Reihenfolge der Zeichenfolgen muss deterministisch sein (im Gegensatz zu zufällig).
Die Entropie für eine bestimmte Zeichenfolge wird wie folgt definiert. Identifizieren Sie die eindeutigen Zeichen und die Anzahl der Vorkommen in der Zeichenfolge. Die Häufigkeit p i des i- ten eindeutigen Zeichens ist die Anzahl der Vorkommen dieses Zeichens geteilt durch die Länge der Zeichenfolge. Die Entropie ist dann
Dabei steht die Summe über allen eindeutigen Zeichen der Zeichenfolge. Technisch entspricht dies der Entropie einer diskreten Zufallsvariablen mit einer Verteilung, die durch die in der Zeichenfolge beobachteten Häufigkeiten gegeben ist.
Sei H k die Entropie des vom k- ten Programm erzeugten Strings und sei H 0 die Entropie des ursprünglichen Programmcodes. Außerdem sei L 0 die Länge des Anfangsprogramms in Zeichen. Die Sequenz { H k } ist gemäß den Herausforderungsanforderungen monoton und begrenzt (da die Anzahl der vorhandenen Zeichen endlich ist). Daher hat es eine Grenze, H ∞ .
Das Ergebnis einer Einreichung ist ( H ∞ - H 0 ) / L 0 :
- Der Zähler H ∞ - H 0 gibt an, inwieweit Ihr Code dem Gesetz der Entropieerhöhung über einen unendlichen Zeitraum "gehorcht".
- Der Denonimator L 0 ist die Länge des Anfangscodes in Zeichen (nicht in Bytes).
Der Code mit der höchsten Punktzahl gewinnt . Krawatten werden zu Gunsten der frühesten Einreichung / Bearbeitung aufgelöst.
Um die Entropie eines Strings zu berechnen, können Sie das JavaScript-Snippet (mit freundlicher Genehmigung von @flawr und mit Korrekturen von @Dennis und @ETHproductions ) am Ende dieses Beitrags verwenden.
Wenn es in Ihrem speziellen Fall schwierig ist , die Grenze H ∞ zu erhalten , können Sie eine beliebige Untergrenze, z. B. H 20 , verwenden, um die Punktzahl zu berechnen (also würden Sie ( H 20 - H 0 ) / L 0 verwenden ). In jedem Fall muss die unendliche Folge von Entropien jedoch streng zunehmen.
Bitte legen Sie eine Erklärung oder einen kurzen Beweis bei, dass die Reihenfolge der Entropien zunimmt, falls dies nicht offensichtlich ist.
Beispiel
Betrachten Sie in einer fiktiven Sprache den Code aabcab
, der beim Ausführen den String erzeugt cdefgh
, der beim Ausführen cdefghi
...
Die einzigartigen Zeichen des ursprünglichen Codes sind a
, b
und c
mit entsprechenden Frequenzen 3/6, 2/6 und 1/6. Seine Entropie beträgt 1,4591. Dies ist H 0 .
Die Zeichenfolge cdefgh
hat mehr Entropie als aabcab
. Wir können dies wissen, ohne es zu berechnen, da für eine gegebene Anzahl von Zeichen die Entropie maximiert wird, wenn alle Frequenzen gleich sind. In der Tat beträgt die Entropie H 1 2,5850.
Die Zeichenfolge hat cdefghi
wieder mehr Entropie als die vorherige. Wir können jetzt ohne rechnen, weil das Hinzufügen eines nicht existierenden Zeichens immer die Entropie erhöht. In der Tat ist H 2 2,8074.
Wenn der nächste String 42
wäre, wäre die Kette ungültig, weil H 3 1 wäre, kleiner als 2,8074.
Wenn andererseits die Sequenz weiterhin Ketten mit zunehmender Entropie mit der Grenze H ∞ = 3 erzeugen würde, wäre die Punktzahl (3 - 1,4597) / 6 = 0,2567.
Danksagung
Dank an
@xnor für seine Hilfe bei der Verbesserung der Herausforderung und insbesondere für die Überzeugung, dass unendliche Ketten zunehmender Entropie durch iterierte Ausführung tatsächlich möglich sind;
@flawr für verschiedene Vorschläge, einschließlich der Änderung der Score-Funktion und zum Schreiben des sehr nützlichen Snippets;
@Angs, um auf einen wesentlichen Nachteil in einer früheren Definition der Bewertungsfunktion hinzuweisen;
@Dennis für eine Korrektur im JavaScript-Snippet;
@ETHproductions für eine weitere Korrektur im Snippet;
@PeterTaylor für eine Korrektur in der Definition von Entropie.