Apesar do seu protesto, você foi contratado pelo seu chefe em um programa que usa um único número inteiro não assinado como entrada e imprime a string "prime" se esse número inteiro for prime e "not prime" se não for. Você pode escolher em qual idioma você faz isso, desde que o programa resultante seja curto; seu chefe aprecia muito uma baixa contagem de caracteres. (Ele realmente contará os caracteres manualmente depois de imprimir o código fonte.)
Então é melhor você chegar lá, a menor contagem de caracteres vence.
A parte divertida
Isso é apenas entre você e eu, mas seu programa também deve ser válido em outro idioma. Nesse idioma, porém, ele deve imprimir a string "Se o chefe encontrar isso, eu desisto". Certifique-se de que seu chefe não descubra que existe um insulto oculto ao ler o código repetidas vezes, pois ele esquece se tinha contado até 17 ou 18 até agora. Por esse motivo, você não pode usar nenhuma das palavras em "o chefe encontra essa opção" em parte do código, nem o uso de anagramas e essas 5 palavras.
Desafio de bônus pelo qual eu criei uma recompensa
Escreva um programa que realmente resolva a primeira pergunta para quem não é treinado e não pareça conter caracteres desnecessários. Isso inclui comentários e segmentos de código que obviamente não contribuem com nada. Idealmente, um leigo acreditaria que seu programa é realmente o mais curto possível sem ser incontrolável. Um comentário útil aqui e ali está bem.
As regras para o desafio do bônus são um pouco mais flexíveis, em vez de serem julgadas por critérios facilmente mensuráveis, seu programa será julgado mais sobre como isso acontece comigo (e com os eleitores, é claro)
Eu serei o juiz final cuja inscrição se aproxima mais de merecer essa recompensa.
Editar:
Depois de alguns minutos contando seu chefe, ele pediu que um de seus colegas escrevesse um programa de contagem de caracteres para ele. Assim, mesmo os personagens que não são visíveis contam para a contagem de caracteres.
Respostas:
CJam ( GolfScript ),
6059 bytesObrigado a @mnbvmar por jogar fora um byte!
Como funciona (CJam)
Experimente online!
Como funciona (GolfScript)
Experimente online!
fonte
Python 2 / Python 3-128
Identifica números primos com o Python 2 , e você cria problemas com o Python 3 .
Bônus
Experimente com Python 2 ou Python 3 ! (Ao contrário da versão de golfe acima, as funções foram alteradas: o Python 3 é o identificador do número principal. O Python 2 contém o ovo da Páscoa.)
Por favor, desculpe meu inglês ruim no texto de ajuda! ;)
E eu uso a palavra "sair". Mas de alguma forma eu preciso descrever quando meu programa termina. ;)
fonte
/
problema"? (divisão inteira vs. divisão de ponto flutuante)Envio de bônus (C / C ++ 11)
O teste de primazia usando o método ingênuo usual é tão comum. É por isso que eu inventei um novo método ingênuo e randomizado! Este teste é o seguinte:
sqrt(n)
.not prime
.20sqrt(n)
tempo de teste , a saída seráprime
repetida.Se o número for composto, há muito pouca probabilidade (cerca de 10 a 9 ) de que ele não funcione. Obviamente, não acredito que o gerador de números pseudo-aleatórios em C / C ++ seja poderoso o suficiente. É por isso que eu uso meu próprio gerador LFSR de 256 bits !
C ++ 11 funciona corretamente. No entanto, o compilador C parece estar produzindo um programa defeituoso para n> 2 ...
Nota : lembre-se de que C precisa da
-lm
opção (vincular biblioteca matemática) para compilar com êxito.Se você encontrar a seguinte saída com defeito:
incorreto, basta remover a
fprintf
linha apropriada .fonte
Mathematica / Brainfuck, 260
fonte
Golfscript / Javascript (126
125129130132134205207)Experimente o Golfscript aqui e o Javascript aqui .
Eu diria que é chocantemente próximo das soluções Mathematica que, afinal, possuem uma verificação interna para números primos.
Edit: Obrigado a Peter por salvar outros
doisseis bytes!Aqui estão alguns detalhes:
1.
é necessário porque o seguinte//
é um comentário em Javascript, mas realiza a divisão duas vezes no Golfscript. Isso resultará em erro se não houver nada na pilha, portanto, precisamos fornecer dois números. Aliás,1.
é uma sintaxe perfeitamente válida em Javascript e será apenas ignorada."…"{(}%
pega a string, diminui seus valores de código de caracteres em um e a empurra como uma string. Isso resulta na string que precisamos imprimir.'
inicia uma string no Golfscript que, por padrão, se estende por várias linhas, fazendo com que o Javascript abaixo seja inserido apenas na string.';#'
fecha a seqüência de várias linhas no Golfscript, descarta-a e depois ignora o restante da linha. Em Javascript, isso é simplesmente uma literal de string que será ignorada.fonte
1+
é)
. E1 1
é1.
, o que eu suspeito que o JS ficaria tão feliz com quanto1
{)}/]""+
poderia ser{)}%
.C ++ / C99 / C90 - 248
O código será bem executado no C90, mas pode mostrar algo mais no C99 / C ++.
Sem golfe para maior clareza:
Como isso funciona: Como o C90 não reconhece comentários de linha única, a sequência do problema não é mais multiplicada por zero.
fonte
for
. Ela imprime "não não prime" se você entrada 6. Também imprimeprime
para zero e umn
no início define o número primo a ser encontrado.prime
para zero e um, como o pqnet notou anteriormente.CJam / Ruby,
132959187Minha solução anterior foi significativamente projetada em excesso; este foi fortemente inspirado pela solução de Martin Büttner, incluindo sua percepção de que o
#bytes
método aparentemente pode levar um bloqueio.Como funciona?
O caractere de comentário de Ruby (
#
) é o operador de exponenciação no CJam, portanto, precisaremos de pelo menos dois números na pilha antes de começar, mas dois números simples (0 0
) são um erro de sintaxe no Ruby. Porém, um é bom e, útil, os números Ruby podem conter sublinhados como separadores (1_234
)._
é o operador de duplicação do CJam, por isso precisamos aparecer duas vezes (;;
) quando estivermos dentro do comentário.limp
lê uma linha da entrada padrão, a converte em um número inteiro, a exibe e pressiona se é ou não primo.Para entrar no modo Ruby, abrimos uma string e continuamos na próxima linha para que não fiquemos mais no comentário Ruby (portanto, a nova linha é significativa e deve ser contada). Cada caractere da mensagem é decodificado e impresso e, em seguida, iniciamos outro comentário Ruby para que possamos fechar com segurança a string CJam antes de exibi-la. O que resta na pilha é se a entrada foi ou não pronta, impressa no final do programa CJam.
CJam / espaço em branco, 353 (25 significativos quando impressos) caracteres
Dada a natureza dissimulada do desafio e o fato de o chefe estar imprimindo nossos programas para contar os caracteres, aceitei a sugestão de fazer uma solução envolvendo o espaço em branco .
Contrariamente à minha afirmação anterior de que o programa Whitespace mais curto possível, que exibe "Se o chefe encontra isso, eu desisto". haveria 372 caracteres, este é o caso em 330. O truque é usar a
copy
instrução para extrair caracteres repetidos de algum lugar da pilha, em vez de empurrar todos os valores ASCII, que sempre serão muito maiores e, portanto, exigirão mais espaços e guias para codificar. Aqui está uma representação de pseudo-montagem do programa para os curiosos:fonte
#chars
e#lines
também, que terei em mente para desafios futuros.chars
e não funcionou por algum motivo.limp4*"not prime">
-lo para torná-lo ainda mais curtoEnvio de Prêmio de Bônus (Perl / B? F? N? E-? 3)
Editar: originalmente eu esqueci de imprimir a frase e notei que ela seria impressa na ordem inversa. Percebi isso depois de terminar. Eu estava prestes a matar um gatinho, mas consertei agora.
Isso não é mais curto, mas acredito que torná-lo não-suspeito e curto é uma tarefa difícil. Na maioria das vezes, reutilizei uma das minhas finalizações de golfe, mas nesta, eu diria que o segundo idioma é realmente difícil de detectar.
Se o chefe acha isso, eu realmente desisto, porque nunca poderei insultá-lo secretamente e, se não puder fazer isso, qual é o sentido?
Dobra
e violaçãodas regras:Estou usando a palavra "the" lá dentro, mas não é o "the" que é impresso. Pode ser tecnicamente inválido, deixarei o OP decidir se as regras devem ser rigorosas para o desafio do bônus. Se assim for, então que seja.fonte
^
= mover para cima). Certas cartas de comentários são colocadas em uma pilha, que é impressa no final, imprimindoIf the boss finds this, I quit.
Veja o exemplo via URL na reação de Ingo:"!dlrow olleH">:#,_@
Mathematica / Ruby,
115106 bytesA parte do Mathematica foi levemente inspirada pela submissão de Peter Olson, mas a poliglota com Ruby é um pouco mais elaborada aqui.
Ruby funciona, porque os dois
#
comentam tudo o que é Mathematica. A razão pela qual o Mathematica funciona é um pouco mais interessante. O código que eu quero executar é:Mas isso não é válido para Ruby, então preciso adicionar um em
#
algum lugar.#
é o parâmetro do Mathematica para funções anônimas. Então eu coloquei#
na frente, o que multiplica o argumento com o resultado doIf
. Sim, ele multiplicará isso por uma string , o que isso significa. Então eu transformo isso em uma função anônima&
e chamo imediatamente de argumento1
. Bem, o Mathematica é inteligente o suficiente para saber que a multiplicação por 1 é sempre a identidade e apenas gera a string. Depois, o código Ruby é simplesmente colocado em um comentário em bloco.fonte
C (envio de bônus)
A versão C é um verificador principal, matriz de entrada na parte superior. Tente adivinhar o que a linguagem produz
If the boss finds this, I quit.
(não é espaço em branco).A outra lingua:
fonte
Perl / Befunge-93 (108
106110)Minha segunda submissão, apenas porque. Também usa expressões regulares. Aposto que há uma escolha melhor do que Perl, por exemplo, Octave, mas não consegui descobrir como imprimir condicionalmente de uma maneira curta.
Estou abusando da regra de imprimir a string, pois evito anagramas dividindo-a em várias.
O número a ser verificado é obtido no stdin.
if
vez deunless
4 bytes salvos.fonte
Lua / PBrain (Brainf process * ck) - 813
Heh ... Desculpe, fui pego tentando ser desonesto. O PBrain é igual ao BF, mas permite ativar e definir blocos reutilizáveis de código BF. Seu uso foi completamente desnecessário.
fonte
Python 2 / Rot13 - 270 bytes (69 sem contar os comentários)
Isso usa um algoritmo muito simples (isto é, ineficiente). Quando executado com rot13 (provavelmente não é uma linguagem de programação), produz a sentença necessária (junto com outras bobagens).
A pior parte é que os comentários afirmam o óbvio e são inúteis de qualquer maneira.
Este é um poliglota de outra maneira, contendo inglês e "esperanto". Espero que o chefe não seja um poliglota.
fonte
05AB1E / Jelly , 28 bytes
Não uma, mas duas línguas de golfe!
Explicação em 05AB1E:
Explicação em Jelly:
Experimente online! (Geléia) Experimente online! (05AB1E)
fonte
Python, 403 bytes
Isto é destinado ao desafio de bônus. Os comentários não contam para o número de bytes.
Os testes na parte inferior do código são impressos:
Esse número máximo máximo que eu defini (mi) oculta o segredo. Se convertida em hexadecimal, a representação em letras ASCII de cada dois dígitos hexadecimais indica "Se o chefe encontrar isso, eu desisto". A parte sorrateira está usando a função chr. Se o chefe souber o que isso faz e estiver olhando com bastante atenção, ele saberá que o código oculta uma mensagem secreta. No entanto, ofusquei isso um pouco e forneci explicações suficientes para todo o número inteiro máximo, para garantir ao chefe que é uma parte legítima do programa.
Observe que, para a maioria dos parâmetros, ele funciona como o chefe deseja, mas se a entrada não for um número inteiro ou o número for maior que mi, p retornará o erro que contém a cadeia oculta. Eu poderia ter colocado uma chamada de impressão dentro da função, mas pensei que pareceria mais real se fosse retornada.
fonte
C # - 288
Certamente não é o mais curto, mas pode passar por muitos chefes:
Uma versão legível:
fonte