Ao contrário de muitos desafios de C&R, isso não requer um posto de ladrão separado; o objetivo dos ladrões é decifrar a resposta anterior e postar uma nova como policial.
Como respondentes, você escreverá uma série de poliglotas que se parecem com isso (cada coluna é um idioma e cada entrada é a saída da resposta nesse idioma):
Language: 1 2 3 4 5 6 7 8 ...
Answer 1: 0 1 2
Answer 2: 1 2 3
Answer 3: 2 3 4
Answer 4: 3 4 5
Answer 5: 4 5 6
Answer 6: 5 6 7
...
(espaços em branco significam que nenhum comportamento é necessário nesse caso).
Cada resposta deve funcionar em 3 idiomas e imprimir 3 diferentes números consecutivos que são cada um mais do que os números impressos pela resposta anterior (a primeira resposta impressões 0
, 1
e 2
). Cada resposta usa dois idiomas do envio anterior e um terceiro novo idioma. O atendedor deve tentar ofuscar qual é esse terceiro idioma.
Para postar uma nova resposta, você deve:
- Quebre a resposta mais recente descobrindo qual é a terceira língua.
- De preferência, adicione uma explicação para o seu crack e notifique o pôster da resposta. Depois que seu envio for quebrado, você também deverá adicionar uma explicação.
- Escreva um poliglota composto pelos segundo e terceiro idiomas desta resposta, juntamente com outro idioma de sua escolha. Revele seus dois primeiros idiomas, mas não revele o seu novo. Será o objetivo do próximo pôster encontrar esse idioma (ou qualquer outro idioma em que ele funcione), portanto, você deve tentar ofuscá-lo.
Especificações
Os critérios para uma linguagem de programação válida são os mesmos do The Programming Language Quiz, Mark II - Cops :
- Tem um artigo da Wikipedia em inglês , um artigo da esolangs ou um artigo do Rosetta Code no momento em que este desafio foi publicado ou está no Try It Online! . Ter um intérprete vinculado em qualquer uma dessas páginas torna esse intérprete completamente legal.
- Ele deve satisfazer nossas regras sobre o que constitui uma linguagem de programação .
- Ele deve ter um intérprete gratuito (como na cerveja). Grátis aqui significa que qualquer pessoa pode usar o programa sem ter que pagar para fazê-lo.
Cada resposta deve ser executada em menos de um minuto em um PC razoável.
- Vocês pode reutilizar linguagens de programação, mas deve haver pelo menos duas respostas entre elas (para que uma resposta individual não possa reutilizar uma linguagem).
- Quebrar uma submissão consiste em encontrar qualquer linguagem de programação que imprima o resultado correto, não apenas o pretendido. Se um envio for executado em qualquer idioma que não foi declarado ou encontrado para funcionar, não há requisitos para fazer nada.
- Você não pode postar duas vezes (ou mais) seguidas.
Critério vencedor
A resposta vencedora é aquela que levou mais tempo para ser quebrada. O desafio nunca termina, por isso é sempre possível que a resposta vencedora mude.
fonte
Respostas:
Hexagonia, Klein (101) e ???
Isso é impresso
7
em hexagonia ,8
em Klein (101) e9
em ???.O
9
não funciona se uma nova linha for adicionada no final do código. Tenha cuidado se estiver testando localmente.Editar: Estar vivo por 20 horas já é um recorde, então darei algumas dicas a partir de agora. (Também porque o idioma em questão ainda não é conhecido pela IMO.)
Dicas
9
não funciona se uma nova linha for adicionada no final" é muito significativa, assim como os dois primeiros espaços (que são ignorados pelo Hexagony e Klein).v
comando finaliza o programa.Explicação ( post rachado )
No código fonte
As instruções relevantes em Klein (101) são:
Klein é uma linguagem 2D do tipo fungel, onde cruzar o limite da área de código (que é um quadrado) depende da topologia de Klein.
/
e\
são espelhos.O IP começa no canto superior esquerdo, voltado para a direita. Encontra um espelho em direção ao limite superior e entra novamente na área de código no lado direito, como mostrado acima. Então ele bate no espelho novamente, 8 é pressionado e depois (depois de passar pelo limite várias vezes) para
@
. Em seguida, o conteúdo da pilha é impresso no stdout, que é único 8.fonte
Befunge-96, Hexagony e ???
Imprime
6
em Befunge-96 ,7
em hexagonia e8
em ???.Explicação
O código hexagônico, quando "prettified" é:
O caminho da execução começa no canto superior esquerdo, na direção leste. A linha superior não faz muito.
-
altera a borda da memória atual para que o valor esteja0
. A execução continua indo para o leste na linha do meio, onde as7!
cargas7
na borda da memória atual e as impressões são como um número inteiro.[
altera o ponteiro de instruções para Nordeste a partir de7
. Depois7+3
, a execução atinge o[
que muda o ponteiro de instrução para Noroeste, começando no canto Sudeste. Finalmente, o caminho é..@
onde@
termina o programa.fonte
Lua, foda-se, ???
Imprime 3 em Lua, 4 em brainfuck e 5 em ???.
Explicação para postagem rachada :
3--(-1)
é 2, entãoprint(f)
imprime 2 (o restante é desnecessário)--
novamente é um comentário,3--(-1)
apenas 3, entãoprint(f)
imprime 3 (outras coisas são novamente desnecessárias).
caractere de saída 52, que é 4.fonte
Gatilho , JavaScript e ???
Imprime
11
no gatilho ,12
no JavaScript e13
noREDACTED
.Como isso não foi quebrado por mais tempo do que qualquer outra resposta até agora, aqui estão algumas dicas:
Т
eе
na primeira linha são caracteres multibyte.[ //
e\\ ][ //
não são ops.-²52
, é um código morto.²6
forma um loop infinito.²
, juntamente com o6
, forma um loop infinito./!'!/
Explicação
Bem, isso levou algum tempo para ser quebrado. Vamos ver como o código fica:
Isso significa que, enquanto muitos emuladores disponíveis se comportam corretamente, a implementação das regras está vinculada à segunda frase da página da Wikipedia . Obviamente, ele não pode ser executado diretamente em um PC comum, mas eu achei o emulador Emma 02 vinculado à página VIP do COSMAC para funcionar da melhor maneira.
fonte
Python 2, Python 3, ???
Isso imprime 1 no Python 2, 2 no Python 3 e 3 em ???
Explicação do crack (Post crackeado) :
0
: C: A primeira linha define uma macro semelhante à funçãoprint
que ignora seu argumento único e avalia comomain(){puts("0");}
, um programa completo que imprime0
e sai. A expressão inteira1+bool(1/2)
é ignorada quando aprint( )
macro na segunda linha é expandida paramain(){puts("0");}
.1
: Python 2: A primeira linha é um comentário.1/2
usa divisão inteira no Python 2, fornecendo 0. Esse valor é interpretado como um booleano (bool(0)
->False
) e, em seguida, adicionado a1
(1+False
->1
) e, em seguida, impresso.2
: Python 3: A primeira linha é um comentário.1/2
usa a divisão float no Python 3, fornecendo 0,5. Esse valor é então interpretado como um booleano (bool(0.5)
->True
) e, em seguida, adicionado ao1
(1+True
->2
) e, em seguida, impresso.fonte
JavaScript , CHIP-8 e ???
12
em JavaScript ,13
em CHIP-8 e14
em ???Vou sair do ramo e chamar isso de rachado, embora não consiga fazê-lo funcionar. Tenho certeza do idioma (que parece ser o que as regras pedem).
Aqui está uma explicação imperfeita do post rachado
O código em hexadecimal "é" (talvez eu esteja um pouco desligado):
Você pode ir aqui , clicar em "Ferramentas binárias" e colá-lo na caixa de matriz de bytes. Clique em "Descompilar".
Os principais elementos do código são: instruções para dizer onde está o "número", o
sprite
comando que imprime o número, a quantidade correta de lixo eletrônico aqui e ali e o seguinte:Para ver o que isso representa, clique em "Editor de Sprite" e cole esses hexadecimais na caixa abaixo. Você verá a resposta:
Tenho certeza que você pode colocar o que quiser no final e o resultado do CHIP-8 não será alterado, daí a nova entrada.
Eu ficaria encantado se alguém pudesse fazer isso funcionar plenamente, em vez da "prova" da resposta que eu dei aqui.
fonte
C, Python 2, ???
Isso é impresso
0
em C,1
em Python 2 e2
em ???.Isso será extremamente fácil de entender para quem conhece Python, mas eu queria um ponto de partida para outras respostas. As respostas subsequentes devem tentar ofuscar o terceiro idioma (eu não fiz isso).
fonte
Python 3, Lua, ???
Imprime 2 em Python 3, 3 em Lua e 4 em ???.
Explicação para postagem rachada :
fonte
> <>, Befunge-96 e ???
Imprime 5 pol
><>
, 6 polBefunge-96
e7
pol ???.Eu sei que a solução pretendida era o Befunge-93, mas não pude resistir.
Explicação:
O Befunge-96 segue o mesmo caminho que
><>
, mas ignora instruções desconhecidas, acabando adicionando um ao 5 e multiplicando por 9 para obter 54, o código ascii para6
.fonte
Comentador , Beatnik , ???
Resultados 15 no Commentator , 16 no Beatnik e 17 no esperançosamente um idioma que você deve encontrar.
Ok, é hora da pista:
fonte
fn main()
entre outras coisas), mas na verdade não é executado em Rust (explicit lifetime required in the type of 's'
), nem no TIO nem em outro intérprete que encontrei. E não consigo encontrar nenhuma outra linguagem que usefn
como identificador de função.Brainfuck,> <> e ???
Imprime
4
em Brainfuck,5
em> <> e6
em ???v
redireciona o fluxo do programa para baixo. An
é n para saída umeric.;
termina a execução.fonte
Klein (101), Z80Golf, ???
Imprime
8
em Klein (101) ,9
em Z80Golf e10
em ??? .fonte
Beatnik , Rust , ???
Imprime 16 em Beatnik, 17 em Rust e 18 em ???.
O
�
caractere na linha 4 deve ser substituído pelo caractere ASCII 18 (isso não foi feito nos links do TIO, pois não é relevante para nenhum deles).Explicação ( rachada ):
A linguagem da resposta anterior era Rust: especificamente, Rust compilado com mrustc . O mrustc é um compilador experimental e, como se destina principalmente à inicialização de uma versão válida do
rustc
, ignora a verificação de empréstimos e a verificação de mutabilidade, permitindo que o snippet de @ NieDzejkob seja compilado sem erros.Este programa funcionará com o compilador Rust normal, portanto você não precisa instalar o mrustc para testá-lo.
Dicas
Como essa resposta agora foi mais longa sem ser quebrada, deixarei uma dica e continuarei a fazê-lo regularmente até que seja quebrada:
�
personagem é um arenque vermelho e tem muito pouco significado. A maioria dos bytes pode ser substituída em seu lugar e o programa ainda funcionará.fonte
@
,P
,{
, oum
inicia uma literal caráter e algo depois imprime seu codepoint em decimal, mas isso não explica todos os++
s ...Z80Golf , Somme , ???
Imprime 9 em Z80Golf , 10 em Somme e 11 em ???.
Agradecemos a Bubbler por quebrar a postagem anterior como Somme, que usa a soma da coluna conforme as instruções. As três primeiras colunas avaliam como
Que empurra 10, imprime e sai.
fonte
Somme , Trigger e ???
Imprime
10
em Somme ,11
em Trigger e12
em ???.Como os dois últimos idiomas são fáceis de poliglota, decidi misturar esse idioma .
Explicação ( postagem rachada )
O gatilho vê o código inteiro como uma série de tokens (a tokenização é gananciosa):
A
)AAB
)AAA
)AAAA
)No código fonte
os tokens significativos são
((1
11+
111
111
, onde os dois primeiros não fazem nada e os dois últimos imprimem 1 cada - portanto, 11.fonte
CHIP-8 , Klein (100) , ???
Saídas 13 em CHIP-8 (presumo), 14 em Klein e 15 em ???.
Outra topologia Klein, tsk tsk. Eu preservei o código antes do
@
, pois não sei o que afetará o CHIP-8.Pistas
Estou meio atrasado por isso, desculpe. Vou tentar adicionar um por dia.
not
S e osay
pode ser removido sem afectar o programaPara referência, o programa sem essas coisas é assim:
Experimente online!
fonte
1
e uma string que é composta da primeira linha e diz "isso não é um valor" e as descarta, o update concat, mesmo que eu tenha um operador para isso, mas concat opera com caracteres e números, além de strings, onde os+
trata como números ). Mas era super assustador ser como "eu me pergunto o que ... oh Deus, isso poderia ser deixado sem modificação e ser a próxima entrada ... se eu soubesse o idioma ??? ..."Klein (100), comentarista , ???
Saídas 14 em Klein (100) , 15 em Comentador , 16 em ???.
Sou muito ruim em ofuscar poliglotas.
Explicação ( postagem rachada )
No Commentator, tokens e espaços comuns de comentários são os comandos importantes e outros caracteres são ignorados.
<#
faz XOR 1 na célula de memória atual.%
é usado para redefinir a célula de memória atual para zero.Espere, há 16 espaços depois
%
, o que aconteceu?Na verdade, é um pequeno bug (ou recurso?) No intérprete.
/
é tratado como o início de um comando 2-char, portanto, o espaço após ser consumido. Mas/<space>
é um comando indefinido (portanto, não operacional), para que o espaço seja efetivamente ignorado.fonte