Los números de escopeta son una secuencia con una definición bastante simple pero con una estructura interesante. Comience con los números naturales:
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, ...
Ahora tome todos los números en índices divisibles por 2 , agrúpelos en pares e intercambie los números en cada par:
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, ...
^ ^ ^ ^ ^ ^ ^
<---> <---> <-----> <----
1, 4, 3, 2, 5, 8, 7, 6, 9, 12, 11, 10, 13, 16, ...
Ahora haz lo mismo con los índices divisibles por 3 :
1, 4, 3, 2, 5, 8, 7, 6, 9, 12, 11, 10, 13, 16, ...
^ ^ ^ ^
<------> <--------->
1, 4, 8, 2, 5, 3, 7, 6, 10, 12, 11, 9, 13, 16, ...
Y luego para 4 , 5 , 6 , y así sucesivamente:
1, 4, 8, 2, 5, 3, 7, 6, 10, 12, 11, 9, 13, 16, ...
1, 4, 8, 6, 5, 3, 7, 2, 10, 12, 11, 14, 13, 16, ...
1, 4, 8, 6, 12, 3, 7, 2, 10, 5, 11, 14, 13, 16, ...
1, 4, 8, 6, 12, 14, 7, 2, 10, 5, 11, 3, 13, 16, ...
...
Después de k tales pasos, los primeros k + 1 números serán corregidos. Entonces podemos definir la secuencia infinita de números de escopeta como el límite de dejar que k vaya al infinito. Los primeros 66 números son:
1, 4, 8, 6, 12, 14, 16, 9, 18, 20, 24, 26, 28, 22, 39, 15, 36, 35, 40, 38, 57, 34, 48, 49, 51, 44,
46, 33, 60, 77, 64, 32, 75, 56, 81, 68, 76, 58, 100, 55, 84, 111, 88, 62, 125, 70, 96, 91, 98, 95,
134, 72, 108, 82, 141, 80, 140, 92, 120, 156, 124, 94, 121, 52, 152, 145, ...
Dato curioso: a pesar de haberse obtenido al permutar solo los números naturales, esta secuencia no contiene ningún primo.
El reto
Dado un número entero n > 0
, encuentra el n
número de escopeta th. Puede escribir un programa o función, tomando la entrada a través de STDIN (o la alternativa más cercana), argumento de línea de comando o argumento de función y devolver el resultado o imprimirlo en STDOUT (o la alternativa más cercana).
Este es el código de golf, por lo que gana el envío más corto (en bytes).
Tablas de clasificación
Esto está obteniendo más respuestas de lo que pensaba, así como varias personas que compiten en el mismo idioma. Así que aquí hay un Fragmento de pila para generar una tabla de clasificación regular y una descripción general de los ganadores por idioma.
Para asegurarse de que su respuesta se muestre, comience con un título, usando la siguiente plantilla de Markdown:
# Language Name, N bytes
¿Dónde N
está el tamaño de su envío? Si mejora su puntaje, puede mantener los puntajes antiguos en el título, tachándolos. Por ejemplo:
# Ruby, <s>104</s> <s>101</s> 96 bytes
10
, 21
, 25
y 30
no aparecen ya sea, por ejemplo.
k
iteración th, el k
elemento th en la matriz se transpone a la 2k
posición th, y no se volverá a tocar hasta la 2k
iteración th, momento en el que se transpone a la 4k
posición th, hasta el infinito. Un primo no se transpone hasta que llega su turno, por así decirlo, por lo que todos los primos se barajan hacia adelante. Pero podemos hacer fácilmente una lista de las víctimas inocentes simplemente imprimiendo el primer elemento que se transpondrá en la iteración 2 y cada iteración impar. La lista va: 2, 3, 5, 7, 10, 11, 13, 21, 17, 19, 30, 23, 27, 25, 29, 31, 45, 42, 37, 54, 41, 43, 65, ...