Introducción (puede ser ignorado)
Poner todos los números positivos en su orden regular (1, 2, 3, ...) es un poco aburrido, ¿no? Así que aquí hay una serie de desafíos en torno a las permutaciones (reorganizaciones) de todos los números positivos. Este es el quinto desafío de esta serie (enlaces al primer , segundo , tercer y cuarto desafío).
En este desafío, nos encontraremos con la matriz de Wythoff, que es una avalancha entrelazada de secuencias de Fibonacci y secuencias de Beatty.
Los números de Fibonacci son probablemente para la mayoría de ustedes una secuencia bien conocida. Dados dos números iniciales y , los siguientes están dados por: para .
La secuencia Beatty , dado un parámetro es: para . Una de las propiedades de la secuencia de Beatty es que para cada parámetro , hay exactamente un parámetro , de modo que las secuencias de Beatty para esos parámetros están disjuntas y unidas, abarcan todos los números naturales, excluyendo 0 (p. Ej .: ).
Ahora viene la parte alucinante: puede crear una matriz, donde cada fila es una secuencia de Fibonacci y cada columna es una secuencia de Beatty. Esta matriz es la matriz de Wythoff . La mejor parte es: ¡cada número positivo aparece exactamente una vez en esta matriz! La matriz se ve así:
1 2 3 5 8 13 21 34 55 89 144 ...
4 7 11 18 29 47 76 123 199 322 521 ...
6 10 16 26 42 68 110 178 288 466 754 ...
9 15 24 39 63 102 165 267 432 699 1131 ...
12 20 32 52 84 136 220 356 576 932 1508 ...
14 23 37 60 97 157 254 411 665 1076 1741 ...
17 28 45 73 118 191 309 500 809 1309 2118 ...
19 31 50 81 131 212 343 555 898 1453 2351 ...
22 36 58 94 152 246 398 644 1042 1686 2728 ...
25 41 66 107 173 280 453 733 1186 1919 3105 ...
27 44 71 115 186 301 487 788 1275 2063 3338 ...
...
Un elemento en la fila columna se define como:
donde es la proporción áurea: .
Si seguimos los anti-diagonales de esta matriz, obtenemos A035513 , que es la secuencia objetivo para este desafío (¡tenga en cuenta que esta secuencia se agrega al OEIS por el propio Neil Sloane !). Como se trata de un desafío de "secuencia pura", la tarea es generar para un dado como entrada, donde es A035513 .
Hay diferentes estrategias que puede seguir para llegar a , lo que hace que este desafío (en mi opinión) sea realmente interesante.
Tarea
Dada una entrada entera , salida en formato entero, donde es A035513 .
Nota: aquí se supone una indexación basada en 1; puede usar indexación basada en 0, entonces , etc. Mencione esto en su respuesta si elige usar esto.
Casos de prueba
Input | Output
---------------
1 | 1
5 | 7
20 | 20
50 | 136
78 | 30
123 | 3194
1234 | 8212236486
3000 | 814
9999 | 108240
29890 | 637
Puede ser divertido saber que el más grande para es
Reglas
- Entrada y salida son enteros
- Su programa debe al menos admitir entradas en el rango de 1 hasta 32767). Tenga en cuenta que sube a números de 30 dígitos en este rango ...
- La entrada no válida (0, flotantes, cadenas, valores negativos, etc.) puede generar salidas imprevistas, errores o un comportamiento (no) definido.
- Se aplican las reglas de E / S predeterminadas .
- Las lagunas predeterminadas están prohibidas.
- Este es el código de golf , por lo que las respuestas más cortas en bytes ganan
999
no9999
Respuestas:
Jalea ,
2724 bytesPruébalo en línea!
Enlace monádico mediante indexación basada en 1. Gracias a @JonathanAllan por una mejor manera de obtener la fila y las columnas
n
y guardar 3 bytes. En su forma más corta, es demasiado lento para n más grande en TIO, por lo que lo siguiente ¡ Pruébelo en línea! reduce el tamaño de la lista inicial de filas y columnas a costa de tres bytes.Explicación
Tenga en cuenta que esto se basa en la descripción del código de Python en la página OEIS.
fuente
...×⁹r‘ÆḞ¤Sð/
guarda uno en tu versión de amalgamación ( TIO )R ,
143130124123 bytesPruébalo en línea!
splits
k
simplemente existe para evitar forzar undrop=F
argumentom[-1:-2,]
para el cason=1
.Gracias a Neil por señalar un golf de 1 byte.
R ,
150138132 bytesPruébalo en línea!
splits
nth
Gracias a Robin Ryder por el
T[2]=1
truco para generar la secuencia de Fibonacci.Ambas soluciones son altamente ineficientes, creando una
nxn
matriz de (muy probablemente)double
s, ya que R promueveinteger
(con signo de 32 bits)double
automáticamente cuando se desborda, pero la segunda debería ser mucho más rápida. Tomarn
como un bignum debería funcionar automáticamente, usando la llamadagmp::as.bigz(n)
, si la pérdida de precisión bajodouble
s fuera preocupante, y entonces el lenguaje seríaR + gmp
.fuente
(1+5^.5)/2
lugar de(.5+5^.5/2)
?Wolfram Language (Mathematica) , 90 bytes
Pruébalo en línea!
fuente
Jalea , 30 bytes
Pruébalo en línea!
Esto es un poco lento, pero se hace una gran mejora con un prefijo de
Ḥ½Ċ
(doble, raíz cuadrada, techo) como en este conjunto de pruebas .fuente
740496902
es el resultado para999
Carbón , 54 bytes
Pruébalo en línea! El enlace es a la versión detallada del código. 0 indexado. Utiliza solo aritmética de enteros, por lo que funciona para valores arbitrarios de gran tamaño. Explicación:
Entrada
q
.Calcule el antidiagonal restando números cada vez mayores de
q
, lo que termina con el número de la fila objetivom
.Calcule los primeros
m+1
términos de A019446 , aunque solo estamos interesados en elm
th.Calcule los primeros
n+4
términos de la serie generalizada de Fibonacci que comienza con[a(m), m]
. Los términos de esta secuencia son losm
términos th de A019446 , A001477 , A000201 , A003622 , A035336 ; Estas dos últimas son las dos primeras columnas de la matriz de Wythoff, por lo que esta secuencia continúa con el resto de lam
fila de la matriz.Salida del término deseado.
fuente