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 tercer desafío de esta serie (enlaces al primer y segundo desafío).
En este desafío, organizaremos los números naturales en filas de longitud creciente de tal manera que la suma de cada fila sea primo. Lo que me parece realmente sorprendente de esto es que cada número natural tiene un lugar en este arreglo. ¡No se saltan números!
Esta visualización de este arreglo se ve así:
row numbers sum
1 1 1
2 2 3 5
3 4 5 8 17
4 6 7 9 15 37
5 10 11 12 13 21 67
6 14 16 17 18 19 23 107
etc.
Podemos leer los elementos de las filas en este triángulo. Los primeros 20 elementos son: 1, 2, 3, 4, 5, 8, 6 , 7, 9, 15, 10, 11, 12, 13, 21, 14, 16, 17, 18, 19 ( sí, hay una canción de New Order oculta en esta secuencia ).
Como se trata de un desafío de "secuencia pura", la tarea es generar para un dado como entrada, donde es A162371 .
Tarea
Dada una entrada entera , salida en formato entero.
se define como el -ésimo elemento de la lexicográficamente más temprana permutación de los números naturales de tal manera que, cuando se ve como un triángulo leído por filas, para n> 1 las sumas de filas son números primos. Desde la primera permutación lexicográfica de los números naturales comienza con 1, es 1. Tenga en cuenta que en esta definición y seno serequiere que sea primo. Esta es la secuencia OEISA162371.
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 | 5
20 | 19
50 | 50
78 | 87
123 | 123
1234 | 1233
3000 | 3000
9999 | 9999
29890 | 29913
Reglas
- La entrada y la salida son enteros (su programa al menos debe admitir entradas y salidas en el rango de 1 hasta 32767)
- 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
Respuestas:
Jalea , 32 bytes
Pruébalo en línea! - Muy lento, ya que construye n filas primero, para una versión más rápida que no lo hace, a 37 bytes, intente esto .
fuente
Perl 6 ,
8077 bytesPruébalo en línea!
Explicación:
fuente
Haskell ,
122120 bytesPruébalo en línea! (tiene 2 bytes adicionales para
f=
)EDITAR: ahora usa indexación basada en 0 para guardar 2 bytes. Gracias @wastl por señalar eso, debo haberlo perdido en el OP.
¡Fue muy divertido escribirlo! La función auxiliar
%
toma una longitudl
y una lista de valores que puede usara
. Devuelve una lista infinita de valores para la secuencia. La longitud es uno menos que la longitud de la fila triangular actual y la lista es infinita y ordenada previamente. Primero solo damos los primerosl
valoresa
y luego miramos el resto de a hasta encontrar el primer valor (el más pequeño) que hace que la suma sea prima. Desglosamos la lista alrededor de ese valor usandospan
y alguna coincidencia de patrones. Ahora todo lo que tenemos que hacer es obtener ese nuevo valor y repetir con la siguiente longitud de líneal+1
y los valores restantes ena
. Para el resultado final, anteponemos 1 (caso especial para n = 0) y lo indexamos con!!
.fuente
0:
como indica el desafío que puede utilizar la indexación basada en 0.JavaScript (ES6),
111110 bytesPruébalo en línea!
fuente
Jalea , 46 bytes
Pruébalo en línea!
Se agota el tiempo de espera para n grande en tio, pero funciona allí para todos excepto los dos últimos ejemplos
fuente
Lua ,
242228226211 bytesPruébalo en línea!
fuente