Il code golf implica sempre alcune risposte che piegano più o meno le regole rompendo i vincoli che gli sfidanti hanno dato per scontato o semplicemente non ci hanno pensato e non hanno elencato nelle regole. Una di queste interessanti lacune è la possibilità di produrre più di quanto la sfida richieda per ottenere un risultato migliore.
Portando questo estremo, possiamo scrivere un risolutore di golf di codice universale che stampa l'output desiderato - se non ti interessa che potrebbe richiedere secoli e produrre molte altre cose prima e dopo.
Tutto ciò di cui abbiamo bisogno per produrre è una sequenza che garantisca contenere ogni possibile sottosequenza. Per questo codice golf, questa sarà la sequenza di Ehrenfeucht-Mycielski :
La sequenza inizia con i tre bit 010; ogni cifra successiva viene formata trovando il suffisso più lungo della sequenza che appare anche prima all'interno della sequenza e completando il bit che segue l'apparizione precedente più recente di quel suffisso.
Ogni sottosequenza finita di bit avviene in modo contiguo, infinitamente spesso all'interno della sequenza
Le prime cifre della sequenza sono:
010011010111000100001111 ... (sequenza A038219 in OEIS ).
Combinando 8 bit della sequenza in un byte, otterremo un output ASCII che possiamo produrre sullo schermo o su un file e che contiene ogni possibile output finito . Il programma produrrà parti di pi, i testi di "Never never give you up" , alcune belle opere d'arte ASCII, il suo codice sorgente e tutto il resto che si possa desiderare che venga pubblicato.
Per verificare la correttezza, ecco gli hash per i primi 256 byte della sequenza:
MD5: 5dc589a06e5ca0cd9280a364a456d7a4
SHA-1: 657722ceef206ad22881ceba370d32c0960e267f
I primi 8 byte della sequenza in notazione esadecimale sono:
4D 71 0F 65 27 46 0B 7C
Regole:
Il programma deve generare la sequenza Ehrenfeucht-Mycielski (nient'altro), combinando 8 bit con un carattere byte / ASCII.
Vince il programma più breve (conteggio caratteri). Sottrai 512 dal conteggio dei personaggi se riesci a generare la sequenza in tempo lineare per byte generato .