Como sabemos, un quine es un programa que genera su propio código fuente. Sin embargo, también es posible escribir un programa que genere otro programa diferente que emita el primer programa nuevamente. Por ejemplo, el programa Python 2
x = '''x = {}
print 'print '+'"'*3+x.format("'"*3+x+"'"*3)+'"'*3'''
print 'print '+'"'*3+x.format("'"*3+x+"'"*3)+'"'*3
Cuando se ejecute, mostrará el siguiente texto:
print """x = '''x = {}
print 'print '+'"'*3+x.format("'"*3+x+"'"*3)+'"'*3'''
print 'print '+'"'*3+x.format("'"*3+x+"'"*3)+'"'*3"""
Cuando se ejecuta como un programa Python, esto generará el código original nuevamente. Esto se llama una quine iterativa . Como debe ejecutarlo dos veces para recuperar el código original, decimos que tiene el período 2 . Pero, por supuesto, son posibles períodos mucho más altos.
Su desafío es escribir un quine iterativo con el mayor tiempo posible, en 100 bytes o menos , en el idioma que elija. (Tenga en cuenta que mi ejemplo anterior no se ajusta a esta especificación, ya que son 119 bytes, incluida la nueva línea final).
Tenga en cuenta las siguientes reglas y aclaraciones:
- Se aplican las reglas habituales de quine, es decir, su programa no puede usar funciones de lenguaje que le permitan acceder directamente a su propio código fuente.
- Las salidas iteradas finalmente tienen que volver a su código original, y debe incluir una demostración o prueba de que lo hará.
- También debe incluir una explicación de por qué el ciclo es tan largo como usted lo dice. Esto no tiene que estar al nivel de una prueba matemática, pero debería ser convincente para alguien familiarizado con su idioma. (Esta regla está aquí porque espero que algunas de las respuestas involucren números muy, muy grandes).
- Está bien decir algo así como "al menos 1,000,000 de iteraciones" en lugar de dar el número exacto, siempre y cuando pueda probar que es al menos ese tiempo. En este caso, su puntaje sería de 1,000,000. De lo contrario, su puntaje es el período de su quine.
- El límite de 100 bytes solo se aplica a su programa inicial: los programas que genera pueden ser más largos, aunque, por supuesto, eventualmente tendrán que volver a bajar a 100 bytes para generar su código original.
- Puede suponer que su máquina tiene RAM infinita y tiempo de ejecución infinito, pero no puede asumir tipos de datos de precisión ilimitados (como enteros) si su idioma no los tiene. Usted puede asumir que no hay límite a la longitud de la entrada de su analizador puede manejar.
- El puntaje más alto gana.
Tenga en cuenta: hay un desafío existente llamado Quit Whining; Comience Quining que también implica iterar quines. Sin embargo, aparte de basarse en el mismo concepto, estos son tipos de desafíos completamente diferentes. El otro es el golf de código directo, mientras que este es (¡intencionalmente!) Realmente un problema de castor ocupado disfrazado. Es probable que las técnicas necesarias para producir una buena respuesta a esta pregunta sean muy diferentes de las que se necesitan para responder a la otra pregunta, y esto es muy similar al diseño.