Desafío:
El objetivo de este código de golf se basa en el número 8675309
...
Su objetivo es imprimir cada número primo del 2 al 8675309, comenzando con el número 2 y luego omitiendo 8 números primos, luego omitiendo 6, luego omitiendo 7, etc. En esencia, omita un número de primos determinados por el siguiente número en La secuencia 8675309
. Ciclismo a 8 una vez que llega a 9.
Salida:
2
29
(se saltó 8 para llegar al décimo primer)
59
(se saltó 6 para llegar a la prima 17)
97
(se saltó 7 para llegar al 25 ° prime)
Ejemplo: (pseudocódigo similar a PHP donde $prime
es una matriz que contiene todos los números primos).
$tn=1;
$c=1;
$na=array(8,6,7,5,3,0,9);
l:
output($prime[$tn]);
if ($prime[$tn]>=8675309) {exit(8675309)};
$c+=1;
if ($c>=8) {$c=1};
$tn+=$na[$c];
goto l;
Cuando digo omitir 8 primos, me refiero a pasar del primo n. ° 1 al primo n. ° 10 (omitiendo el 8 en el medio).
Cada número debe estar en una nueva línea.
Al llegar a la 0
en 8675309
, justo acaba de imprimir el siguiente número primo, sin saltarse ninguna.
Este es el código de golf, por lo que gana el código más corto (en bytes).
fuente
$c
a principios, y si no alcanzamos 8675309 exactamente (¿lo hacemos?), También imprime el primer número que excede ese valor.Respuestas:
Mathematica 67 bytes
Sin embargo, no alcanza 8675309, no estoy seguro de la intención de OP sobre esto.
fuente
Maravilla , 47 bytes
Oh, Dios, esto se vuelve más y más lento a medida que pasa el tiempo ...
Explicación
Toma 582161 (cantidad de primos <= 8675309) elementos de la lista de primos infinitos
P
y redeclara el resultado comoP
.Cambia infinitamente los dígitos de 8675309 y realiza una toma en la lista resultante.
Imprime el primer elemento
P
, sueltacycle item + 1
elementos de P y redeclara el resultado comoP
. Esta operaciónP
también actúa como un valor de verdad para llevar; Si la lista está vacía / falsa (lo que significa que hemos llegado a 8675309), entonces dejamos de tomar de la lista cíclica.Implementación más rápida (para pruebas)
Todavía muy lento, pero notablemente más rápido.
fuente
Jalea ,
23 2924 bytes+6 bytes para un parche temporal para cumplir con el requisito de imprimir 8675309.
-5 bytes moviéndose a un enfoque más golfista pero más lento para abordar eso.
Ahora es demasiado lento para ejecutarse en TryItOnline, pero se ejecuta localmente en un par de minutos, produciendo los números que se muestran a continuación con saltos de línea intermedios (el número de primos omitidos se muestra a continuación entre paréntesis):
* el último es solo un salto efectivo de 4, ya que simplemente se agrega a la lista.
Haga clic aquí para obtener una versión con 3659 en lugar de 8675309, que tiene 19 conjuntos de cuatro saltos (en lugar de 12937 conjuntos de 7) y agrega 3659 (que es un salto efectivo de 6).
¿Cómo?
fuente
Ruby, 121 bytes
Nueva línea al final del archivo innecesaria y sin puntaje.
Explicación:
P
es una matriz de primos.c
es un candidato principal;s
es el producto del módulo de residuos cada primo más pequeño; si alguno de estos residuos es cero (lo que indica quec
es compuesto), ses
convierte (y permanece) en cero.El generador de números primos es lento. Tomará mucho tiempo correr. La prueba se realizó mediante la sustitución de una
P
matriz generada por medios más eficientes (específicamente, cortocircuito en la división uniforme, y también ayuda mucho a detener la prueba en la raíz cuadrada).fuente
Haskell, 122 bytes
Esto podría ser lo que se solicita:
Podría ahorrar algunos bytes calculando previamente cuántos números se necesitan y reemplazándolos
takeWhile
portake
. Eso también permitiría adaptarse a cualquier decisión sobre el último número que se emitirá. Ya ha impreso números de hasta 600000 con muy poca memoria en mi prueba, por lo que creo que puede llegar hasta el final.fuente
8675310
con8675
, digamos. Y funciona para mí (compilado, con optimización, no probé sin él) en la forma original. Una máquina más rápida, puesta en marcha más tarde que la primera prueba, ya ha alcanzado 1,600,000.Haskell, 109 bytes
Pruébalo en línea! (truncado
8675309
a8675
, de lo contrario se agota el tiempo de prueba en línea )Uso:
fuente
Perl 6 ,
65 7367 bytes(no se pudo imprimir 8675137 por falta:partial
)Al subir el final de la gama,
:partial
se puede eliminar.Pruébelo (límite de 5 segundos agregado) Verlo terminar
El ejemplo inicial fue cronometrado en 52 minutos y 41.464 segundos.
Expandido:
El resultado de la
rotor
llamada es la siguiente secuenciafuente
:partial
adverbio en la llamada a.rotor
Befunge, 136 bytes
Pruébalo en línea! , pero tenga en cuenta que va a expirar mucho antes de que llegue al final. Sin embargo, una versión compilada en mi máquina local se completa en menos de 10 segundos.
Explicación
Para probar la primalidad, iteramos sobre el rango de 2 a sqrt ( n ) y verificamos si n es un múltiplo de cualquiera de esos valores; de lo contrario, es un primo. Este proceso se complica por el hecho de que el valor iterado debe almacenarse en una "variable" temporal, y dado que las celdas de memoria de Befunge tienen un tamaño limitado, ese almacenamiento debe dividirse en dos celdas. Para manejar los números primos omitidos, utilizamos una "tabla" de búsqueda (que puede ver en la línea 5) para realizar un seguimiento de los diferentes rangos que deben omitirse.
No voy a hacer un análisis detallado del código, porque hay bastante código entrelazado con comandos compartidos en diferentes rutas de código para ahorrar espacio. Esto hace que las cosas sean bastante difíciles de seguir y no creo que sea particularmente interesante para alguien que no esté familiarizado con Befunge.
Salida de muestra
fuente
Bash (+ coreutils),
9894 bytesEDICIONES:
Golfed
Prueba
¡Pruébelo en línea! (limitado a N <1000, para que funcione rápido)
La versión completa tarda unos 15 segundos en completarse en mi máquina.
fuente