Desafio
Dado um número inteiro de entrada n > 0
, imprima o número de números primos ( outros que n
, sen
em si é primo), que pode ser produzido por alterao de um dígito na expansão decimal de n (sem alteração do número de dígitos).
Exemplos
Por exemplo n = 2
,. Ao alterar um dígito na expansão decimal de 2
, podemos criar três números primos adicionais,3, 5, 7
, para quea(n) = 3
.
Para outro exemplo n = 13
,. Ao alterar um dígito, você pode obter números primos 11, 17, 19, 23, 43, 53, 73, 83
, paraa(13) = 8
.
Para um exemplo final n = 20
,. Ao alterar um dígito, você pode obter números primos 23, 29
, paraa(20) = 2
.
Seqüência
Aqui estão os 20 primeiros termos para você começar. Este é o OEIS A048853 .
4, 3, 3, 4, 3, 4, 3, 4, 4, 4, 7, 4, 8, 4, 4, 4, 7, 4, 7, 2
Regras
- Pode-se presumir que a entrada e a saída se encaixam no tipo inteiro nativo do seu idioma.
- A entrada e saída podem ser fornecidas em qualquer formato conveniente .
- Ignore zeros à esquerda (por exemplo,
03
não é um número primo nesta formulaçã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.
- Se possível, inclua um link para um ambiente de teste on-line para que outras pessoas possam experimentar seu código!
- 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.
code-golf
sequence
arithmetic
primes
AdmBorkBork
fonte
fonte
n
para o qual a saída é0
. Eu acho que én = 200
. Eu também acho que eles vêm em cachos:200,202,204,206,208
,320,322,...,328
,510,...,518
,620,...628
,840,...,848
, etc.Respostas:
05AB1E ,
17161411 bytesExplicação:
Experimente online! ou até 100 .
fonte
.L
? A sério?.L
?!?!L
.<
para salvar um byte. Mesmo que o filtro não remova o100
/1000
/10000
/ etc., Ele nunca é primo, portanto não afetará a saída.Python 2 ,
146 136 127 121118 bytesObrigado a @ Mr.Xcoder por sugestões
Explicação:
Gere números com comprimento igual ao comprimento de entrada, pulando primeiro (1,10,100,1000, ...)
Verifique se o número gerado difere da entrada por apenas um dígito
Verifique se há prime
Contagem
Experimente online!
fonte
r=range
, já que você o usa muitas vezes ...?143
? Porque eu vejorange(1,10)
, isso exclui0
e103
é primordial0
entrarr(0,10)
.r(10)
é suficiente.lambda I,r=range:
Javascript (ES6) 148 bytes
Pega a entrada como uma string e retorna como um número
Exemplo de trecho de código:
fonte
Geléia ,
211815 bytes3 bytes graças a Dennis.
Experimente online! ou Verifique todas as caixas de teste .
fonte
æḟ⁵æR×⁵$DnDS€ċ1
salva alguns bytes.Mathematica, 105 bytes
Experimente online!
Function
que espera um número inteiro positivo#
. Definef
igual à funçãoIntegerDigits
que retorna a lista de dígitos de sua entrada. Tomamos oRange
deg
para10g
(inclusive), ondeg=10^Length@f@#/10
é a maior potência10
menor ou igual à entrada#
, e depoisCount
an
quePrimeQ@n&&MatchQ[f@n-f@#,{x=0...,_,x}]&&n!=#
.PrimeQ@n
verifica sen
é primo,MatchQ[f@n-f@#,{x=0...,_,x}]
verifica se a diferença entre a lista de dígitos den
e#
é da forma{0..., _, 0...}
en!=#
garante quen
e#
éUnequal
.fonte
JavaScript (ES6),
153142139 bytesAceita entrada como uma sequência. Comportamento indefinido para entrada inválida, embora deva terminar sem erro em qualquer string que eu possa pensar. Não necessariamente antes da morte por calor do universo, principalmente para cordas longas.
Demo
Melhorias
Salva 11 bytes refatorando as
reduce()
chamadas emmap()
chamadas e copiando implicitamente a matriza
no parâmetro function, em vez de dentro do contexto dosplice()
chamada.Economizou 3 bytes graças à sugestão de @Neil de converter
[...Array(10)]
para[...''+1e9]
.Código não minificado
Explicação
A função usa um nível de dois níveis
map()
para somar a quantidade de permutações que passam no teste de primalidade, que foi emprestado e modificado a partir desta resposta .(Resposta original)
Por exemplo, para calcular a soma de uma matriz, você passaria um
initialValue
de0
e retornaria umaggregate
igual aaccumulator + currentValue
. Modificando essa abordagem levemente, calculamos o número de permutações que passam no teste de primalidade:Isso é essencialmente o interior
reduce()
, que itera todas as permutações dodigitArray
alterando cadadecimal
um para um específicopermutatedDigit
. Precisamos, então, de um externoreduce()
para iterar todos os possíveispermutatedDigit
com os quais substituir cada umdecimal
, o que é justo0-9
.Anormalidades na implementação
[...''+1e9].map((u,j)=>...
era o caminho mais curto @Neil poderia pensar para iterate um argumento0
através9
. Seria preferível fazê-lo comu
, masu
não é útil para cada elemento da matriz, neste caso.i+j
na condição ternária, verifica0
se não é uma permutação possível do dígito inicial, conforme a especificação do desafio.j!=c
garante que o originaln
não seja um candidato para passar no teste de primalidade.(a.splice(i,1,j),a.join``)
é uma bagunça.splice()
substitui o dígito pordecimal == i
compermutatedDigit == j
, mas comosplice()
retorna os elementos removidos (nesse caso, seria igual a[a[i]]
) em vez da matriz modificada, devemos usar o operador vírgula para passar a matriz modificadaa
para o teste de primalidade, mas não antes dejoin()
inseri-la em uma sequência numérica.Por fim, o
eval()
é salvar um byte, pois, comparado à abordagem mais canônica, é mais curto:A referência ao teste principal
p
é inicializada em um argumento não utilizado para amap()
chamada.fonte
[...''+1e9]
é mais curta.Python 2 , 134 bytes
Experimente online!
Versão mais elegante e mais longa:
A entrada é tomada como uma String.
Explicação (versão mais antiga)
lambda x,r=range,l=len:
- Define um lambda com um parâmetro Stringx
e dois parâmetros constantesr=range
el=len
.sum(1...)
- Obtenha o comprimento, que economiza 1 bytelen([...])
.for f in r(10**~-l(x),10**l(x))
- Gera absolutamente todos os números com a mesma ordem de magnitude que a entrada (esperada0
). Por exemplo, uma entrada de3
, resultaria em[1, 2, 3, 4, 5, 6, 7, 8, 9]
.sum(1for t in r(l(x))if`f`[t]==x[t])==~-l(x)and f>1
- Verifica se o número atual está exatamente a 1 dígito da entrada e se é maior que 1.all(f%v for v in r(2,f))
- Verifica se o número atual é primo.fonte
sum(1for..ifBOOL)
parasum(BOOLfor)
salvar alguns bytes</joke>
)JavaScript (ES6), 137 bytes
Adapta minha outra resposta a um envio de programa completo usando os métodos
prompt()
e API da Webalert()
.fonte
Bean , 126 bytes
Experimente online!
Uma adaptação do meu envio de JavaScript para o programa completo .
Equivalente a JavaScript
Explicação
a
é inicializado implicitamente como a primeira linha de entrada como uma string e a última instruçãos
é emitida implicitamente, que contém a soma das permutações principais.fonte
Casca , 32 bytes
Experimente online!
Ungolfed / Explicação
fonte
Japonês ,
2823 bytes-5 bytes graças a @ETHproductions.
Toma uma string como entrada.
Experimente online!
fonte
¬x@AÇ|Y©+UhYZsÃâ kUn)èj
?PHP ,
151147141140136134129128 bytes-6 bytes graças a @Einacio; -1 byte graças a @Titus
Experimente online!
Formatado, com comentários:
Para mantê-lo o mais curto possível, eu:
$f = $t = 1
;++
incremento como parte de outra expressão$f += $i % $t++ == 0
(o incremento é executado após a operação do módulo e, portanto, não afeta o resultado);if
instrução para um incremento condicional, utilizou o fato de que boolean true quando convertido como um número inteiro se torna 1, usando em$c += $f == 2;
vez deif ($f == 2) $c++;
.fonte
levenshtein
. Boa ideia!$i%$t++<1
é mais curto que$i%$t++==0
.Perl 6 , 83 bytes
Experimente online!
fonte
X~
vez demap
? 81 bytesPHP, 100 + 1 bytes
Execute como pipe
-nR
ou experimente on-line .demolir
fonte
Java 8,
201194 bytesExplicação:
Experimente aqui.
new Integer(s.substring(0,i)+j+(i<l?s.substring(i+1):"")
resultará nos números inteiros:Para
0-9
:1, 2, 3, 4, 5, 6, 7, 8, 9
.Para
10
:10, 20, 30, 40, 50, 60, 70, 80, 90, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19
.Para
11
:11, 21, 31, 41, 51, 61, 71, 81, 91, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19
.etc.
fonte
JavaScript (ES7), 118 bytes
Recebe a entrada como uma sequência.
Experimente online!
Comentado
fonte
Ruby com
-rprime
, 101 bytes-rprime
importa o módulo Prime para o Ruby. Obtenha todos os números primos atéExperimente online!
fonte