Dado um grande número (na base 10), como 1234567891011121314151617, encontre "sub-números" principais.
Um "subnúmero" principal é uma sequência consecutiva de dígitos (obtida da entrada), que representa um número primo (na base 10).
- Entrada : um número (uma sequência, um arquivo ou o que você quiser).
- Saída : Todos os subnúmeros principais separados de alguma forma (em uma lista, um arquivo, sequências separadas por vírgula ...) Se o resultado estiver vazio, você poderá fazer qualquer convenção que desejar (sequência codificada, sequência vazia, sem sentido, mas o programa não deve batida.
- Exemplo
1234 -> 2, 3, 23
6542 -> 5, 2
14 -> [.. saída vazia]
Isso é código-golfe. O programa mais curto vence!
[editar]: regra adicional, o programa deve ser explicado! Nem todo mundo é fluente em geléia :)
Respostas:
05AB1E (herdado) , 3 bytes
Experimente online!
Substrings da entrada que são primos.
fonte
Perl 6 , 28 bytes
Experimente online!
O
:ex
sinalizador ("exaustivo") para o operador de correspondênciam
faz com que ele retorne todas as correspondências possíveis de.+
(ou seja, cada substring de um ou mais caracteres), mesmo as sobrepostas. O hiperoperador+«
transforma essa lista deMatch
objetos em números, que são filtrados por primidez porgrep &is-prime
.fonte
{+«m:ex/(.+)<?{$0.is-prime}>/}
Braquilog , 4 bytes
-1 byte graças ao Kroppeb .
Experimente online!
ᶠ
ind todoss
ubstrings,ˢ
eleger osṗ
rimesfonte
sᶠṗˢ
é um byte mais curto. Ele encontra todas as substrings e retorna aquelas que são primos. Veja aqui codegolf.stackexchange.com/a/117871/81957Python 2 ,
6665 bytesExperimente online!
fonte
while k<=n
ou, ao custo de 0 bytes,while~n+k
while
declaração? Eu não vi esse tipo de código antes. Também não vi o uso de `` , o que faz?while stmt:
funcionará contanto questmt
tenha um valor que seja considerado verdadeiro pelo python. O único inteiro falso no Python é0
. Portanto, o código será executado como~n+k != 0
.~
é o operador de complemento bit a bit e~n
é equivalente a-n - 1
.~n + k != 0
<=>-n - 1 + k != 0
<=>k != n + 1
. Como estamos incrementandok
por1
em cada operação,k != n + 1
é, neste caso, equivalente ak <= n
.`n`
é o mesmo querepr(n)
no Python 2. (não funciona no Python 3).Japonês ,
1310 bytesObrigado @Shaggy -3 bytes
Experimente online!
fonte
Geléia ,
54 bytes-1 graças a Kevin Cruijssen (
Ẓ
é um pseudônimo paraÆP
)Um link monádico que aceita uma lista de dígitos * que produz uma lista de números inteiros primos.
* passando por "uma string, um arquivo ou o que você quiser" - para obter um número inteiro, prefixe o código com um
D
Experimente online!
Quão?
fonte
ÆP
pode serẒ
se não me engano?Java 8,
148147 bytesExperimente online.
Explicação:
fonte
MATL , 9 bytes
Experimente online!
Explicação
fonte
Bash + GNU Core Utils:
8077 bytesIsso não pode ser o mais curto, mas estou tendo problemas para encontrar algo melhor. Procura-se ajuda!
Ao aderir apenas ao POSIX, obtive 82:
fonte
R , 60 bytes
Experimente online!
Não é realmente eficiente, inspirado na resposta do @ovs python 2
fonte
Python 2 ,
115114 bytesExperimente online!
fonte
if~-n*all(n%i for i in range(2,n))
Salva 4.Casca , 5 bytes
Experimente online!
fonte
Limpo , 108 bytes
Experimente online!
fonte
Pitão, 8 bytes
Suíte de teste
Pega a entrada como uma sequência e gera uma lista de números inteiros. Também pode receber entrada
Explicação:int
adicionando`
no final um byte extra.E
`
apenas converteint
parastr
.fonte
Wolfram Language (Mathematica) , 40 bytes
Experimente online!
Entrada e saída são listas de dígitos. No caso de não haver subnúmeros primos, a lista vazia
{}
é retornada.Usa
@*
paraComposition
funções.Subsequences
fornece uma lista de todas as subsequências da entrada eSelect[PrimeQ@*FromDigits]
é uma forma de operadorSelect
que retorna uma lista de todos os elementos para os quaisPrimeQ@*FromDigits
retornaTrue
.fonte
Matlab, 89 bytes
Experimente Online!
fonte