O tópico dos ladrões pode ser encontrado aqui: The Mystery String Printer (Robbers)
Seu desafio
- Escreva um programa, função ou script REPL que imprima uma string em STDOUT.
- Os ladrões tentarão criar um programa que imprima a mesma string.
- Se eles conseguirem criar o programa dentro de 7 dias, seu envio será quebrado.
- Se ninguém puder criar um programa que imprima a mesma sequência dentro de sete dias, seu envio estará seguro. Você pode revelar seu programa ou deixá-lo para desafiar futuros ladrões. No entanto, se você não o revelar, não poderá obter pontos do seu envio (não coloque "seguro" no cabeçalho da resposta se optar por fazer isso).
Restrições
- O programa deve ser menor ou igual ao total de 128 bytes (mais sobre isso posteriormente).
- Se o programa depender do nome do programa ou do nome / conteúdo de um arquivo externo, você deve dizer que o faz e incluir isso na contagem total de bytes.
- A sequência impressa deve ser menor ou igual a 2048 bytes.
- A sequência impressa deve consistir apenas em caracteres ASCII imprimíveis (novas linhas podem ser incluídas).
- O programa deve produzir a mesma saída toda vez que é executado.
- Primitivas criptográficas incorporadas (inclui rng, criptografia, descriptografia e hash) não são permitidas.
- O programa não deve receber entrada.
- Sem brechas padrão.
Pontuação
- Se um envio for quebrado antes de sete dias, ele receberá 0 pontos.
- Um envio seguro de ≤128 caracteres ganha 1 ponto.
- Um envio seguro de ≤ 64 caracteres ganha 2 pontos. Se for menor ou igual a 32 bytes, ele ganha 4 pontos e assim por diante.
- Cada envio seguro também ganha um bônus adicional de 3 pontos (independente do comprimento).
- Existe uma pequena penalidade (1/2 ponto) para cada rachadura após a sua primeira.
- Observe que a solução do ladrão deve estar no mesmo intervalo de tamanhos de programa.
- Cada pessoa pode enviar no máximo 1 programa por intervalo de bytes por idioma (versões diferentes e substituições arbitrárias do mesmo idioma não contam como idiomas separados). Exemplo: você pode publicar um programa de 32 bytes e 64 bytes, mas não pode publicar um programa de 128 bytes no Java 7 e Java 8.
- A pessoa com o total de pontos mais alto ganha.
Submissões
Cada envio deve ter as seguintes informações:
- O nome do idioma. Todas as soluções de novos ladrões devem ter o mesmo idioma.
- O intervalo do tamanho do programa (esse é o poder mais próximo de dois acima do tamanho do programa; por exemplo, se o seu programa tiver 25 bytes, isso seria "≤32").
- A sequência real a ser impressa.
- Se um envio for seguro, coloque "safe" e a duração do programa (no máximo 2) no cabeçalho. Se houver vários números no seu cabeçalho, coloque a potência de 2 por último.
Esse snippet de pilha gera tabelas de classificação e lista todos os envios abertos. Se houver algum problema com o trecho, deixe um comentário.
Use os seguintes formatos para entradas:
Language, (any text with the program size as the last number)
=
ou
Language
=
Length <= 16
Observe que o snippet só colocará a primeira palavra no cabeçalho como idioma se não detectar uma vírgula.
Para envios seguros, coloque-os em seu cabeçalho. O snippet colocará automaticamente o seu programa na coluna "seguro" se o tempo expirar; portanto, isso significa mais para qualquer ladrão que seu programa está seguro.
Para envios rachados, coloque rachados no cabeçalho.
O programa também deve ser capaz de reconhecer se um comentário diz "rachado" e tem um link; no entanto, isso não é garantido.
Ordem de desempate: Pontos -> # de envios seguros -> Menor quantidade de envios rachados.
Observe que o snippet classifica por envios abertos antes que sejam menos rachados, mas os envios abertos não serão contados no final do concurso.
Este desafio está encerrado.
Vencedor geral com mais pontos: Dennis
Envios mais seguros: DLosc
(Observe que o número de envios seguros não se traduz em um valor em pontos, pois o tamanho dos programas é considerado no cálculo da pontuação).
fonte
Respostas:
Pitão, Seguro, Alcance ≤ 8
O código:
Explicação:
fonte
]
?VBA, [Seguro]
Intervalo <= 128 bytes
Dica para onde produzir
Saída 255 bytes
Solução
Código
Explicado
fonte
Mathematica, seguro, intervalo ≤ 64
Resultado:
Fonte:
fonte
GenomeLookup
tudo ...ngn APL (seguro)
Intervalo ≤ 8
Solução
Experimente online.
Como funciona
⍟⍣=42
aplica logaritmo natural (⍟
) repetidamente a 42 até que um ponto fixo seja alcançado (⍣=
), resultando em 0,31813150520476413J1,3372357014306895 .O valor inicial realmente não importa aqui, desde que não seja 1 nem 0 .
3○
aplica-se tangente ao seu argumento correto, produzindo 0,07343765001657206J0,8920713530605129 .*
aplica a função exponencial natural ao seu argumento correto, produzindo a saída desejada.fonte
Pyth, quebrado por Sp3000
Intervalo ≤ 8
fonte
> <> (Seguro)
Testado nos intérpretes online e oficiais.
Intervalo: <= 16
Corda:
4621430504113348052246441337820019217490490
Isso é bonito 1337, hein?
Explicação:
Aqui está o código fonte (15 bytes):
f
empurra 15 (nosso contador) para a pilha (isso é ignorado!
no final para não empurrar mais de um contador)1-
subtrai 1 do balcão:0(?;
O rosto carrancudo testa se o contador é menor que 0, o restante termina o programa se estiver::
Duplica o contador duas vezes0g
Agarra o caractere no ponto(c,0)
do código-fonte ondec
está o contador*
Multiplica a segunda duplicata do contador pela representação ASCII do personagem anteriormente obtido.n
Imprime o resultado.Então, divida, a saída é
[462, 1430, 504, 1133, 480, 522, 464, 413, 378, 200, 192, 174, 90, 49, 0]
. Isso corresponde à interpretação ASCII do código em sentido inverso multiplicado pelos números 14 a 0 (ie[!*14, n*13, ... f*0]
).Provavelmente, a parte mais difícil de quebrar isso seria descobrir como dividir os números corretamente, mas se você obtiver os números corretos, é apenas uma questão de tentar as coisas até obter algo que funcione.
fonte
Snowman 1.0.2
Faixa ≤32.
A solução é:
fonte
Matlab, ≤16. Rachado por Wauzl
Alcance ≤16 .
Isso funciona no Octave também.
A sequência impressa é a seguinte:
fonte
Perl (seguro)
Faixa ≤ 32
Solução
Experimente online.
Como funciona
for-951..1048
executa o comando anterior para cada número inteiro nesse intervalo, salvando-o na variável implícita.y/124589//
realiza transliteração, eliminando os dígitos especificados da variável implícita.y///
retornará o número de eliminações, ou seja, o número de ocorrências desses dígitos na variável implícita.print 2**
imprime 2 com o poder de eliminações ( 1 , 2 , 4 ou 8 ).fonte
Python, <= 16 ( quebrado por kennytm )
Isso foi produzido via REPL (executando um comando no shell do Python).
Enquanto estiver editando isso, também resumirei os comentários para futuros ladrões sem spoilers: isso não funciona em todos os Pythons. Ele funciona em uma compilação do Python 2.7, onde
sys.maxint = 9223372036854775807
.fonte
> <> , ≤ 8 [ rachado ]
Isso é um total de 12
o
s. O programa é interrompido sem erros e funciona com o intérprete oficial e o intérprete online .fonte
TI-BASIC, ≤4 bytes, quebrado por Reto Koradi
Demorou 5 dias e 23 horas para quebrar. Tão perto...
Saída (10 bytes):
Programa:
Como é basicamente impossível alguém adivinhar isso, meu objetivo ao projetar esse programa era tornar a força bruta a única abordagem possível.
Para fazer isso, impedi que a saída, ou a saída com uma dessas funções inversas aplicadas, aparecesse no ISC. O ISC não possui tangente hiperbólica, e imaginei que nenhuma ferramenta semelhante teria
tanh(7°
.Para adicionar um pouco de segurança contra a força bruta, usei a conversão grau a radiano, um recurso um pouco obscuro, mas não era suficiente.
fonte
sin(
fique claro também, Thomas (e eu diria que a maioria das pessoas) considera coisas como 1 byte no TI-BASIC. Então, algo comosin(sin(sin(e
seria apenas 4 bytes.fPart(
.CJam, ≤ 8 [seguro]
Eu não gosto de números longos, então aqui está um número curto. Sinta-se livre para mexer offline e online .
Como acho que as submissões apenas por número são bastante entediantes, vou apresentar algumas dicas lentamente para compensar.
Solução
O programa foi
0W#
é0^-1
, que em vez de errar dáInfinity
.s
em seguida, lança isso em uma string (observe que ele`
fornece1d0/
).Na outra metade,
Wc
converte -1 em um caractere, que se torna o ponto de código 65535 devido à abrangência dos caracteres (consulte esta dica ).i
depois converte o char de volta para um int, ou seja, 65535.Por fim,
b
converte a stringInfinity
na base 65535 para fornecer o número acima.fonte
Javascript (console), <= 32 ( quebrado por insertusernamehere )
Testado nos consoles da web Chrome e Firefox. Essa é uma sequência de 43 caracteres.
Minha solução pretendida era um pouco mais elaborada que a vinculada (maldição, ES6!).
Explicação:
fonte
Python, <= 32 ( rachado por Egor Skriptunoff)
A saída é 1832 bytes, incluindo novas linhas:
fonte
CJam ( rachado por Dennis)
Comprimento <= 4
Eu não dou uma chance muito alta de sobrevivência, mas eu queria tentar uma solução de 4 bytes de qualquer maneira.
Meu código foi exatamente o que Dennis fez engenharia reversa:
O CJam imprime todo o conteúdo da pilha, concatenado. Portanto, a saída foi
17
concatenada com19^20
.fonte
KK#
, tentei mais alguns poderes e finalmente encontreiJK#
.Lua, ≤ 4 ( rachado por feersum)
Resultado:
Você precisa encontrar uma string para Lua REPL que resulte na constante "1 / M".
É simples, mas não muito trivial.
fonte
=
antes da expressão.0x2p-21
Pip , <= 16 (seguro)
Esta é a minha submissão final ao Pip, prometo. :)
Ficarei surpreso se alguém baixar isso em 16 bytes - levei algumas tentativas para ajustá-lo. (Aceite isso como um desafio, se quiser!)
Responda:
Este código utiliza as variáveis predefinidas
t
= 10 es
= espaço.fonte
Ruby, quebrado por kennytm
Faixa: ≤64.
(E sim, toda saída é para STDOUT.)
Solução pretendida:
fonte
TI-BASIC ( rachado por Thomas Kwa )
Variante TI-89
Faixa: ≤8
Comprimento da saída: 460
Eu não acho que você possa usar o RIES nisso, mas duvido que ele sobreviva 7 dias de qualquer maneira. Ah bem.
Código:
fonte
MATLAB, rachado por Tom Carpenter
Intervalo <= 16
fonte
Mathematica, Rachado por Sp3000
Intervalo: <= 32
fonte
Terça - <= 64 bytes, quebrada pelo histocrata.
555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555
Isso é 2016 5s; a propósito.
fonte
CJam, ≤8 (seguro)
Código original:
Ou seja, para começar com
3.141592653589793
e substituir cada personagem"3.141592653589793"
com o personagem correspondente"\"3.141592653589793\""
. Com as duplicatas removidas, é realmente substituir".123456789
com""35\.49831
.fonte
Python 2 (seguro 16)
Intervalo ≤ 16. Caso a versão seja importante (para precisão de impressão?), Estou usando ideona .
Não vejo uma maneira de adivinhar o código sem a pesquisa no computador, mas todos vocês me impressionaram antes.
Responda:
fonte
dir(complex)
para ver quais operações estão definidas para números complexos. Eu não sabia que você poderia usar um módulo. Note que este provavelmente não vai ser útil, mas talvez ...JavaScript ES6, ≤128 bytes - Rachado
Saída (1124 bytes):
Divirta-se e boa sorte!
Código original:
fonte
Still safe :3
TI-BASIC (rachado por Thomas Kwa)
Intervalo: <= 2
Corda:
-10
Código:
Xmin
Não há como enganar esse cara ...
fonte
~9
(inversão bit)AppleScript, ≤ 2 bytes rachado
"Bruto forçado ... resmungar resmungar ..."
O que é isso? Uma resposta AppleScript curta? : o
(sim, isso NÃO imprime em stdout)
fonte
a=
oua-
1=
ou1-
ou? Eu não tenho idéia =)say"Cracked."
e, se você não se importa com a gramática, mais um byte comsay"Cracked"
. c:> <> (Peixe) , Rachado por Sp3000
Comprimento <= 8
A saída é 23
>
's e o programa não produz erros.fonte
GolfScript (seguro)
Intervalo ≤ 8
Solução
Experimente online.
Como funciona
{9?7*}
empurra esse bloco na pilha..%
duplica o bloco e mapeia ... sobre si mesmo.O GolfScript realiza a conversão de tipos como se não houvesse amanhã. Nesse caso, o intérprete espera um iterável, para que o bloco original seja convertido em array, produzindo a seguinte matriz de códigos de caracteres: [57 63 55 42] .
O próprio bloco eleva cada código de caractere à nona potência (
9?
) e multiplica o resultado por sete (7*
).Para os quatro códigos de caracteres na matriz, isso empurra
Antes de sair, o intérprete imprime os quatro números inteiros, sem separadores.
fonte