O código golf sempre envolve algumas respostas que distorcem as regras mais ou menos quebrando as restrições que os desafiadores deram como certa ou simplesmente não pensaram e não listaram nas regras. Uma dessas brechas interessantes é a possibilidade de gerar mais do que o desafio exige para obter um resultado melhor.
Levando isso a extremos, podemos escrever um solucionador de golfe com código universal que imprima a saída desejada - se você não se importa que isso pode levar séculos e gera muitas outras coisas antes e depois dela.
Tudo o que precisamos produzir é uma sequência que é garantida para conter todas as subsequências possíveis. Para este código de golfe, esta será a sequência de Ehrenfeucht-Mycielski :
A sequência começa com os três bits 010; cada dígito sucessivo é formado pela localização do sufixo mais longo da sequência que também aparece mais cedo na sequência e complementando o bit após a aparência anterior mais recente desse sufixo.
Toda subsequência finita de bits ocorre contígua, infinitamente, freqüentemente na sequência
Os primeiros dígitos da sequência são:
010011010111000100001111 ... (sequência A038219 em OEIS ).
Combinando 8 bits da sequência em um byte, obteremos uma saída ASCII que podemos gerar na tela ou em um arquivo e que contém todas as saídas finitas possíveis . O programa produzirá partes de pi, as letras de "Never never desist you" , algumas belas obras de arte ASCII, seu próprio código-fonte e tudo o mais que você desejar.
Para testar a exatidão, aqui estão os hashes dos primeiros 256 bytes da sequência:
MD5: 5dc589a06e5ca0cd9280a364a456d7a4
SHA-1: 657722ceef206ad22881ceba370d32c0960e267f
Os primeiros 8 bytes da sequência em notação hexadecimal são:
4D 71 0F 65 27 46 0B 7C
Regras:
Seu programa deve gerar a sequência Ehrenfeucht-Mycielski (nada mais), combinando 8 bits em um byte / caractere ASCII.
O programa mais curto (contagem de caracteres) vence. Subtraia 512 da sua contagem de caracteres se você conseguir gerar a sequência em tempo linear por byte gerado .