>>>>>+>,[>++++++[-<-------->]<+>,]<[-[█<█<]++++++++++<]>[-]>>██[>█>>█>]+[<]<<[<]>█<<+>>[>]█>[>]█+[<]<<[<]>-█>]>>[->]<[-[[<]<]++++++++++<]>[-]>[<█]>]>[>]<[[█]<]<<<<<[<]<<██>>[>]<█[->+<]<█>>[>]<[-[[<]<]++++++++++<]>███>[<<]>[[[>]>████[<]<[-[[<]<]++++++++++<]>[-]>[█<]>]>[>]<[[-]>+[>]<-<[<]<]+<<<<<[<]>[[>]+[[>]>]>[>]>[-<+>]<[<]<[>+[<]>>-<<<<<[[<]<]>>███████>[[█]>]<]<[[<]<]<[█]>]>>>[[>]<->>]]>[[>]>]<<[[[█]<]<]<<<[█]<<█>>>[>]█[-[[<]<]++++++++++<]>>[[>]+[------->++<]>.+.+++++.[---->+<]>+++.>>]>[>]+[------->++<]>++.++.---------.++++.--------.
>>>>>+>,[>++++++[-<-------->]<+>,]<[-[[<]<]++++++++++<]>[-]>>[[[>]>>[>]+[<]<<[<]>[<<+>>[>]>>[>]<+[<]<<[<]>-]>]>>[->]<[-[[<]<]++++++++++<]>[-]>[<<]>]>[>]<[[-]<]<<<<<[<]<<[>>>[>]<[[->+<]<]>>[>]<[-[[<]<]++++++++++<]>[-]>[<<]>[[[>]>[>]+[<]<[-[[<]<]++++++++++<]>[-]>[<<]>]>[>]<[[-]>+[>]<-<[<]<]+<<<<<[<]>[[>]+[[>]>]>[>]>[-<+>]<[<]<[>+[<]>>-<<<<<[[<]<]>>[[-]+>]>[[>]>]<]<[[<]<]<[<]>]>>>[[>]<->>]]>[[>]>]<<[[[-]<]<]<<<[<]<<]>>>[>]<[-[[<]<]++++++++++<]>>[[>]+[------->++<]>.+.+++++.[---->+<]>+++.>>]>[>]+[------->++<]>++.++.---------.++++.--------.
Experimente online!
Isso implementa a peneira de Eratóstenes.
A >>>>>+>,[>++++++[-<-------->]<+>,]
entrada inicial de cada dígito como um código de caractere e subtrai 47 para colocá-lo no intervalo de 1 a 10. Isso permite que um valor de célula de 0 denote espaçamento entre números. No +>
início desta seção, o número é de pelo menos dois dígitos, o que será importante em breve.
A seguir, e uma das primeiras coisas que descobri, é a seção <[-[[<]<]++++++++++<]>[-]>
. Isso aparece várias vezes no código, cada um com diferentes padrões de redação, mas não foi difícil adivinhar que todas essas instâncias provavelmente eram do mesmo código. Esse código requer três zeros à esquerda do número decimal na fita e seu efeito é diminuir o número. A última iteração do loop colocará o valor 10 duas células restantes do número, mas o [-]
limpará.
Se o número decimal for 0, não serão criados 10 estranhos e a célula zerada por [-]
é o dígito mais significativo. O cabeçote da fita fica no segundo dígito mais significativo (razão pela qual são necessários pelo menos dois dígitos). A maioria das instâncias desse snippet é seguida imediatamente por [<<]>
, que coloca o cabeçalho em uma célula diferente de zero em condições normais e uma célula zero se o número decimal original for zero. Parece que, neste programa, a representação decimal de n-1
é usada para denotar n
, de modo que decrementar para 0
é capturado em vez de decrementar para -1
.
A próxima parte coloca os números de n-1 (n) até 0 (1) na fita:
>[ until the number reaches zero:
[ for each digit:
[>]>>[>]+[<]<<[<]> create a placeholder for the next copy
[ while the original value of the digit is nonzero:
<<+ add 1 to copy two cells left (to keep one copy)
>>[>]>>[>]<+ go to new copy and increment that cell
[<]<<[<]>- go back to original digit and decrement
] (this is effectively the same as [<+>>+<-] but with the cells at variable locations)
>] next digit
>>[->] cancel the placeholder 1s that were used for the new copy
<[-[[<]<]++++++++++<]>[-]>[<<]> decrement
]
>[>]<[[-]<] clean up the trash 10s on the tape while ending at a known location relative to the last number
Agora, esses números estão todos na fita com duas células zero separando-os. <<<<<[<]<<
nos coloca na célula final do penúltimo número da fita, que é onde estaremos em todas as iterações do loop. O loop termina quando todos os números, exceto o original, foram tratados.
No início do loop, movemos o número atual (o último ainda na fita) uma célula para a direita para ter espaço para diminuir e, em seguida, prosseguimos e diminuímos:
[>>>[>]<[[->+<]<]>>[>]<[-[[<]<]++++++++++<]>[-]>[<<]>
Se esse decréscimo não for insuficiente, procederemos à conversão do número para unário:
[[[>]>[>]+[<]<[-[[<]<]++++++++++<]>[-]>[<<]>]
Observe que este recorte tem um não fechado [
. Como resultado, o restante desse loop será ignorado se o número for 0 (representando 1). Depois de converter para unário, limpamos os 10s restantes, arrastando a representação unária conosco para a esquerda:
>[>]<[[-]>+[>]<-<[<]<]+
Eu não notei até agora escrever isso, mas o +
final deste trecho é separado da representação unária por um único 0. É também uma parte da representação unária: a sequência 1011...11
representará 0 mod k. O seguinte <<<<<[<]>
nos coloca no início do número k+1
, iniciando um novo loop.
O loop interno aqui "marca" cada número na fita com um 1 na célula imediatamente à direita e usa a representação unária como um relógio para determinar de quais números são múltiplos k
.
[
[>]+ mark the current decimal number
[[>]>] move to end of decimal part of tape
>[>] move to 0 in middle of unary "clock"
>[-<+>] move the following 1 to the left if possible
<[<]< if a 1 was moved this will bring us back to a zero before the start of this "clock";
otherwise the looped move command doesn't move us at all and we are at the final 1
[ if there was no gap (happens every kth iteration):
>+[<]>>- reset to original position
<<<<<[[<]<]>> go to number that was just marked
[[-]+>] replace digits with 0s (cell value 1)
>[[>]>]< go back to where we would be without this conditional
]
<[[<]<]<[<]> return to first unmarked number
]
A [[-]+>]
seção nessa foi a última parte que eu descobri. Antes disso, presumi que o programa estava apenas fazendo divisões de teste, mas não conseguia ver onde o resultado foi usado.
Esse loop termina duas células à esquerda do número da extrema esquerda e >>>[[>]<->>]]
remove os marcadores colocados na fita e nos leva ao final da fita novamente. Depois disso, você >[[>]>]<<[[[-]<]<]
remove o relógio unário ou, se todo esse segmento foi pulado, os 10s restantes. O loop é definido para sua condição inicial com <<<[<]<<]
.
Depois disso, basta ler se o número de entrada foi substituído por 1 a qualquer momento:
>>>[>]<[-[[<]<]++++++++++<]>> do the check
[[>]+[------->++<]>.+.+++++.[---->+<]>+++.>>] conditionally print "not "
>[>]+[------->++<]>++.++.---------.++++.--------. unconditionally print "prime"
Felizmente, a produção real não foi alterada.
Língua Wolfram (Mathematica)
Quebra esta resposta .
Experimente online!
fonte
Boole
nãoPrimeQ
.Explosão cerebral, MegaTom
Experimente online!
Este programa executa divisões de teste de n-2 até 1 e, em seguida, gera 1 se e somente se isso terminar com o fator 1.
fonte
8086 DOS COM por Joshua
xxd
representação, devido a codificações e bytes nulos e outras coisas assustadoras:Primeiro desmontei o policial manualmente, depois montei usando yasm. Alguns bytes foram corrompidos pelo conversador usado por Joshua, mas eu os tratei como bytes redigidos. Tenho 99,72% de certeza sobre o conteúdo real. Não demorará muito para corrigi-lo, se eu estiver errado. Desfrutar:
fonte
bx < 2
terminar em vez de compor. Para sua informação, a corrupção foi causada originalmente por usar X como o caractere de máscara e não consertar tudo corretamente ao mudar para █.Geléia
Quebra esta resposta.
Experimente online!
Explicação:
Olhando
ị
ev
, penso em criar uma lista de números,ị
coloque-a em alguma lista e avalie-a.A maneira "trivial" de verificar a primalidade no Jelly é
ÆP
, então (se ele pode quebrar a submissão):Æ
eP
.256
com[14, 81]
.Então ... a lista no início do programa é congruente ao
[14, 81, 49]
mod 256 ( TIO ) eṖ
exibe o último elemento.fonte
sh + coreutils
Quebra esta resposta .
Não Experimente online! desta vez por causa de alguns problemas . No entanto, você pode usar o jdoodle .
Retorna pelo código de saída.
0
(sucesso) para prime,1
(erro) para composto.O comando real executado é
Como quebrar
base64
comando.+
é um caractere base64 válido.sh -c "`echo ...|base64 -d`"
volta ao programa original .fonte
tail +n
. Quando tentei a sua rachadura na máquina no trabalho, ela se queixou. Você desmascara o código correto para que ... :(Oitava , 86 bytes, Stewie Griffin .
Experimente online!
Essa foi engraçada! Eu lutei com isso por um bom par de dias.
A primeira pista foi reconhecer
eval([...,'(x)'])
como uma construção criando uma chamada para aisprime
função, como concatenação deints
echar
vai converter implicitamente a matriz parachar
, de modo que o...
necessário para ser tantoisprime
ou uma matriz que tinha os valores ASCII deisprime
,[105, 115, 112, 114, 105, 109, 101]
.O resto era apenas documentação lenta para descobrir que
reshape
pode levar uma dimensão desconhecida[]
, embora eu suponha que eu poderia ter feitoreshape(...,2, 7)
na mesma contagem de bytes.Usar
+'e'
(101) em vez de+'d'
(100) foi um toque agradável que me impressionou por mais alguns minutos, até que notei que os últimos dígitos (não ofuscados) eram00
mais do que01
, e com isso foi fácil.fonte
Javascript
Experimente online!
De alguma forma, duvido que isso seja exatamente o que você tinha em mente, mas funciona.
fonte
> <> , Esolanging frutas
para
Experimente online!
O uso inteligente de editar uma nova linha me confundiu um pouco. Não parece funcionar para 1 ou 2 embora.
fonte
^
,v
,/
, ou\
para o segundo em branco poderia ter trabalhado lá. Agora eu gostaria de ter coberto o*
lugar do/
.Java (OpenJDK 8) , urna de polvo mágico
Experimente online!
O código é retirado do RosettaCode e explicado no SO .
fonte
Python 3 , 44 bytes, osuka_
Experimente online!
Não funciona quando x <2. O
or 0
pode ser substituído por>0{2 spaces}
ou até 4 espaçosPara o problema x <2, já que
i>=x
deve ser colocado na frente (caso contrário, haverá um loop infinito), e osi>=x
retornos serão verdadeiros imediatamente quando x <2, então acho que isso não é uma solução.fonte
M, dylnan
Esta provavelmente não foi a solução pretendida.
Experimente online!
Como funciona
ÆP
é o teste de primalidade embutido.ø
seres uma nova cadeia niládica. Como o valor de retorno anterior (o resultado deÆP
) fica fora do escopo, ele é impresso implicitamente.“;;“»
avalia a lista de strings["< Aalst" ""]
eV
tenta avaliá- las.s
tenta dividir seu argumento em pedaços de comprimento 0 , o que causa uma falha no interpretador M, suprimindo mais saídas.fonte
Pyth, Sr. Xcoder
fonte
Python 3 , usuário71546
Experimente online!
fonte