Antecedentes
Como la mayoría de los clientes habituales de PPCG sabrán, un quine es un programa que genera su propio código fuente cuando se ejecuta; y la distancia de Levenshtein entre dos cadenas es el número mínimo de inserciones, eliminaciones y ediciones necesarias para cambiar una cadena a la otra. En este desafío, estamos combinando los dos conceptos en una "levenquina": un programa que genera su propio código fuente, pero con una instancia de un carácter insertado, eliminado o reemplazado con un carácter diferente. (En otras palabras, la distancia de Levenshtein entre el programa y su salida es 1.)
La tarea
Escriba una levenquina de modo que su salida sea una levenquina, la salida de ese programa también sea una levenquina, y así sucesivamente. Además, en algún momento, la secuencia de ejecutar repetidamente el programa, ejecutar su salida, ejecutar la salida de su salida, etc., finalmente debe volver al programa original.
Hay una restricción adicional que hace las cosas mucho más difíciles: debe haber dos programas distintos en algún lugar dentro de este ciclo que no tengan caracteres en común (en otras palabras, no hay ningún carácter que exista dentro de un programa y que también exista dentro del otro programa). Por lo tanto, su programa tendrá que transformarse gradualmente en un conjunto de caracteres diferente y volver a funcionar.
Si está utilizando un lenguaje de programación que tiene una plantilla inevitable que se requiere en cualquier programa que produzca salida (por ejemplo, solo tiene una forma de escribir una print
declaración y ninguna otra forma útil de salida), puede tratar esa placa repetitiva como inexistente para el propósito de determinar qué caracteres tienen en común dos programas. Sin embargo, aún debe contar esa plantilla con el fin de determinar la propiedad Levenquine del código.
Aclaraciones
- Cada uno de los "programas" en el ciclo puede ser un programa completo o una función. No todos tienen que ser iguales, por ejemplo, algunos podrían ser programas completos y otros podrían ser funciones.
- No todos los programas en el ciclo necesitan usar la misma forma de salida. Por ejemplo, algunos podrían salir a través de una salida estándar, y otros podrían salir a través de un error estándar.
- Sus programas se ejecutarán sin entrada (o en idiomas que requieren entrada para hacer cualquier cosa, la entrada más simple posible).
- Se aplican reglas de quine adecuadas ; aunque una Levenquine no es una quine verdadera, no puede hacer nada que sea ilegal al escribir una quine adecuada. En particular, el programa nulo nunca es una salida válida de un Levenquine adecuado (y, por lo tanto, no puede ser parte de su ciclo).
- La restricción de Levenquine se mide en términos de caracteres, en lugar de bytes (por ejemplo,
ê
es un carácter incluso cuando la fuente está codificada en UTF-8). La restricción sin caracteres en común también se mide en términos de caracteres. La condición de victoria, sin embargo, cuenta en bytes.
Condición de victoria
Envíe al menos los siguientes tres programas del ciclo: el programa más corto (medido en bytes); y dos programas del ciclo que no tienen caracteres en común. Es posible que dos de estos sean iguales, y también es posible que los tres sean distintos. El puntaje se basa en la longitud en bytes del programa más corto, siendo más corto mejor, lo que hace de este un tipo de competencia de código de golf .