Un Quine es un programa que genera su fuente cuando se ejecuta.
En este desafío, debes hacer una Fibonacci-quine, una variante de la quine.
¿Qué es una fibonacci-quina?
Un fibonacci-quine es un programa que genera una modificación de la fuente mediante la siguiente regla:
La fuente inicial debería ser ...2...
. En otras palabras, la fuente debe contener 2
. (¿Por qué 2? Si fuera 1, nadie sabría si fue el primer 1 o el segundo, incluso el programa en sí)
Cuando se ejecuta, debe generar la fuente, pero solo el número específico (en esta etapa 2
) cambió al siguiente número de la secuencia de Fibonacci. Por ejemplo, ...3...
. Lo mismo ocurre con la salida y la salida de la salida, etc. Puede admitir números enteros de hasta 2 ^ 32-1. Para enteros por encima de ese límite, la próxima salida está a su elección.
Nota de OP
Realmente me gustaría ver una solución creativa para esto. No podría pensar en una solución única para esto, ya que los dos aspectos importantes del desafío, fibonacci y quine, no son fáciles. Estaré esperando entonces!
Respuestas:
Mathematica, 61 bytes
Tenga en cuenta que hay un espacio final. Esta es una función quine, es decir, el código anterior se evalúa como una función sin nombre que, si se llama, devuelve el código como una cadena (con el
2
cambio al siguiente número de Fibonacci).Fue sorprendentemente complicado llegar al trabajo. La idea básica es tomar la función en sí (con
#0
) y reemplazar un número en esa función con el siguiente usando/. v:2 :> nextFib[v]
. Sin embargo,nextFib
no sería evaluado en esta etapa, por lo que realmente no terminaríamos con el nuevo número en el código fuente. Después de buscar por un tiempo para descubrir cómo forzar la evaluación inmediata, encontré esta gran publicación en Mathematica.SE . La técnica "estándar" utiliza unWith
bloque que fuerza la evaluación, pero la segunda respuesta de WReach contiene una alternativa más corta que usa el indocumentado incorporadoRuleCondition
que también fuerza la evaluación.La forma en que calculamos el próximo número de Fibonacci es haciendo uso del hecho de que la razón de números consecutivos es aproximadamente la razón de oro 1.618 ... y esto es preciso hasta el redondeo. Por lo tanto, no necesitamos hacer un seguimiento de los dos últimos números y simplemente podemos hacerlo
Round[GoldenRatio v]
. Esto nunca perderá precisión, ya que MathematicaGoldenRation
es un valor simbólico y, porRound
lo tanto , siempre puede calcular un resultado preciso.En resumen:
Una función sin nombre, donde se
#0
refiere al objeto de la función en sí.Busque un
2
en el árbol de expresión de la función (esto,2
por supuesto, solo coincide), llámelov
y reemplácelo con ...... el siguiente número de Fibonacci.
Y convierta el árbol de expresión resultante en su representación de cadena.
fuente
CJam , 26 bytes
Pruébalo en línea!
Probablemente no del todo óptimo. Simplemente iteramos la secuencia de Fibonacci hasta que el valor es mayor que el último y usamos el resultado como el nuevo valor al comienzo del programa.
fuente
Python 3 , 95 bytes
Pruébalo en línea!
Obviamente, una bifurcación de la respuesta de CJam de Martin Ender .
fuente
CJam , 20 bytes
Pruébalo en línea!
fuente
En realidad , 19 bytes
Pruébalo en línea!
Obviamente, una bifurcación de la respuesta de CJam de Martin Ender .
fuente
Python 3 ,
8179 bytesPruébalo en línea!
Utiliza la proporción áurea para calcular el siguiente número
fuente
Jalea , 14 bytes
Pruébalo en línea! o verificar todas las iteraciones requeridas .
Cómo funciona
fuente
Swift, 251 bytes
Un poco detallado para mí, pero no puedo entender cómo acortarlo:
Sin golf:
Mi problema es tratar de obtener las citas de la nueva versión de
s
.fuente
Cheddar , 136 bytes
Pruébalo en línea!
fuente
Javascript (ES6),
15160 bytesNueva versión, créditos a @ Leaky Nun
Versión antigua :
Basado en esto .
fuente
x=i=>console.log('x='+x+';x('+(i*(5**.5+1)/2+.5|0)+')');x(2)
31000
No es un número de Fibonacci.cc , 35 bytes
Una versión con iteración (56 bytes):
fuente
Rápido, 235 bytes
Esta es una versión mejorada de la respuesta de Caleb .
fuente
Java (OpenJDK 8) , 239 bytes
Pruébalo en línea!
fuente