Dado un gran número (en la base 10), como 1234567891011121314151617, encuentre "subnúmeros" primos en él.
Un "subnúmero" primo es una secuencia consecutiva de dígitos (tomados de la entrada), que representa un número primo (en la base 10).
- Entrada : un número (ya sea una cadena, un archivo o lo que quieras).
- Salida : todos los subnúmeros principales separados de alguna manera (ya sea en una lista, un archivo, cadenas separadas por comas ...) Si el resultado está vacío, puede tomar cualquier convención que desee (cadena codificada, cadena vacía, galimatías, pero el programa no debería choque.
- Ejemplo
1234 -> 2, 3, 23
6542 -> 5, 2
14 -> [.. salida vacía]
Este es el código de golf. ¡El programa más corto gana!
[editar]: regla adicional, el programa debe ser explicado! No todos hablan con fluidez Jelly :)
Respuestas:
05AB1E (heredado) , 3 bytes
Pruébalo en línea!
Subcadenas de la entrada que son primas.
fuente
Perl 6 , 28 bytes
Pruébalo en línea!
El
:ex
indicador ("exhaustivo") para el operador de coincidenciam
hace que devuelva cada coincidencia posible de.+
(es decir, cada subcadena de uno o más caracteres), incluso superpuestos. El hiperoperador+«
convierte esa lista deMatch
objetos en números, que luego se filtran por primogrep &is-prime
.fuente
{+«m:ex/(.+)<?{$0.is-prime}>/}
Brachylog , 4 bytes
-1 byte gracias a Kroppeb .
Pruébalo en línea!
ᶠ
s
Ind todos los hilos,ˢ
elegir losṗ
rimesfuente
sᶠṗˢ
es un byte más corto. Encuentra todas las subcadenas y devuelve las que son primas. Ver aquí codegolf.stackexchange.com/a/117871/81957Python 2 ,
6665 bytesPruébalo en línea!
fuente
while k<=n
o, para costar 0 bytes,while~n+k
while
declaración? No he visto este tipo de códigos antes. Tampoco he visto el uso de `` , ¿qué hace?while stmt:
se ejecutará siempre questmt
tenga un valor que Python considere verdadero. El único entero falso en Python es0
. Por lo tanto, el código se ejecutará como~n+k != 0
.~
es el operador de complemento bit a bit y~n
es equivalente a-n - 1
.~n + k != 0
<=>-n - 1 + k != 0
<=>k != n + 1
. Como estamos incrementandok
por1
en cada operación,k != n + 1
en este caso es equivalente ak <= n
.`n`
es lo mismo querepr(n)
en Python 2. (no funciona en Python 3).Japt ,
1310 bytesGracias @Shaggy -3 bytes
Pruébalo en línea!
fuente
Jalea ,
54 bytes-1 gracias a Kevin Cruijssen (
Ẓ
es un alias paraÆP
)Un enlace monádico que acepta una lista de dígitos * que produce una lista de enteros primos.
* pasando por "una cadena, un archivo o lo que quieras" - para tomar un número entero, prefije el código con
D
Pruébalo en línea!
¿Cómo?
fuente
ÆP
puede serẒ
si no me equivoco?Java 8,
148147 bytesPruébalo en línea.
Explicación:
fuente
MATL , 9 bytes
Pruébalo en línea!
Explicación
fuente
Bash + GNU Core Utils:
8077 BytesEsto no puede ser lo más corto, pero tengo problemas para encontrar algo mejor. ¡Se busca ayudante!
Al apegarme solo a POSIX, obtuve 82:
fuente
R , 60 bytes
Pruébalo en línea!
No es realmente eficiente, inspirado por la respuesta de @ovs python 2
fuente
Python 2 ,
115114 bytesPruébalo en línea!
fuente
if~-n*all(n%i for i in range(2,n))
ahorra 4.Casco , 5 bytes
Pruébalo en línea!
fuente
Limpio , 108 bytes
Pruébalo en línea!
fuente
Pyth, 8 bytes
Banco de pruebas
Toma la entrada como una cadena, genera una lista de enteros. También puede tomar la entrada como un
Explicación:int
agregando`
al final un byte adicional.Y
`
solo se convierteint
astr
.fuente
Wolfram Language (Mathematica) , 40 bytes
Pruébalo en línea!
Entrada y salida son listas de dígitos. En el caso de que no haya subnúmeros primos, se devuelve la lista vacía
{}
.Usos
@*
paraComposition
de funciones.Subsequences
da una lista de todas las subsecuencias de la entrada, ySelect[PrimeQ@*FromDigits]
es una forma de operador de laSelect
que se devuelve una lista de todos los elementos para los que sePrimeQ@*FromDigits
devuelveTrue
.fuente
Matlab, 89 bytes
Pruébalo en línea!
fuente