Como sabemos, um quine é um programa que gera seu próprio código-fonte. No entanto, também é possível escrever um programa que produza outro programa diferente, que produz o primeiro programa novamente. Por exemplo, o programa Python 2
x = '''x = {}
print 'print '+'"'*3+x.format("'"*3+x+"'"*3)+'"'*3'''
print 'print '+'"'*3+x.format("'"*3+x+"'"*3)+'"'*3
, quando executado, produzirá o seguinte texto:
print """x = '''x = {}
print 'print '+'"'*3+x.format("'"*3+x+"'"*3)+'"'*3'''
print 'print '+'"'*3+x.format("'"*3+x+"'"*3)+'"'*3"""
Quando executado como um programa Python, isso produzirá o código original novamente. Isso é chamado de quine iterativo . Como você precisa executá-lo duas vezes para recuperar o código original, dizemos que ele tem o período 2 . Mas é claro, períodos muito mais altos são possíveis.
Seu desafio é escrever um quine iterativo pelo maior período possível, em 100 bytes ou menos , no idioma de sua escolha. (Observe que meu exemplo acima não se encaixa nessa especificação, pois possui 119 bytes, incluindo a nova linha à direita.)
Observe as seguintes regras e esclarecimentos:
- As regras usuais de quine se aplicam, ou seja, seu programa não pode usar recursos de linguagem que permitiriam acessar diretamente seu próprio código-fonte.
- As saídas iteradas precisam eventualmente retornar ao código original e você deve incluir uma demonstração ou prova de que isso ocorrerá.
- Você também deve incluir uma explicação de por que o ciclo é tão longo quanto você diz. Isso não precisa estar no nível de uma prova matemática, mas deve ser convincente para alguém familiarizado com o seu idioma. (Esta regra está aqui porque espero que algumas respostas envolvam números muito, muito grandes.)
- Não há problema em dizer algo como "pelo menos 1.000.000 de iterações" em vez de fornecer o número exato, desde que você possa provar que é pelo menos esse tempo. Nesse caso, sua pontuação seria 1.000.000. Caso contrário, sua pontuação é o período da sua avaliação.
- O limite de 100 bytes se aplica apenas ao seu programa inicial - os programas que ele produz podem ser mais longos, embora, é claro, eles precisem voltar a 100 bytes para gerar o código original.
- Você pode assumir que sua máquina possui RAM e tempo de execução infinitos, mas não pode assumir tipos de dados de precisão ilimitados (como números inteiros) se o seu idioma não os possuir. Você pode assumir que não há limite para o tamanho da entrada que seu analisador pode manipular.
- A pontuação mais alta vence.
Observe: existe um desafio existente chamado Quit Whining; Comece o Quining que também envolve a iteração de quines. No entanto, além de basear-se no mesmo conceito, esses são tipos de desafios completamente diferentes. O outro é código de golfe direto, enquanto este é (intencionalmente!) Realmente um problema de castor ocupado disfarçado. As técnicas necessárias para produzir uma boa resposta a essa pergunta provavelmente serão muito diferentes daquilo que é necessário para responder à outra pergunta, e isso é basicamente por design.