Introducción
Inspirado por el video muy reciente The Trapped Knight - Numberphile , se me ocurrió un desafío.
La secuencia de caballero atrapado es una secuencia entera finita de longitud 2016, a partir de 1, y tiene las siguientes reglas de construcción:
- Escriba una espiral numérica de la siguiente manera:
17 16 15 14 13 ...
18 5 4 3 12 ...
19 6 1 2 11 ...
20 7 8 9 10 ...
21 22 23 24 25 ...
- Coloca un caballero en 1.
- Mueva al caballero a la cuadrícula con el número más pequeño posible que no haya sido visitado antes, de acuerdo con las reglas del ajedrez (es decir, 2 unidades verticalmente y 1 unidad horizontalmente, o viceversa).
- Repita hasta que el caballero se atasque.
Aquí están los primeros tres pasos:
Paso 1
17 [16] 15 [14] 13
[18] 5 4 3 [12]
19 6 < 1> 2 11
[20] 7 8 9 [10]
21 [22] 23 [24] 25
Los movimientos posibles son 10, 12, 14, 16, 18, 20, 22, 24, entre los cuales el más pequeño es 10, por lo que el segundo término es 10.
Paso 2
4 [ 3] 12 [29] 54
( 1) 2 11 28 [53]
8 9 <10> 27 52
[23] 24 25 26 [51]
46 [47] 48 [49] 50
Los movimientos posibles son 1 , 3, 23, 29, 47, 49, 51, 53, entre los cuales el más pequeño es 3, por lo que el tercer término es 3.
Paso 3
35 [34] 33 [32] 31
[16] 15 14 13 [30]
5 4 < 3> 12 29
[ 6] ( 1) 2 11 [28]
7 [ 8] 9 (10) 27
Los movimientos posibles son 6, 8, 10 , 16, 28, 30, 32, 34, entre los cuales el más pequeño es 6, por lo que el cuarto término es 6.
La secuencia comienza con:
1 10 3 6 9 4 7 2 5 8 11 14 ...
y termina con
... 2099 2284 2477 2096 2281 2474 2675 2884 3101 2880 2467 2084
Desafío
Escriba un programa o función más corto, recibiendo un número entero en el rango [1, 2016]
(o [0, 2015]
si se usa 0 indexado) como entrada, emite el número en ese índice en la secuencia de caballero atrapado. Puede elegir indexar la secuencia con 0 indexado o 1 indexado, pero debe especificar qué esquema de indexación utiliza.
Casos de prueba (1 indexado)
n | s(n)
-----+-----
1 | 1
2 | 10
3 | 3
6 | 4
11 | 11
21 | 23
51 | 95
101 | 65
201 | 235
501 | 761
1001 | 1069
2001 | 1925
2016 | 2084
Para todas las salidas posibles, consulte esta página .
Criterios ganadores
El código más corto de cada idioma gana. Se aplican restricciones a las lagunas estándar.
12851850258
Respuestas:
JavaScript (ES7),
182181 bytesPruébalo en línea!
¿Cómo?
Una versión ligeramente modificada de mi respuesta a The Path Of The Wildebeest es definitivamente más corta (y más rápida) que eso. Pero quería probar un enfoque diferente. Por cierto, creo que podría ser más fácil implementar este método en algunos esolangs.
Algoritmo:
Reiniciamos en el paso 2 o devolvemos el último índice que se encontró si hemos terminado.
Nodo.js , 155 bytes
Pruébalo en línea!
fuente
05AB1E , 53 bytes
3
2
θ
Pruébelo en línea o verifique algunos casos de prueba más (tiempo de espera para los casos de prueba más grandes).
Explicación:
Vea la explicación en mi respuesta vinculada El camino del ñu . Las únicas partes modificadas son:
y un final:
EDITAR: Un puerto del enfoque de @Arnauld en su respuesta de JavaScript (ES7) es (actualmente):
05AB1E ,
5756 bytesPruébelo en línea o verifique algunos casos de prueba más (tiempo de espera para los casos de prueba más grandes).
Explicación:
Σ·nàDtyÆ+yO·<.±*->}
fuente
MATL ,
4137 bytesLa entrada está basada en 0.
Pruébalo en línea!
fuente