Satanás-Primes
quem são eles?
eles estão Primes
contendo 666
estes são Satanás-Primes: [46663,266677,666599,666683,616669]
estes NÃO são :[462667,665669,36363631,555]
Enredo
Todo número maior que 6661 tem Satanás-Primes atrás dele
O desafio
Dado um número inteiro, n>6661
encontre o Satan-Prime atrás (ou igual) e mais próximo de si.
Exemplos
Integer n=30000
tem 3 Satan-Primes (SP) por trás dele: [6661, 16661, 26669]
.
Seu código deve retornar 26669
qual é o mais próximo por trás dele
Casos de teste
Entrada-> Saída
6662->6661
10000->6661
66697->66697 (a SP returns himself)
328765->326663
678987->676661
969696->966677
Regras
Seu código deve funcionar para qualquer um n
no intervalo do seu idioma.
Isso é código-golfe , então a resposta mais curta em bytes vence!
output the nth satan prime
desafio ...Respostas:
Mathematica, 82 bytes
fonte
Neim , 9 bytes
Explicação:
Experimente online!
fonte
+6
push 666? Ou Neim é apenas esse metal?+x
significa 612 + código dex
. O código de6
passa a ser 54, então 612 + 54 = 666.'\+*
=100,356,612,868
(mais o ordinal do caractere a seguir) #Geléia ,
109 bytesEconomize 10% graças a @Dennis!
Experimente online!
Explicação
fonte
ÆRẇ@Ðf666Ṁ
w
deve funcionar em vez deẇ@
.Pitão ,
1514 bytesGuardou 1 byte com a ajuda de Dave .
Erros de memória
969696
e qualquer coisa maior na minha máquina, mas tudo bem se receber memória suficiente.Experimente aqui ou confira o Conjunto de Testes.
Quão?
Pitão , 14 bytes
Experimente aqui!
fonte
ef&/`T*3\6P_TS
"666"
é uma maneira menos eficiente de descrever a string 666 que é #*3\6
05AB1E , 11 bytes
Experimente online!
fonte
Bash + Core Utils,
5149 bytesLeva argumento de linha de comando. Pode ser bastante lento com números maiores.
fonte
|head -1
ao final.Mathematica,
64626153 bytes-1 byte graças a @KellyLowder
-8 bytes (uau) graças a @Notatree
Explicação
Pegue uma entrada. Nós o diminuímos sob estas condições:
a entrada não é primária, OU
os dígitos das entradas não contêm três 6s seguidos.
Repetimos isso até que um primo de Satanás seja alcançado.
fonte
#//.i_/;!PrimeQ@i||ToString@i~StringFreeQ~"666":>i-1&
Perl 5 , 47 bytes
46 bytes de código + 1 para
-p
Experimente online!
fonte
Japonês , 14 bytes
Teste-o
Visto que não era um bónus baseado no tempo de 50%: caso teste é concluído
969696
em menos de meio segundo.Explicação
Entrada implícita de número inteiro
U
.Gere uma matriz de números inteiros de
1
atéU
.O filtro (
f
) inicia.Marcha ré.
Retorne o primeiro elemento que retorna um valor de verdade (neste caso
1
) quando passado por uma função que verifica se ...O número inteiro convertido em uma string (
s
) contém (ø
) 666.Alternativa mais rápida, 15 bytes
Novamente, visto que havia originalmente um bônus baseado no tempo, aqui está uma solução alternativa e muito mais rápida, que eu não consigo mais jogar golfe.
Teste-o
fonte
PowerShell , 128 bytes
Experimente online!
O PowerShell não possui nenhum fator de fatoração principal incorporado, portanto, isso empresta o código da minha resposta no Prime Factors Buddies .
Tomamos informações
$n
e declaramos uma novafunction f
que calcula os fatores de entrada$a
. Se a entrada$a
for prime, isso retornará apenas$a
.A parte principal do programa é o
for()
loop infinito . Dentro do loop, verificamos se$n
-match
es contra666
e se$n
é primo (ou seja,$n
corresponde a todos os fatores de$n
). Se for, colocamos$n
no pipeline eexit
, com saída implícita. Caso contrário, decrementamos$n--
e continuamos o loop.fonte
Python 2 ,
7776 bytesEdit: -1 byte graças a @ Mr.Xcoder
Tempo de execução lento, é executado em
O(n^2)
Experimente online!
Outra solução de 76 bytes
Experimente online!
Com o SymPy 73 bytes
Experimente online!
fonte
lambda x:max(q for q in range(x+1)if"666"in`q`*all(q%t for t in range(2,q)))
- use emmax()
vez de[][-1]
PowerShell ,
716964 bytesExperimente online!
328765 leva ~ 30 segundos na minha máquina, mas atinge o tempo limite de 60 segundos no Tio.run.
678987 leva ~ 1,5 minutos.
fonte
MATL, 16 bytes
Experimente no MATL Online
Explicação
fonte
Bytes C ++ 389
Este é um programa completo!
Você precisará do Boost para compilá-lo. (Ou copie e cole no seu shell C ++ online favorito.)
Execute-o na linha de comando, fornecendo n como argumento.
Ungolfed:
Atalhos foram feitos em termos de teste de número aleatório. O código original começou a testar possíveis números primos em 6661 e aumentou em dois. Você também receberá um aviso do compilador por causa disso (-1), em vez de npos.
Ainda assim, isso é executado rapidamente. Foram necessários apenas 40 segundos para encontrar todos os 214 satan primos abaixo de 1.000.000 no meu antigo AMD Sempron 130.
: ^ D
fonte
Pacote Bash + bsd-games, 33
Experimente online .
fonte
tail -n1
.tail
aqui. De fato,tail -1
é ainda menos 1.Python 3 ,
85 8380 bytesO de Halvard é 4 bytes mais curto porque é feito em Python 2.
Experimente online!
Reserve um tempo, é extremamente lento devido à sua
O(n^2)
complexidade.fonte
JavaScript (ES6),
5554 bytes-1 byte graças a @ThePirateBay.
Muito lento com entradas grandes. Teste de primazia adaptado a partir deste código resposta de golfe .
Horários
10000
levou 10 segundos328765
levou 3 minutos678987
levou 9 minutos969696
levou 16 minutosTestes
Alguns deles travarão o navegador por vários minutos.
Mostrar snippet de código
Versão mais rápida, 56 bytes
Conclui cada caso de teste em menos de um segundo.
fonte
d==1
pord<2
sincen>6661
.f=n=>/666/.test(n)&(g=d=>n%--d?g(d):d<2)(n)?n:f(n-1)
mas gerará um erro de recursão para números maiores.f=n=>/666/.test(d=n)-eval("while(n%--d);d")?f(n-1):n
Ruby,
67,66,58, 56 bytesInclui
+7
bytes para-rprime
É muito rápido, computando valores de até
~2^52
um segundo e2^64
em menos de 5 minutos (2011 MBP, Ruby 2.3.1).fonte
Stax , 10 bytes
Execute e depure
Explicação (sem embalagem):
fonte
PHP , 148 bytes
Experimente online!
fonte
Perl 6 , 35 bytes
Experimente online!
Solução recursiva direta.
fonte
C # (.NET Core) ,
117115112 bytesExperimente online!
int
declarações.Tenho certeza de que isso poderia ser reduzido; talvez chamando
func f
e removendo recursivamente ofor
loop externo .Abordagem recursiva, 85 bytes
Experimente online!
Não tenho certeza de quão bem essa abordagem se encaixa nos limites do código-golfe devido à necessidade de definir a
Func<int,int> f = null
primeira, e issof
é chamado novamente, mas não é contabilizado em bytes. Qualquer esclarecimento seria apreciado.fonte