Outra sequência, outro desafio. *
Definição
Um primo p
está nesta sequência, vamos chamá-lo A
, se para cada dígito d
na p
expansão decimal de você substituir d
por d
cópias de d
e o inteiro resultante ainda for primo; zeros não são permitidos.
Por exemplo, 11
está trivialmente nesta sequência (é o primeiro número, aliás). O próximo na sequência é 31
, porque 3331
também é primo; então 53
porque 55555333
também é primo, e assim por diante.
Desafio
Dada uma entrada n
, retorne A(n)
, ou seja, o n
th item nesta sequência.
Exemplos
Aqui estão os 20 primeiros termos para você começar. Este é A057628 no OEIS.
11, 31, 53, 131, 149, 223, 283, 311, 313, 331, 397, 463, 641, 691, 937, 941, 1439, 1511, 1741, 1871
Isso significa A(0) = 11
, A(1) = 31
etc., ao usar a indexação zero.
Regras
- Você pode escolher a indexação com base em zero ou uma; especifique na sua resposta qual.
- Em vez de retornar apenas o
n
elemento th, você pode optar por retornar os primeirosn
termos. - Você pode assumir que a entrada / saída não será maior que o formato inteiro nativo do seu idioma; no entanto, o número primo de dígitos repetidos pode ser maior que o formato nativo do seu idioma, portanto, isso deve ser levado em consideração.
- Por exemplo,
1871
o último número dos exemplos, possui um prime correspondente18888888877777771
, que é um pouco maior que o INT32 padrão. - Um programa completo ou uma função são aceitáveis. Se uma função, você pode retornar a saída em vez de imprimi-la.
- A saída pode ser no console, retornada de uma função, exibida em um pop-up de alerta, etc.
- As brechas padrão são proibidas.
- Isso é código-golfe, portanto todas as regras usuais de golfe se aplicam e o código mais curto (em bytes) vence.
* Para ser sincero, eu tinha apresentado os primeiros termos da sequência apenas brincando com alguns números e depois fui para a OEIS para obter o resto da sequência.
fonte
169
si não é primordial, é13 * 13
.Respostas:
Casca , 15 bytes
Experimente online!
Erik, o Outgolfer, salvou um byte. Usando
ṗ
vez deεp
salvaria outro byte, mas isso torna o programa tão lento que o tempo é igual a n = 2.fonte
ṗ
no interpretador, é louco como ele é mais lento do que encontrar todos os factores primos ...05AB1E ,
1413 bytes-1 byte graças a Emigna !
Experimente online!
Explicação
fonte
Geléia ,
1814 bytesExperimente online!
Sr. Xcoder: -1 Byte (tudo lógico)
Erik the Outgolfer: -2 Bytes (uma linha em vez de duas)
HyperNeutrino: -1 Byte (retorna os primeiros n elementos da sequência)
Explicação
Editar: originalmente enviou uma resposta que incluía números com 0 na sua representação decimal, o que não é especificamente permitido.
fonte
Wolfram Language (Mathematica) , 100 bytes
Experimente online!
Jonathan Frech salvou 3 bytes
e -7 bytes de JungHwan Min
-15 bytes de Martin Ender
também graças a Jenny Mathy
fonte
Alice ,
7270666256 bytesAgradecemos a Leo por salvar 5 bytes.
Experimente online!
Usa entrada baseada em 1.
Explicação
O truque mais puro golfe aqui (mesmo que só poupa um par de bytes) é que eu estou usando um teste de primalidade que dá
0
para composite n paran
para não-composite n . Dessa forma, não precisamos usar o resultado diretamente de forma condicional, mas podemos transmiti-lo diretamente para a próxima parte que verifica se a entrada não contém zeros.fonte
Python 2 , 130 bytes
Experimente online!
Python 2 ,
195179167140138136135134 bytesxrange
vez derange
, contornando aMemoryError
e compactando a função principal; melhorando a contagem de índice inteiro.|
para salvar bytesor
.~-
vez de0**
inverter a existência de um zero emj
,&
seguido por um booleano verdadeiro, isola a propriedade booleana desse valor.~-A&B&C
(equivalente a(not A) and B and C
) comA, B, C
ser booleanos paraA<B==C
.Experimente online!(Indexado 1)
Explicação
Define uma função principal
f
que recebe um índice inteiron
, e um valor definido por padrãoj
, a sequência atual canditate (destinada9
a melhorar o desempenho enquanto mantém o tamanho do programa) e uma função de verificação primária.Contanto que
n
seja diferente de zero, an
entrada da quinta sequência ainda não foi encontrada. Assim,j
é incrementado en
decrementado por um iffj
é um número que satisfaz as propriedades necessárias.Quando o loop termina,
j
é an
entrada da -ésima sequência e, portanto, é impressa.fonte
Pitão , 21 bytes
Experimente aqui!
Bastante demorado, já que Pyth não tem uma expansão decimal incorporada.
.f
), que:.AKjZT
) e (&
) ...*VK`Z
), unidos e convertidos em um número inteiro (ss
) são primos (P_
) e (&
) ...P_
).fonte
e
conforme uma nova alteração de regra.Perl 6 , 51 bytes
Experimente online!
grep {...}, 2..*
filtra a sequência infinita de números naturais a partir de 2 usando a função de predicado entre as chaves.(...)[$_]
indexa nessa lista filtrada usando o argumento da função$_
.!/0/
filtra números que contêm um dígito zero.S:g/./{$/ x $/}/
replica cada dígito na expansão decimal do número de teste.is-prime $_ & S:g/./{$/ x $/}/
chama ais-prime
função interna com uma junção e de$_
, o número de teste e o número resultante da replicação de seus dígitos. A função retornará true se os dois membros da junção e forem primos.fonte
J, 81 bytes
Essa é uma daquelas situações para as quais ainda não encontrei uma boa solução J.
No entanto, eu posto isso na esperança de aprender algo novo.
f
nos diz se um determinado número é um "primo de dígito repetido". Ele divide da seguinte forma:E finalmente o principal ... Enquanto o verbo, com seu clichê irritante e aparentemente inevitável, surge do fato de que precisamos usar uma lista para armazenar nosso progresso, o que exige registros "atuais atuais" e "encontrados até agora" , já que nosso argumento esquerdo já foi usado para armazenar a condição de parada, ou seja
n
,. Isso significa que devemos usar muitos bytes preciosos para a tarefa simples de especificar args ([
e]
) e descompactar nossa lista de 2 elementos ({.
e{:
):Experimente online!
fonte
f
pela função auxiliar entre parênteses. Além disso, eu tentei jogar a função de ajudante e criei1 p:('x',~"."0#])&.":
, que infelizmente não exclui primos com '0' neles. Você tem alguma ideia? Ele também tem que ter a'x',~
parte para obter maior precisão ...(((0>.-)((*&(1&p:)0&e.|10#.#~),.&.":))([,(+*)~)])/^:_@,&2
, use10x
para estender o intervalo, caso contrário n = 15 pulará 937