Escriba un programa con longitud n que genere otro programa cuya longitud sea el siguiente número de Fibonacci después de n. El nuevo programa debe hacer lo mismo: generar otro programa cuya longitud sea el siguiente número de Fibonacci, etc.
n en sí mismo (la longitud del programa original) no tiene que ser un número de Fibonacci, aunque sería bueno si lo fuera.
El código más corto gana.
Sin recursos externos, solo ASCII, se requiere compilador / intérprete gratuito.
Si su salida termina en una nueva línea, también se cuenta.
code-golf
quine
fibonacci
code-generation
aditsu renunció porque SE es MALO
fuente
fuente
int
oBigInteger
)Respuestas:
CJam,
2623Acabo de probar tu idioma.
9 es
(22*0.618 + 0.5 - 1)/1.618 + 1
.Calcula su propia longitud en
*1.618
lugar de sumar repetidamente los dos números. En la primera versión, llenará la salida antes de me{
gusta1)))))))))
, que cuenta esos caracteres. Di el resultadon
. La longitud total esn+22
, y la nueva longitud anterior{
debe ser(n+22)*1.618-22
, redondeada. Disminuya en uno para contar el número de)
's. Entonces será aproximadamente igual a(n+8)*1.618
.Versión antigua:
El número 14 es
24*0.618 + 0.5 - 1
.fuente
Python 2, 160 bytes
Este es un verdadero cuasi-quine; no lee su propia fuente, pero la genera. Primera salida (tiene nueva línea final):
Segundo:
Editar: ¡Vaya! Olvidé cambiar la cadena cuando cambié de
;
s a1
s, por lo que la segunda salida estaba generando puntos y comas adicionales (que Python no admite). Fijofuente
CJam,
4131 bytesPruébalo en línea.
Salida
Cómo funciona
fuente
Python - 89
Mi cuenta perfecta de personajes se ha ido . ; _; Gracias a TheRare por señalar lo de la nueva línea y a Quincunx por sugerir que use Python 2, eliminando 2 caracteres.
EDITAR : ahora solo usa más
#
s en lugar de1
s; 12 caracteres más cortos.EDIT 2 : 94 caracteres! Eliminó algunas repeticiones. >: 3
EDIT 3 : alternativa de repr más corta para Python 2.
EDIT 4 : La salida es un carácter más corto ahora.
EDITAR 5 : El uso de
%r
acortarlo fue tomado de una respuesta a otra pregunta de @primo.EDITAR 6 : más corto. :RE
Aquí hay una versión de Python 3:
Esta respuesta es similar a la de @Quincunx.
fuente
print
siempre agrega una nueva línea, a menos que especifique unend=''
argumento.s,a,b="s,a,b=%s,%i,%i;o=s%%(`s`,b,a+b)+'#';print o+(b-len(o)-1)*'1'",89,144;o=s%(`s`,b,a+b)+'#';print o+(b-len(o)-1)*'1'
JavaScript, 94
Basado en un conocido JavaScript Quine , esto devuelve casi la misma función, solo seguida de una cantidad de barras, de modo que suma 144, que es el próximo número de Fibonacci después de N. Y así sucesivamente ...
N no es un número de Fibonacci, pero solo fue "bueno tenerlo".
fuente
p = (my answer)
y luegop = eval(p)
un par de veces, y llegué hasta 196418 ... después de que el tiempo de procesamiento fue> 1 segundo, así que dejé la prueba: P Pero supongo que puede continuar aún más.p=eval(p)
, también verificap.length
. Después de llegar a 987, obtengo la longitud 1598, no un número de Fibonacci.Mathematica
Esta es una implementación muy sencilla (es decir, no hay ofuscación aquí). Es una función anónima que se devuelve con un poco de relleno para lograr la longitud correcta. Mathematica es homoicónico: el código y los datos están representados como expresiones de Mathematica, lo que hace que sea realmente fácil modificar / generar código sobre la marcha. Esto también significa que los recuentos de caracteres no son una medida natural de la longitud del código. El tamaño de Epxression ( "recuento de hojas" ) es. Esta versión se basa en recuentos de hojas como medida de longitud de código.
Si asignamos esta función anónima a una variable
f
(para que pueda mostrar lo que sucede de manera legible), y seguimos llamándola 1, 2, 3, ... veces, cada vez que mida la longitud del valor de retorno, esto es lo que obtenemos:Con respecto al requisito de intérprete gratuito: Mathematica es gratuito para Raspberry Pi. De lo contrario, este código debería ser sencillo de transferir a Mathics (código abierto) . Lo único que falta en Mathics es
InverseFunction
, que se puede reemplazar como aquí (pero soy vago :).fuente
LeafCount
parecía mucho más interesante que usar el recuento de caracteres (lo que implicaría una manipulación de código aburrida como manipulación de cadena). :-) No voy a cambiarlo para usar el recuento de caracteres, pero puedo eliminarlo sin ningún mal presentimiento si lo desea.Python 3.8 (prelanzamiento) , 78 bytes
Pruébalo en línea!
fuente