Seu desafio, se você optar por aceitá-lo, é codificar como golf uma função que retorna true ou false (ou alguma representação significativa similar de yes e no) se um número atender aos seguintes critérios:
- O inteiro em si é um número primo OU
- Qualquer um dos números inteiros vizinhos é primo
Por exemplo:
Uma entrada de 7
retornaria True.
Uma entrada de 8
também retornaria True.
Uma entrada de 15
retornaria False. (Nem 14, 15 ou 16 são primos)
A entrada deve poder retornar corretamente para números entre 2 ^ 0 e 2 ^ 20, inclusive, portanto, não há necessidade de se preocupar com problemas de sinal ou estouros de número inteiro.
code-golf
number
primes
decision-problem
Mr. Llama
fonte
fonte
Respostas:
J, 17
Retorna booleanos codificados como códigos de retorno do processo: zero para true, diferente de zero para false. Uso da amostra:
fonte
*/0 p:<:,],>:
é mais curto e uma função adequada (lambda) é([:*/0 p:<:,],>:)
Haskell, 47 caracteres
fonte
Python
8580Primeira vez no Code Golf, provavelmente faltam alguns truques.
fonte
[]
. todos ficarão felizes em trabalhar com uma expressão geradora. Se você não se importa que seu código seja feio, você também pode remover os espaços entre0
efor
, e)
eor
.f=lambda n:any(all(m%i for i in range(2,m))for m in[n,n-1,n+1])
Não é um candidato real na falta de código, por qualquer meio, mas ainda está enviando, pois a determinação da primidez pela expressão regular é distorcida de várias maneiras!
Python (2.x), 85 caracteres
fonte
Ruby (55 ou 50 como lambda)
ou como lambda (use
g[23]
para chamá-lo)Cafés (53)
fonte
O Mathematica chato , 35 solução!
fonte
Or@@PrimeQ/@{n-1,n,n+1}
.Or@@PrimeQ@{#-1,#,#+1}&
(a barra em seu código não é necessária)C,
1128272 caracteresApós o comentário de Ilmari Karonen, salvou 30 caracteres removendo
main
e agoraP
retorna verdadeiro / falso. Também substituiu o loop pela recursão e mais alguns ajustes.Versão original:
fonte
main(n,m)int**m;
.Mathematica, 24 bytes
Não sei por que esse post antigo apareceu na minha lista hoje, mas percebi que o Mathematica é competitivo aqui.
Função sem nome, usando um argumento inteiro e retornando
True
ouFalse
. Implementação direta.fonte
PrimeQ
threads sobre listas, entãoOr@@PrimeQ@{#-1,#,#+1}&
(ouOr@@PrimeQ[#+{-1,0,1}]&
) também funciona, para -1 byte. (Embora, eu acho que eu não sei sePrimeQ
de rosca sobre listas em 2012.)Stax , 6 bytes
Execute e depure
Explicação (sem embalagem):
fonte
JavaScript (71
7380)Demonstração: http://jsfiddle.net/ydsxJ/3/
Editar 1: mude
for(i=2;i<j;i++)
parafor(i=1;++i<j;)
(obrigado@minitech
). Converterif
declaração em ternário. Movidor|=p
ep=1
para o exteriorfor
para eliminar chaves internas. Salvou 7 caracteres.Edição 2: Combinar
p=1
ej++<=n
parap=j++<=n
, senão 2 chars (graças@ugoren
).fonte
for(i=1;++i<j;)
vez defor(i=2;i<j;i++)
salvar mais 1 caractere.!j%i
não funcionará por causa da precedência. Uma alternativa de trabalho éj%i<1
.p=j++<=n
? Se o Javascript é como C aqui, deve funcionar.Regex (ECMAScript), 20 bytes
^x?x?(?!(x+)(x\1)+$)
Experimente online!
A versão acima não lida corretamente com zero, mas isso exige apenas 1 byte extra:
^x?x?(?!(x+)(x\1)+$)x
Como um bônus adicional, aqui está uma versão que fornece uma correspondência de retorno de
1
um a menos que um primo,2
para um primo e3
um mais que um primo:^x?x??(?!(x+)(x\1)+$)x
Experimente online!
fonte
C #, 96
Retorna -1,0,1 para true, qualquer outra coisa é falsa.
Qualquer sugestão para torná-lo mais curto seria maravilhosa!
Forma expandida:
fonte
if(i==r-1)break;
mudar o meio dofor
loop dei<r
parai<r-1
. Seria trazer para baixo a 82.GolfScript: 26
Explicação: O bloco mais interno
{.:i,{i\%!},,2=@|\(}
determina se a parte superior da pilha está pronta, verificando se existem exatamente 2 fatores a menos que a parte superior da pilha. Em seguida, ele é disjuntado com o segundo item da pilha, que mantém o estado de se um primo foi visto ainda. Por fim, diminui o número no topo da pilha.Comece incrementando a entrada, inicializando o estado de primeira vista e repita o bloco 3 vezes. Como isso diminuirá duas vezes, mas começamos incrementando, isso cobrirá
n+1
en-1
.fonte
C #,
8797 caracteresfonte
CJam, 12 bytes
Como o CJam é muito mais jovem que esse desafio, essa resposta não é elegível para a marca de seleção verde (que deve ser atualizada para a resposta da randomra de qualquer maneira). No entanto, jogar golfe foi realmente divertido - comecei com 17 bytes e depois mudei minha abordagem completamente três vezes, economizando um ou dois bytes de cada vez.
Este é um bloco, o equivalente mais próximo a uma função no CJam, que espera a entrada na pilha e deixa 1 (verdade) ou 0 (falsidade) na pilha.
Teste aqui.
Aqui está como funciona:
fonte
F #, 68 bytes (não concorrente)
Experimente online!
É por isso que eu amo código de golfe. Ainda sou muito verde com o F #, mas aprendo muito sobre como a linguagem funciona e o que ela pode fazer com esses tipos de desafios.
fonte
APL (Dyalog Classic) , 20 bytes
Experimente online!
fonte
Retina , 22 bytes
Experimente online!
Toma unário como entrada
fonte
Java 8, 83 bytes
Retorna
true
/false
como valores de verdade / falsey.Experimente online.
Explicação: "
Portanto
int p(int n)
, resultará em-1
forn=0
e non-primos, e resultará emn-1
forn=1
ou primos. Comop(0)+p(1)+p(2)
se tornará-1+0+1 = 0
e retornaria falso (mesmo que2
seja primo), essen=1
é um caso extremo usando essa abordagem.Um único loop sem método separado teria 85 bytes :
Retorna
1
/0
como valores de verdade / falsey.Experimente online.
Explicação:
fonte
Japonês , 7 bytes
Experimente online!
fonte
R, 68 caracteres
Uso (1 para VERDADEIRO, 0 para FALSO):
fonte
i(n-1)|i(n)|i(n+1)
vez deifelse(i(n-1)|i(n)|i(n+1),1,0)
?C ++
fonte
Q,
43 caracteres36fonte
J, 16 caracteres
fonte
Python,
6967 caracteres8**7 > 2**20
enquanto é um pouco mais curto para escreverfonte
Ruby, 47 caracteres, mas muito legível
fonte
C ++ 97
ugoren parece ter me derrotado na solução inteligente. Portanto, ele é uma versão abreviada do loop três vezes:
fonte
Quarto (gforth) , 104 bytes
Experimente online!
Explicação
Cheque principal (p)
Função principal (f)
fonte
Julia 0.4 , 23 bytes
Experimente online!
fonte
Gelatina , 5 bytes
Experimente online!
Como funciona
fonte