Inspirado por este comentário ...
Obrigado aos usuários Step Hen , Wheat-Wizard e Dennis por ajudarem a solidificar a especificação deste desafio antes de publicá-lo!
Este é o tópico dos policiais. Para o tópico dos ladrões, clique aqui
Nesse desafio , você tem a tarefa de executar um código que o torna para que sua linguagem não atenda mais aos nossos critérios de ser uma linguagem de programação. Nesse desafio, isso significa fazer com que o idioma não possa mais ...
Obter entrada e saída numéricas
Adicione dois números juntos
Teste se um determinado número é primo ou não.
Esse é um desafio de policiais e ladrões , onde há dois desafios diferentes com dois objetivos diferentes: os policiais tentarão escrever algum código que torne a linguagem praticamente inutilizável e os ladrões tentarão encontrar a solução alternativa oculta que permite que os policiais recuperar o idioma deles.
Como policial, você deve escrever dois trechos de código:
Um que torna seu idioma praticamente inutilizável, por exemplo, removendo funções internas para realizar operações numéricas e de entrada / saída. Quanto mais recursos você remover, melhor. Este código não tem permissão para travar ou sair. Deve ser possível adicionar código ao final deste trecho, e esse código será avaliado . E...
... um trecho de código que recebe dois números inteiros não negativos como entrada, os adiciona e gera sua soma. Esse trecho ainda deve funcionar corretamente mesmo após a execução do primeiro trecho. Quando os dois trechos são combinados, eles devem formar um programa completo que adicione dois números ou definir uma função que adicione dois números. Idealmente, esse snippet deve se basear em comportamentos muito obscuros, para ser mais difícil de encontrar.
Você pode escolher qualquer método padrão de entrada e saída . No entanto, você deve revelar exatamente qual formato (entrada e saída) está usando. Um ladrão não pode decifrar sua resposta, a menos que use o mesmo formato que você.
Depois de escrever esses dois trechos, você deve postar o primeiro como resposta, sem revelar o segundo. Sua resposta deve conter todas as informações a seguir:
O primeiro trecho (obviamente não o segundo).
Idioma (incluindo versão secundária, já que a maioria dos envios provavelmente dependerá de casos extremos)
Formato IO, incluindo se é uma função ou um programa completo. Os ladrões devem usar o mesmo formato para que sua fenda seja válida.
Quaisquer casos extremos estranhos necessários para que sua resposta funcione. Por exemplo, é executado apenas no linux ou requer uma conexão com a Internet . Obviamente, isso é um pouco subjetivo, mas se um policial tem algum caso extremo que o impede de rachar e só revela isso depois de estar seguro, considero esse mau espírito esportivo. Um ladrão em potencial deve ter todas as informações necessárias para decifrar sua resposta antes que ela seja decifrada.
Você não precisa revelar sua contagem de bytes até que sua resposta esteja segura.
Aqui está um exemplo. Para o primeiro snippet, você pode enviar o seguinte programa Python 3:
Python 3
print=None
Leva a entrada de STDIN e a saída para STDOUT
E então, como seu segundo trecho, você pode escrever:
import sys
a,b=int(input()),int(input())
sys.stdout.write(a+b)
Isso é válido porque ele recebe dois números como entrada e gera a soma deles, mesmo que você junte os dois trechos, por exemplo
print=None
import sys
a,b=int(input()),int(input())
sys.stdout.write(a+b)
No entanto, será extremamente fácil para um ladrão encontrar uma solução. Como isso seria muito fácil de decifrar, você pode tentar corrigir esta abordagem específica da seguinte maneira:
import sys
sys.stdout=None
print=None
No entanto, mesmo isso tem uma solução muito fácil:
del print
a,b=int(input()),int(input())
print(a+b)
Como policial, seu objetivo é tornar a solução oculta o mais obscura possível, para impedir que os ladrões a encontrem.
Os ladrões vão olhar para uma das suas respostas e tentar decifrá-la. Eles podem decifrá-lo escrevendo qualquer trecho válido que possa funcionar como o trecho 2 (adicionando dois números depois que o idioma ficar inutilizável). Isso não precisa ser o mesmo snippet que você pretendia originalmente. Se um ladrão quebrar sua resposta, ele deixará um comentário e, em seguida, você deverá editá-lo para indicar que foi quebrado. Se sua postagem estiver com problemas, edite sua resposta para mostrar a solução (snippet 2) que você pretendia originalmente. Esta não é uma regra em si , apenas uma sugestão amigável para manter o jogo divertido. Você não tem que.
Se uma resposta permanecer sem quebra por uma semana inteira, você poderá editar seu segundo snippet e indicar que sua resposta está segura . Se você não editá-lo depois que a semana terminar, outros usuários ainda poderão decifrá-lo até você. Se você não revelar seu segundo trecho, não poderá reivindicar pontos por sua resposta ou chamá-lo de seguro.
O vencedor do tópico da polícia é a resposta mais curta e segura, incluindo os dois trechos , contados em bytes, e essa resposta será aceita após um tempo suficiente. Você não precisa revelar sua contagem de bytes até que sua resposta seja segura, pois a contagem de bytes é irrelevante para sua pontuação até que sua resposta seja segura. No caso de ter passado tempo suficiente e nenhuma resposta permanecer sem quebra, o vencedor será a resposta que permanecerá sem quebra por mais tempo.
Diverta-se!
Esclarecimentos sobre regras
O primeiro trecho deve ser executado corretamente sem receber nenhuma entrada . Pode produzir o que você quiser e essa saída será ignorada - desde que o snippet seja concluído, o segundo snippet será executado corretamente.
O segundo trecho deve realmente ser executado para que sua resposta seja válida. Isso significa uma resposta como
import sys sys.exit()
não é válido porque não quebra o idioma. Simplesmente sai. Da mesma forma, a inserção de um loop infinito não é válida, pois o segundo trecho nunca será executado.
Depois de estar seguro, sua pontuação é a contagem de bytes de ambos os trechos .
Isso remonta a Por favor, revele quaisquer casos extremos estranhos necessários para que sua resposta funcione ... Seu envio deve conter informações suficientes antes de ser revelado para ser reproduzível após ser revelado. Isso significa que se sua resposta se tornar segura e você editar em: Aqui está a minha resposta. Ah, sim, BTW isso só funciona se você executá-lo no Solaris, a piada é sua! sua resposta é inválida e será excluída e não será considerada elegível para ganhar.
O segundo trecho pode travar após a saída da soma - desde que a saída ainda esteja correta (por exemplo, se você optar por enviar para STDERR e obter várias informações de falha, isso é inválido).
Você não pode editar seu código depois de enviar uma resposta.
Você não pode confiar em funções criptográficas como criptografia, funções de hash, CSPRNGs etc.
int main(){ do_evil_stuff(); }
onde o código de usuários deve ir? Em uma função? Depois de todas as declarações emmain
?