A tarefa dos policiais é escrever uma função ou programa que, quando recebe uma entrada, produz uma cadeia determinística finita. Se o programa receber uma entrada diferente, ele deverá retornar uma saída diferente.
Regras:
- As submissões consistem em
- Nome do idioma
- Se algum sinalizador for usado, ele deverá ser revelado.
- Contagem de bytes do programa
- Contagem de bytes da saída
- Resultado
- Se for particularmente longo, forneça uma pasta ou algo semelhante
- Se contiver imprimíveis, forneça um hexdump.
- Novas linhas e espaços em branco à direita devem ser incluídos na saída
- De onde vem a entrada (STDIN, linha de comando, etc. )
- Nome do idioma
- Se aplicável, você pode assumir que o byte representando o EOF não está presente na entrada, a menos que você use esse byte no seu programa.
- Se o seu programa estiver com problemas, adicione um link para a resposta correspondente no tópico do ladrão no seu título.
- Seu programa não é seguro até que uma semana se passe e você o marca.
- Eu desaprovo técnicas como propagação aleatória com as funções de entrada ou hash criptográfico. Não consigo impedi-los, mas não aceitarei uma solução que utilize um deles . Observe também que algumas dessas técnicas podem ter colisões, onde uma sequência diferente produz a mesma saída.
- Seu objetivo é ter a menor saída possível. A solução mais curta e segura postada dentro de três semanas após a publicação desta pergunta vence!
A tarefa do ladrão é encontrar um programa de tamanho igual ou inferior ao original, que também obedeça às regras acima.
Se um ladrão quebrar seu programa com uma solução diferente da pretendida, você terá a oportunidade de desdobrá-lo, provando que a solução do ladrão está incorreta. Você pode fazer isso encontrando uma entrada no programa do ladrão que produzirá a mesma saída.
Submissão de exemplo:
brainfuck, 10 bytes, Pontuação: 10
]<.[<],>[,
Esta solução é , [>,] <[. <], Que simplesmente inverte a entrada
Boa sorte!
code-challenge
cops-and-robbers
Brincadeira
fonte
fonte
1
por si mesmo e0
de outra forma1021111143210532105110321051101121171164041581121141051101164011111410040105414410111010061393941
para algumas outras strings.Respostas:
7 , 31 caracteres, pontuação 30, seguro, mas possivelmente quebrado?
Um programa 7 normalmente é apenas um número, mas pode conter espaços em branco, dividindo-o em vários números. Portanto, essa submissão consiste em dois números (que são implicitamente concatenados pelo intérprete 7), e o programa também aceita dois números como entrada, via entrada padrão. (Os "31 caracteres" no cabeçalho são o comprimento total dos dois números, mais um caractere de espaço em branco que os separa; os dígitos que compõem os números são interpretados como octais quando usados como um programa, mas decimais quando usados como entrada e são os dígitos que são iguais nos dois casos, não os números reais.Tenha em atenção que é irrelevante quando tratado como um programa ou quando é tratado como uma entrada, se você os separa com um espaço ou uma nova linha; espero que não invalidar o envio.)
A saída esperada é o seguinte número (expresso aqui em decimal, pois esse é o formato de saída que o 7 intérprete usa):
Observe que o 7 intérprete vinculado a partir do wiki da Esolang armazena internamente números em unário, o que significa que é improvável que você tenha memória suficiente para realmente executar o programa em si mesmo para ver o que faz. Eu verifiquei o programa elaborando seu comportamento manualmente e testando-o em pequenas entradas para verificar se ele fez o que eu esperava que ele fizesse. Uma abordagem alternativa seria escrever um intérprete que use um método mais eficiente de armazenar números.
Evitar rachaduras aqui foi um pouco doloroso, mas agora estou finalmente satisfeito que dois números diferentes dos do próprio programa são capazes de produzir 238363505302130098723162537059 como saída. ( EDIT 1 semana depois: posso estar errado, dependendo de como você interpreta a pergunta; veja abaixo. )
Solução
O programa original era:
Pretendia-se que nenhuma outra entrada desse o resultado desejado porque:
No entanto, dependendo de como você interpreta a pergunta, pode haver uma segunda entrada que produz a saída desejada (invalidando assim esta solução):
Explicação
Veja como a solução pretendida funciona:
fonte
Node.js v10.9.0 , 40 bytes, Pontuação: 40, Rachado
Entrada
Esta é uma função que aceita exatamente um parâmetro.
Resultado
fonte
o=>[...j=o,].sort(n=>(j+=113)&69).join``
, masj
não pode ir para número inteiroUma árvore de pêra , 46 bytes de ASCII, pontuação 0, rachada
A entrada é obtida da entrada padrão. A saída esperada (na saída padrão) é uma sequência vazia (ou seja, quando o programa é apresentado como argumento, nenhuma saída deve ser impressa).
Em outras palavras, o desafio aqui é escrever um programa A Pear Tree que não produza nada na saída padrão quando fornecido na entrada padrão e que produz algo na saída padrão quando recebe algo diferente dele na entrada padrão, sem usar mais de 46 bytes. (Consegui fazer isso mantendo o programa em ASCII imprimível também, apesar do A Pear Tree frequentemente usar caracteres não ASCII e não imprimíveis.) Essa é efetivamente a tarefa de escrever um programa de identificação automática , com um formato de saída específico (ou seja, sequência nula quando a identificação for bem-sucedida); no entanto, uma árvore de pêra tem pelo menos duas reviravoltas que tornam a tarefa um pouco mais difícil do que parece quando realizada neste idioma específico (e foi por isso que a escolhi para o envio da minha polícia).
Minha solução
Minha solução é um pouco diferente do crack:
Experimente online!
Em vez de usar
exit
, em vez disso, defino$_
(saída implícita) e$\
(nova linha após saída, incluindo saída implícita) a sequência nula se houver uma correspondência (e1
se não houver correspondência). Aprint
ainda é necessária porque a saída implícita só é ativada se houver pelo menos um byte de entrada (portanto, precisamos imprimir explicitamente algo se recebermos uma string vazia como entrada, que é diferente do programa).Todo programa A Pear Tree precisa conter uma soma de verificação em algum lugar (é o que está
MZpa
nesta solução). Tanto a minha solução quanto o crack selecionam nomes de variáveis (e variam outros detalhes menores do código) para fazer com que a soma de verificação seja composta inteiramente por letras ASCII.fonte
Perl 5
-p0777
, 10 bytes, 10, seguroO último caractere aqui é "shift out", código de caractere 14 (decimal) / 0E (hex). Todos os outros são ASCII imprimíveis.
Como estamos usando o argumento implícito de E / S do Perl
-p0777
, a entrada é proveniente da entrada padrão e a saída é enviada para a saída padrão.Solução
O programa faz o seguinte:
o que significa que o próprio programa, a única entrada que produz a saída desejada, é:
Experimente online!
Explicação
fonte
Python 3, 50 bytes quebrado
Entrada e saída de / para stdin / -out. A saída é diferente para cada entrada diferente. Saída exclusiva quando fornecido o código fonte:
(Isso é 150 dígitos)
Boa sorte!
fonte
05AB1E , 35 bytes, Pontuação: 7
Entrada:
De
stdin
Resultado:
QÕ Ƿe
fonte
Cubix , 18 bytes, Pontuação 18, seguro
É uma pena que esse desafio não tenha atraído mais atenção, mas é assim que acontece às vezes. Eu deixaria isso inseguro, mas decidi postar a solução antes de me esquecer.
Isso deve ser bastante fácil de quebrar.
Entrada de
stdin
Resultado
Edit: devo mencionar que isso espera a fonte em sua forma abreviada ... e agora notei que há um byte ausente (não imprimível) do resultado que quebrei ao publicar. Deve copiar agora. Os valores hexadecimais são
24 60 2a 13 32 61 4a 50 4a 23 37 34 28 6f 29 3b 38 39
O conceito era remover a impressão do primeiro caractere e remover o índice inverso do caractere, por exemplo, [chars] - [0, len ([chars]) .. 2]
O código é
que mapeia para o cubo a seguir
Experimente aqui
fonte
Geléia , 14 bytes, Pontuação: 21, Seguro
O programa e o tamanho da saída são contados usando a página de código Jelly.
Entrada
Primeiro argumento da linha de comandos.
Resultado
Solução
Experimente online!
fonte
v⁼
produzirá1
se a entrada avaliada como código Jelly com uma entrada da entrada for igual à entrada e produzirá0
ou ocorrerá um erro (se a entrada for um código Jelly inválido).JavaScript Firefox, <10 bytes, Pontuação: 52, da entrada do argumento de função, Cracked
btoa(btoa)
codifica a seguinte string:que dá:
apenas copiado
fonte
GCC 61-> 61 bytes
Programa completo, obtenha entrada de stdin e saída para stdout
fonte
50
?Perl 6, 43 bytes, Pontuação: 15, de stdin
fonte
Pepe , 23 bytes, pontuação: 23, decifrado por MickyT
Entrada:
padrão
Resultado:
fonte
J , 26 bytes, Pontuação: 52, Seguro
O programa não é um REPL, mas um script completo que aceita
stdin
e imprime explicitamente emstdout
.Entrada
Entrada padrão.
Resultado
Não, não é um método de criptografia.
Solução
Experimente online!
fonte
Barril , 6 bytes, Pontuação: 6
Entrada
De
stdin
, usando?
Resultado
Lembre-se de que essas são seqüências de escape para bytes não imprimíveis. Substitua os escapes pelos caracteres literais. Texto bruto disponível aqui
Boa sorte com este! Vejo vocês na próxima semana!
fonte
Perl 6, 31 bytes, Pontuação: 39, de stdin - Rachado
Rachado aqui
Solução bruta. Pode sobreviver.
fonte