Le golf de code implique toujours des réponses qui détournent les règles plus ou moins en brisant les contraintes que les challengers tenaient pour acquises ou tout simplement n'ont pas pensé et n'ont pas énuméré dans les règles. L'une de ces lacunes intéressantes est la possibilité de produire plus que ce que le défi demande pour obtenir un meilleur résultat.
En poussant cela à l'extrême, nous pouvons écrire un solveur de golf à code universel qui imprime la sortie souhaitée - si vous ne vous souciez pas que cela puisse prendre des années et génère beaucoup d'autres choses avant et après.
Tout ce dont nous avons besoin pour produire est une séquence qui est garantie de contenir toutes les sous-séquences possibles. Pour ce code golf, ce sera la séquence Ehrenfeucht-Mycielski :
La séquence commence par les trois bits 010; chaque chiffre successif est formé en trouvant le suffixe le plus long de la séquence qui apparaît également plus tôt dans la séquence, et en complétant le bit suivant l'apparence antérieure la plus récente de ce suffixe.
Chaque sous-séquence finie de bits se produit de manière contiguë, infiniment souvent dans la séquence
Les premiers chiffres de la séquence sont:
010011010111000100001111 ... (séquence A038219 dans OEIS ).
En combinant 8 bits de la séquence à un octet, nous obtiendrons une sortie ASCII que nous pourrons sortir à l'écran ou dans un fichier et qui contient toutes les sorties finies possibles . Le programme affichera des parties de pi, les paroles de «Never gonna give you up» , de l'art ASCII sympa, son propre code source et tout le reste que vous voudriez qu'il sorte.
Pour tester l'exactitude, voici les hachages pour les 256 premiers octets de la séquence:
MD5: 5dc589a06e5ca0cd9280a364a456d7a4
SHA-1: 657722ceef206ad22881ceba370d32c0960e267f
Les 8 premiers octets de la séquence en notation hexadécimale sont:
4D 71 0F 65 27 46 0B 7C
Règles:
Votre programme doit produire la séquence Ehrenfeucht-Mycielski (rien d'autre), combinant 8 bits à un caractère octet / ASCII.
Le programme le plus court (nombre de caractères) gagne. Soustrayez 512 de votre nombre de caractères si vous parvenez à générer la séquence en temps linéaire par octet généré .