Considere una secuencia basada en las relaciones de recurrencia f(n) = f(n-1)+f(n-2)
, comenzando con f(1) = x1, f(2) = x2
. Para x1 = 2, x2 = 1
, la secuencia comienza así:
2 1 3 4 7 11 18 29 47 76 123 199 322 521 843
Concatenar esto en una cadena dará:
213471118294776123199322521843
Ahora, divida esta lista en los números más pequeños posibles que da y(n) > y(n-1)
. Comience con el primer número, luego el segundo, etc. El primer número de salida siempre debe ser un solo dígito. Rellene el último número con el número requerido de ceros.
2 13 47 111 829 4776 12319 93225 218430
Obtendrá dos números, (x1, x2)
como entrada, en cualquier formato conveniente, y el desafío es generar la lista ordenada.
Reglas:
- La función y los programas están bien.
- La secuencia inicial tendrá exactamente 15 números (el último número es
f(15)
). x1
yx2
no son negativos (cero es posible).- La salida puede estar en cualquier formato conveniente
- El vector de salida
y
debe crearse de modo quey2 > y1
.- Primero el más pequeño posible
y1
, luego el más pequeño posibley2
,y3
y así sucesivamente.
- Primero el más pequeño posible
- Si
x1 = x2 = 0
entonces, genera 15 ceros (en el mismo formato que otra salida, es decir, no000000000000000
).
Ejemplos :
Input: 1 1
Output: 1 12 35 81 321 345 589 1442 3337 7610
Input: 3 2
Output: 3 25 71 219 315 0811 3121 23435 55898 145300
|
Optional leading zero
Input: 0 0
Output: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
El código más corto en bytes gana. Incluya un enlace a un intérprete en línea si es posible.
code-golf
math
arithmetic
Stewie Griffin
fuente
fuente
5467
ser?54 67
?5 46 70
?Respuestas:
Pyth, 56 bytes
Banco de pruebas
Explicación:
Primero, verificamos si la entrada es precisa
0, 0
. Si es así, imprime 15 ceros.De lo contrario, producimos la secuencia, con
jkhM.u,eNsN14Q
. Esto es similar al algoritmo Pyth estándar para la secuencia de Fibonacci.A continuación, reducimos sobre esta cadena. El acumulador es una lista de cadenas, que representa cada número en la secuencia dividida. En cada paso de reducción, tomamos el siguiente carácter y verificamos si el acumulador está en orden, utilizando la función auxiliar
y
, definida conLsgM.:sMb2
, que es verdad si la entrada está fuera de servicio. Si está en orden, agregamos el siguiente carácter a la lista como su propio número. Si no, agregamos el siguiente carácter al final de la última cadena. Esto se logra conu?yGX_1GHaGH ... Y
.A continuación, realizamos un bucle while funcional. El ciclo continúa hasta que la lista en ejecución esté en orden, reutilizando la función auxiliar. En cada paso, un
0
se agrega a al final de la última cadena de la lista. Esto se logra con.WyHX_1Z`0
.Finalmente, las cadenas se convierten en enteros, con
sM
e impresas.Pyth, 51 bytes
Creo que esto funciona, pero es demasiado lento para probarlo: es una solución de fuerza bruta para dividir la cuerda.
Haré algunas mejoras en la
X
función, pero el código anterior funciona en la versión de Pyth que era más reciente cuando se publicó la pregunta.fuente
JavaScript ES6, 127
135Prueba
fuente
JavaScript ES6,
187180187184182179175172165160155154 bytesObtengo resultados similares cuando lo ejecuto
1,1
y3,2
pruebo casos.0,0
ha tomado un exceso de 26 bytes ...De-golf + convertido a ES5 + demo:
fuente
n <= 15
.f(n) = f(n-1)+f(n-2)
tiene un valor máximo de exactamente 15. El número de valores de salida se determina en función del algoritmo, nada más.f(1)=x1
yf(2)=x2
pueden ser superiores a 15. El número de valores de salida se determina en función de los valores de entrada. Porque3 2
serán las 10.JavaScript (ES6), 162 bytes
Explicación
Prueba
Mostrar fragmento de código
fuente
Mathematica, 192 bytes
Casos de prueba:
Las longitudes de los nombres de las funciones me están matando.
fuente
Haskell,
165159152142141 bytesEjemplo de uso:
3 % 2
->[3,25,71,219,315,811,3121,23435,55898,145300]
.Demostración en línea (con un
main
contenedor).Cómo funciona:
fuente
PowerShell,
167166 bytesGuardado un byte eliminando la
$s
variable y simplemente alimentando el bucle de salida directamente.Ungolfed y comentó:
fuente
Perl 6 , 107 bytes
Uso:
Explicación
crea una secuencia similar a Fibonacci, comenzando con los argumentos (
@_
) deslizados (|
) entoma los primeros 15 elementos de esa secuencia
combina eso en una sola cadena (
.join
), lo divide en una secuencia de caracteres individuales (.comb
) y lo almacena en el escalar "predeterminado" ($_
) después de coaccionar la secuencia en una matriz mutable, almacenándola primero en una matriz anónima (@
)encuentra la suma de los valores en el escalar predeterminado y, si es cero, devuelve el escalar predeterminado, que contendrá una matriz de 15 ceros
Si la suma no es cero, crea una lista al cambiar primero el primer elemento en el escalar predeterminado
seguido de generar el resto de los valores, comparándolo con el anterior (
$^b
)si el escalar predeterminado se queda sin valores, use 0 en su lugar (
//0
)detenerse cuando no quedan elementos en el escalar predeterminado
fuente
until (my$a...
? ¿(
No es un delimitador especial?until
, que no existe.