fundo
Como a maioria dos usuários regulares de PPCG saberá, uma solução é um programa que gera seu próprio código-fonte quando executado; e a distância de Levenshtein entre duas cadeias é o número mínimo de inserções, exclusões e edições necessárias para alterar uma cadeia pela outra. Neste desafio, estamos combinando os dois conceitos em um "levenquine": um programa que gera seu próprio código-fonte, mas com uma instância de um caractere inserido, excluído ou substituído por um caractere diferente. (Em outras palavras, a distância de Levenshtein entre o programa e sua saída é 1.)
A tarefa
Escreva uma levenquina de modo que sua saída seja uma levenquina, a saída desse programa também seja uma levenquina e assim por diante. Além disso, em algum momento, a sequência de executar repetidamente o programa, executar sua saída, executar a saída de sua saída etc. deve, eventualmente, retornar ao programa original.
Há uma restrição adicional que torna as coisas muito mais difíceis: deve haver dois programas distintos em algum lugar desse ciclo que não possuem caracteres em comum (em outras palavras, não existe um caractere existente em um programa e também existe no outro programa). Portanto, seu programa terá que se transformar gradualmente em um conjunto de caracteres diferente e voltar novamente.
Se você estiver usando uma linguagem de programação que possui um clichê inevitável que é necessário em qualquer programa que produza saída (por exemplo, ele só tem uma maneira de escrever um print
declaração e nenhuma outra forma útil de saída), você pode tratar esse clichê como inexistente para a finalidade de determinar quais caracteres dois programas têm em comum. No entanto, você ainda deve contar esse clichê com o objetivo de determinar a propriedade Levenquine do código.
Esclarecimentos
- Cada um dos "programas" no ciclo pode ser um programa completo ou uma função. Nem todos precisam ser iguais, por exemplo, alguns podem ser programas completos e outros podem ser funções.
- Nem todos os programas do ciclo precisam usar a mesma forma de saída. Por exemplo, alguns podem produzir via saída padrão e outros podem produzir via erro padrão.
- Seus programas serão executados sem entrada (ou em idiomas que exigem entrada para fazer qualquer coisa, a entrada mais simples possível).
- Aplicam- se regras de quine apropriadas ; embora um Levenquine não seja um verdadeiro quine, você não pode fazer nada que seja ilegal ao escrever um quine adequado. Em particular, o programa nulo nunca é uma saída válida de um Levenquine adequado (e, portanto, não pode fazer parte do seu ciclo).
- A restrição Levenquine é medida em termos de caracteres, em vez de bytes (por exemplo,
ê
é um caractere mesmo quando a fonte é codificada em UTF-8). A restrição sem caracteres em comum também é medida em termos de caracteres. A condição de vitória, no entanto, conta em bytes.
Condição de vitória
Envie pelo menos os três programas a seguir do ciclo: o programa mais curto (medido em bytes); e dois programas do ciclo que não possuem caracteres em comum. É possível que dois deles sejam iguais, e também é possível que todos os três sejam distintos. A pontuação é baseada no comprimento em bytes do programa mais curto, com o menor sendo melhor, tornando assim uma espécie de competição de golfe com código .