Antecedentes
Considere la siguiente secuencia ( A051935 en OEIS):
- Comience con el término .
- Encuentre el número entero más bajo mayor que modo que sea primo.2 2 + n
- Encuentre el número entero más bajo mayor que modo que sea primo, etc. n 2 + n + n ′
Una definición más formal:
Los primeros términos de la secuencia son (refiérase a estos como casos de prueba):
2, 3, 6, 8, 10, 12, 18, 20, 22, 26, 30, 34, 36, 42, 44, 46, 50, 52, 60, 66, 72, 74, ...
Tarea
Su tarea es generar esta secuencia de cualquiera de las siguientes maneras:
- Produzca sus términos indefinidamente.
- Dado , salida ( término, o indexado).
- Dado , salida (primeros términos).
Puede competir en cualquier lenguaje de programación y puede tomar entradas y proporcionar salidas a través de cualquier método estándar , mientras toma nota de que estas lagunas están prohibidas por defecto. Este es el código de golf , por lo que gana el envío más corto (en bytes) para cada idioma .
Respuestas:
Brachylog , 13 bytes
Pruébalo en línea!
La salida es la lista de los primeros n términos de la secuencia.
fuente
Python 2 ,
6362 bytesPruébalo en línea!
fuente
Jalea ,
119 bytesEste es un programa completo que toma n como argumento e imprime los primeros n términos de la secuencia.
Pruébalo en línea!
Cómo funciona
fuente
05AB1E v2 , 10 bytes
Pruébalo en línea!
Esto solo funciona en la versión no heredada, la reescritura de Elixir. Emite una secuencia infinita de enteros. Hay algunos errores con la prueba principal que se han corregido en las últimas confirmaciones, pero que aún no están en vivo en TIO. Sin embargo, funciona localmente. Aquí hay un GIF de su ejecución en mi máquina, modificado para generar los primeros términos en lugar de la secuencia completa.
Cómo funciona
Define una secuencia infinita recursiva con el caso base . La estructura se encuentra entre las nuevas características muy interesantes de 05AB1E. En pocas palabras, toma una función , estableciendo al argumento entero dado, en este caso .a ( n ) a ( 0 ) 22 a(n) a(0) 2
λ
En esta parte del código,[a(0),a(1),…,a(n−1)]
λ
el rol de es diferente. Ya dentro de un entorno recursivo, genera , la lista de todos los resultados anteriores. Luego, los resume.O
Duplique la suma para su uso posterior y agregue a la segunda copia.a(n−1)
Genera el primo más bajo estrictamente mayor que la suma anterior.
Finalmente, recupere la diferencia absoluta entre el primo calculado anteriormente y la primera copia de la suma calculada anteriormente (la suma de todas las iteraciones anteriores).
La secuencia se imprime implícitamente en STDOUT indefinidamente.
fuente
Perl 6 , 45 bytes
Pruébalo en línea!
Devuelve una lista perezosa que genera la secuencia sin fin.
Explicación:
Esto utiliza el operador de secuencia
...
que define la secuencia como:fuente
Ruby
-rprime
, 34 bytesPruébalo en línea!
Salidas indefinidamente.
fuente
JavaScript (ES6), 63 bytes
Devuelve el término , 1 indexado.nth
Pruébalo en línea!
fuente
Pyth ,
1211 bytesPruébalo en línea!
Guardado 1 byte gracias a isaacg.
Genera los primeros
n
números de este tipo, utilizando un índice basado en 1..f
encuentra los primerosk
enteros que satisfacen un criterio particular a partir de cero. Aquí, el criterio es que el primo anterior que calculamos;
, más el número actualZ
, es primo (P
). Si es así, también actualizamos el último primo calculado utilizando el comportamiento de cortocircuito de la lógica y la función (&
)..f
La variable predeterminada de Desafortunadamente es laZ
que cuesta un byte en la actualización.El truco que Isaac descubrió fue almacenar la negación del último cebado y probar eso menos el valor actual. Esto es más corto en Pyth ya que la comprobación de primalidades está sobrecargada: en números positivos encuentra la factorización prima, mientras que en números negativos determina si el valor positivo del número es primo.
Esto se traduce más o menos en:
fuente
_+
con-
y+
con-
-1 byte.MATL , 21 bytes
Pruébalo en línea!
La salida es los primeros n términos de la secuencia.
Explicación:
Construye una lista de primos (con un 0 inicial), y al final encuentra los retornos de las diferencias entre primos sucesivos en la lista.
fuente
Haskell , 67 bytes
Pruébalo en línea!
(1#1)2 2
es una función que no toma entrada y genera una lista infinita.vieja respuesta:
Haskell ,
88837876 bytesLa prueba de primalidad es de esta respuesta y es mejorada por Christian Sievers (-2 bytes).
-5 bytes gracias a WW .
Pruébalo en línea!
fuente
^2
. Eso cambiará el predicado de la prueba es primo a prueba es primo o 4 , lo que no importa en esta aplicación.05AB1E (heredado) , 12 bytes
Pruébalo en línea!
Explicación
Hay un par de soluciones diferentes de 12 bytes posibles.
Este en particular podría haber sido de 10 bytes si tuviéramos una variable utilizable inicializada como 0 (en lugar de 1 y 2).
fuente
Python 2 , 119 bytes
Pruébalo en línea!
Siguiente función principal f () tomada de esta respuesta .
La función g () toma un número entero no negativo i y devuelve una lista de todos los elementos de la secuencia hasta ese índice.
fuente
Python 2 ,
9998 bytesPruébalo en línea!
1 byte gracias al Sr. Xcoder .
fuente
k=s-~v
.Haskell ,
101 9997 bytesLa función
l
no toma argumentos y devuelve una lista infinita. No es tan corto como el enfoque más directo de @ovs (y obviamente robé algunas partes de su respuesta), pero ¿tal vez aún sea golfable?¡Gracias @ H.PWiz por -2 bytes!
Pruébalo en línea!
fuente
Python 2 ,
8280 bytesPruébalo en línea!
Esto genera el enésimo número de la secuencia (basado en 0). Al mover el
print
bucle, se puede modificar para generar los primerosn
elementos en el mismo bytecount: ¡ Pruébelo en línea!fuente
C (gcc) ,
10099 bytesPruébalo en línea!
fuente
Japt, 17 bytes
Emite el
n
término th, 0-indexado.Intentalo
fuente