Code-Golf beinhaltet immer einige Antworten, die die Regeln mehr oder weniger biegen, indem sie Einschränkungen aufheben, die die Herausforderer für selbstverständlich hielten oder einfach nicht bedachten und in den Regeln nicht auflisteten. Eine dieser interessanten Lücken ist die Möglichkeit, mehr auszugeben , als die Herausforderung verlangt, um ein besseres Ergebnis zu erzielen.
Aus diesem Grund können wir einen universellen Code-Golf-Solver schreiben, der die gewünschte Ausgabe ausgibt - wenn Sie sich nicht darum kümmern, dass es Ewigkeiten dauern könnte und viele andere Dinge davor und danach ausgibt.
Alles, was wir ausgeben müssen, ist eine Sequenz, die garantiert jede mögliche Teilsequenz enthält. Für diesen Codegolf ist dies die Ehrenfeucht-Mycielski-Sequenz :
Die Sequenz beginnt mit den drei Bits 010; Jede aufeinanderfolgende Ziffer wird gebildet, indem das längste Suffix der Sequenz gefunden wird, das auch früher in der Sequenz erscheint, und das Bit ergänzt wird, das auf das jüngste frühere Auftreten dieses Suffix folgt.
Jede endliche Teilfolge von Bits tritt zusammenhängend und unendlich oft innerhalb der Folge auf
Die ersten Ziffern der Sequenz sind:
010011010111000100001111 ... (Sequenz A038219 in OEIS ).
Wenn wir 8 Bits der Sequenz zu einem Byte kombinieren, erhalten wir eine ASCII-Ausgabe, die wir auf dem Bildschirm oder in einer Datei ausgeben können und die jede mögliche endliche Ausgabe enthält . Das Programm gibt Teile von pi aus, den Text von „Never gonna give you up“ , ein paar nette ASCII-Grafiken, seinen eigenen Quellcode und alles andere, was Sie ausgeben möchten.
Um die Korrektheit zu testen, sind hier Hashes für die ersten 256 Bytes der Sequenz:
MD5: 5dc589a06e5ca0cd9280a364a456d7a4
SHA-1: 657722ceef206ad22881ceba370d32c0960e267f
Die ersten 8 Bytes der Sequenz in hexadezimaler Schreibweise lauten:
4D 71 0F 65 27 46 0B 7C
Regeln:
Ihr Programm muss die Ehrenfeucht-Mycielski-Sequenz ausgeben (sonst nichts) und 8 Bits zu einem Byte / ASCII-Zeichen kombinieren.
Das kürzeste Programm (Anzahl der Zeichen) gewinnt. Subtrahieren Sie 512 von Ihrer Zeichenanzahl, wenn Sie es schaffen, die Sequenz in linearer Zeit pro generiertem Byte zu generieren .