Su objetivo es generar una espiral de Fibonacci con números.
Ejemplo de entrada / salida
1 -> 1
2 -> 1 1
3 -> 1 1
2 2
2 2
6 -> 8 8 8 8 8 8 8 8 5 5 5 5 5
8 8 8 8 8 8 8 8 5 5 5 5 5
8 8 8 8 8 8 8 8 5 5 5 5 5
8 8 8 8 8 8 8 8 5 5 5 5 5
8 8 8 8 8 8 8 8 5 5 5 5 5
8 8 8 8 8 8 8 8 1 1 3 3 3
8 8 8 8 8 8 8 8 2 2 3 3 3
8 8 8 8 8 8 8 8 2 2 3 3 3
Entrada La entrada se puede tomar a través de STDIN o argumento de función. Será un solo número
Salida La salida puede ser de STDOUT o el valor de retorno de una función. Debería ser una sola cadena.
No se permiten espacios en blanco adicionales al final de la línea. La salida puede contener dígitos, avances de línea (nuevas líneas) y espacios.
La orientación no importa, esto significa rotaciones y reflexiones. Siempre que siga un patrón espiral de Fibonacci válido.
Los números con diferentes cantidades de dígitos (por ejemplo, 1 y 13) deben estar alineados a la derecha entre sí. Es posible que sea necesario agregar un espacio al comienzo de una línea para que todo pueda alinearse.
1 1 1 1
100 100 should actually be 100 100
Puedes ver un ejemplo aquí
Este es el código de golf, ¡el código más corto en bytes gana!
Numbers with different amounts of digits (e.g. 1 and 13) should be aligned to the left side of the digit a space may need to be added to the very beginning of a line so everything can line up.
Esto suena como que podría ser más claro como dos oraciones.Respuestas:
APL, 23
Explicación:
Pruébalo en tryapl.org
fuente
⌸
o⍤
) en ese conjunto de caracteres y no se pueden usar cuando desea evocar esa regla.Matlab, 84 bytes
Se usa una función. La salida está en stdout.
Ejemplos:
Matlab, 78 bytes
Igual que el anterior, excepto que se explota la característica de Matlab, es decir, muestra automáticamente la salida de la función (como una cadena) en stdout. Esto evita la conversión a cadena en el enfoque anterior.
fuente
Python 2, 121 bytes
Las reglas relajadas sobre las rotaciones hacen que esto sea mucho más simple.
No he usado backticks en lugar de
str(a)
aquí porque no estoy seguro de si se nos permiten más espacios iniciales de los necesarios, si alguna vez llegamos a largos. Aunque, incluso si lo fuéramos, usarloa
sería más corto de todos modos.fuente
Rubí,
243242236233222170130 bytesfuente
t==value
condiciones at>value
. Por ejemplo,(t=x%4)>2?s.times{r<<[s]*s}:t>1?s.times{r.map!{|w|w.unshift s}}:t>0?s.times{r.unshift [s]*s}:r.map!{|w|w+=[s]*s}}
Python -
189179174fuente
J, 36 bytes
Uso:
Método:
La función gira el cuadrado actual y agrega el nuevo cuadrado al actual una
input-1
vez. El tamaño del cuadrado y los valores de los elementos se recopilan del tamaño del rectángulo anterior.Explicación del código:
Pruébelo en línea aquí.
fuente
Haskell,
183176171163 bytesLa función es
f
, que toma un número y devuelve una sola cadena:fuente
Pyth, 34 bytes
Sorprendentemente, más de la mitad del código está imprimiendo / rellenando, en lugar de generar la matriz.
La generación de la matriz es realmente simple, sin embargo, consiste en una transposición y una inversión, y agrega N líneas que contienen N copias de N, donde N es el número actual de líneas.
Ejemplo de salida para 7:
fuente
Perl,
289277257bytesfuente
K, 48 bytes
Y en acción:
Todavía puede haber algunas buenas oportunidades para jugar al golf.
El programa consiste básicamente en dos partes: generar la matriz concatenada y formatearla para la salida. El primero es bastante simple:
Comenzando con una matriz 1x1 que contiene 1, construya un vector de longitud T de T donde T es la longitud de la matriz inicial en la primera dimensión (
t#t:#x
) y adjúntelo a cada fila de la matriz original (x,\:
). Invertir y transponer el resultado (+|
) lo gira 90 grados. Hacemos esto N-1 veces.El formato es bastante complicado, porque el enfoque natural de K para imprimir una matriz no alineará las columnas numéricas de la manera que necesitamos:
La idea básica es tomar el elemento máximo de la matriz (
|//x
), convertirlo en una cadena (unaria$
), tomar su longitud más uno (1+#
) y luego formatear los elementos de la matriz en cadenas alineadas a la derecha de ese tamaño. Luego, para ordenar, unir esas cadenas (,/'
) y soltar el espacio inicial resultante (1_'
).fuente
CJam, 48 bytes
Pruébalo en línea
La parte central de generar el patrón parece razonablemente sencilla. Gire el rectángulo creado hasta ahora y agregue un cuadrado de valores en la parte inferior.
Sin embargo, el código para rellenar el resultado parece horrible. Intenté varias combinaciones
f
y:
operadores para aplicar el relleno a la lista anidada, pero nada funcionó. Si alguien tiene mejores sugerencias, son bienvenidas.fuente
Wf%
. Además, ¿sería capaz de hacer algo{Se[}ff%
más que:U;{USe[}f%
el relleno? (Eso podría no funcionar como es, no puedo pensarlo ahora.)Pyth, 29 bytes
Demostración.
Si el relleno fuera libre / implícito, como en APL, o se permitiera la salida de matriz, esto sería 14 bytes:
fuente
Rubí, 129 bytes
Edité la otra respuesta de Ruby un montón, pero mi cambio más reciente no está siendo aceptado o algo así, así que aquí está:
fuente
ES6, 248 bytes
Donde
\n
representa un carácter de nueva línea literal.Molesto, el formato ocupa una gran parte del código.
f
es una función auxiliar que crea una matriz completa. Se usa principalmente para crear los cuadrados rellenos, pero también se dobla fácilmente para producir los casos base para la recursión.g
Es el principal gruñido. Genera recursivamente la última pero una solución, la gira 180 grados y luego agrega los siguientes dos cuadrados.fuente