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.
Snippet para encontrar envios sem rachaduras:
fonte
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
?Respostas:
Gforth 0.7.3 (TIO) , 231 bytes [SAFE]
Esse código redefine como inúteis alguns métodos de saída necessários, além de adição e algo crucial para declarar funções. Boa sorte!
A entrada será dois números inteiros assinados, retirados da parte superior da pilha como parâmetros de função. Saída para STDOUT.
Portanto, você deve corrigir o dano causado e definir uma função que retire os dois principais valores da pilha e imprima o resultado como um número inteiro (não um float) em STDOUT sem saída adicional (sem espaço à direita).
Aqui está um modelo , se sua função de objetivo for nomeada
f
.Solução:
fonte
Haskell, rachado por Christian Sievers
Programa completo, lendo dois números inteiros (incluindo negativos) de stdin e escrevendo para stdout.
Acabei de desativar o Prelude, então quase nada está no escopo e adicionei uma definição; importações adicionais são sintaticamente inválidas. Eu te dei
getLine
e penseiprint
.Editado para adicionar minha solução original. O crack de Christian era diferente, mas explora os mesmos recursos básicos (você pode obter uma quantidade surpreendente de computação acessando funções que possuem açúcar sintático, mesmo quando você não pode chamar nada embutido diretamente ou mesmo nomear os tipos envolvidos).
O que provavelmente não é super-golfe, mas aqui está mais legível:
fonte
Python 2 , Rachado
Implementa a adição como uma função nomeada
Experimente online!
O que isso faz?
Com o objetivo de ajudá-lo um pouco, explicarei o que isso faz. Este código abre o arquivo de origem e verifica se o restante do código se encaixa nos seguintes critérios:
import
&)(,.:[]a`cdfijmonrt~
Se falhar em qualquer um dos critérios, o limite de recursão será definido como
1
significando que qualquer código que você escrever atingirá o limite de recursão.Não há truques aqui, escrevi uma solução que usa apenas esses caracteres e não importa, não estou fazendo nada subversivo, mas direi que acho que isso será muito difícil de decifrar.
Para economizar algum tempo, aqui está uma pequena lista de coisas úteis que você não pode fazer com esta restrição
+
bem duh,eval
/exec
Não ia deixar você se safar com issoNúmeros, eles podem ser mais úteis do que você pensa
Literais de string
len
=
, Sem atribuir variáveis>
,<
,==
. . . Eu deixei você sem comparações*
,-
,/
,%
,^
,|
,>>
,<<
Os únicos operadores disponíveis são~
e&
__foo__
, Nenhum desses métodos sofisticados de sublinhado duplo é permitido.fonte
This code is not allowed to crash or exit.
(veja o bate-papo para discussão sobre isso)Python 2 , Rachado
Esta é a quarta iteração desta resposta. Cada uma das últimas respostas foi quebrada ao redefinir a profundidade da recursão.
Implementa a adição como uma função nomeada
Experimente online!
O que isso faz?
Com o objetivo de ajudá-lo um pouco, explicarei o que isso faz. Esse código abre o arquivo de origem e verifica se o restante do código é composto apenas pelos caracteres
&)(,.:[]a`cdfijmonrt~
Se falhar, o limite de recursão é definido como
1
significando que qualquer código que você escreve atingirá o limite de recursão.Também desabilitei todos os módulos, para que você não possa importar nada.
Não há truques aqui, escrevi uma solução que usa apenas esses caracteres e não importa, não estou fazendo nada subversivo, mas direi que acho que isso será muito difícil de decifrar.
Para economizar algum tempo, aqui está uma pequena lista de coisas úteis que você não pode fazer com esta restrição
+
bem duh,eval
/exec
Não ia deixar você se safar com issoNúmeros, eles podem ser mais úteis do que você pensa
Literais de string
len
=
, Sem atribuir variáveis>
,<
,==
. . . Eu deixei você sem comparações*
,-
,/
,%
,^
,|
,>>
,<<
Os únicos operadores disponíveis são~
e&
__foo__
, Nenhum desses métodos sofisticados de sublinhado duplo é permitido.Minha solução
Então, agora que o xnor o quebrou de uma maneira que estou suficientemente satisfeito, vou revelar minha solução
Surpresa, surpresa, é uma pilha enorme de bobagens. Em vez de quebrar isso, vou passar pelo processo de como fiz isso.
Comecei com um algoritmo de adição bastante padrão
Então eu usei um truque bit a bit para representar
^
com|
,&
,~
.Eu usei outro truque bit a bit para se livrar do
|
Agora tudo o que resta é o
<<
, não deve ser muito difícil, certo? Bem, prepare-se para um passeio esburacado. Para substituir o deslocamento de bits, usei cadeias para acrescentar um zero ao final de sua representação bináriaIsso tem alguns problemas, mas o principal está usando adição , então eu trabalhei com isso usando um formato
Não temos permissão para usar bin, então usei a formatação de string para converter em binário.
Como os literais de string são proibidos, eu tenho que construir o string
{0:b}0
com partes feitas com tiquetaques traseiros ejoin
elas juntas.A string vazia é bem fácil, você pode simplesmente fazer
Os zeros eram
e
{:}
todos foram retirados de dicionários.b
parece bastante difícil de obter, não é no nosso conjunto de caracteres, então como é que vamos obter um objeto que tem umb
em suarepr
? Bem, aqui está como: Quando você usarepr
uma função interna, obtém algo que se parece comE é de onde conseguiremos o nosso
b
.Agora tudo o que resta são números, eu só preciso de -1, 0, 1 e 2, e aqui está como os representei:
2 poderia ser um byte mais curto, pois
com base nas sugestões do @ Blender nos comentários, mas não pensei nisso até depois do fato.
Então, substituímos esses números em
E isso é o crack.
fonte
C (gcc) Rachado!
Experimente online!
Entrada de STDIN e saída para STDOUT.
Isso é executado sem erros. Hahaha, isso é muito ruim. Eu só testei no gcc do TIO. Normalmente, você deve anexar seu código após este trecho para que ele funcione :) O comentário é ruim, não o escute.
Testado em
gcc (GCC) 6.3.1 20161221 (Red Hat 6.3.1-1)
. Deve funcionar em qualquer sistema Linux.Solução original
fonte
__asm__
e você tem muitas funções para escolher :) não pense que C e C ++ são bons inimigos aqui.C (GCC no Linux) (quebrado)
Em vez de usar técnicas tolas de sandbox de leitura de arquivos, fazemos da maneira correta - com a lista de permissões da SECCOMP!
Sua tarefa: implementar adição com entrada de STDIN e saída para STDOUT.
Experimente online!
WTF é isso !?
Para ajudá-lo em sua tarefa insuperável, explicarei o que esse código faz.
__attribute__ ((constructor(0)))
garante que as
função seja executada primeiro. A função fecha todos os descritores de arquivos abertos para STDIN, STDOUT e STDERR. Em seguida, o programa se restringe a uma lista de permissões SECCOMP estrita, que limita as chamadas do sistema ao seguinte:Portanto, você não pode abrir novos arquivos (ou basicamente fazer qualquer coisa). Em seguida, chegamos ao main e chamamos seu código, muito bem envolvido na
sandbox
função.O
syscall(SYS_exit, EXIT_SUCCESS);
final é apenas para garantir que o programa saia corretamente - por padrão, o GCC sairá com oexit_group(2)
que não é permitido pela lista de permissões da SECCOMP. Essa função de saída é chamada após a execução do seu código.Portanto, você não possui descritores de arquivos abertos e não pode abrir nada de novo. Impossível, certo? ;)
fonte
Haskell , rachado por Ben
Experimente online! Este deve ser um programa completo que lê dois números de stdin e gera a soma para stdout.
Cada programa completo inicia executando a
main
função, mas aqui semain
chama e causa um loop infinito. Para piorar a situação, um comentário de linha é iniciado--
diretamente atrás da chamada recursiva para evitar alterá-la para, por exemplo,main2
e depois definir isso para fazer a soma.Solução pretendida:
Experimente online!
--
inicia um comentário de linha, a menos que ele também possa ser analisado como parte de um operador. (O realce da sintaxe parece desconhecer esse fato.)--$
É um operador de infixo válido que assumemain
como primeiro argumento e algum segundo argumento fictício()
. Em seguida, é definido para ignorar os dois argumentos e executar a tarefa necessária.fonte
Montagem em modo real de 16 bits x86 ( rachada )
Fácil se você souber o truque.
fonte
or [bp], 256
. É inválido Isso é suposto seror WORD PTR [bp], 256
?)hlt
instrução (anel 0) implique fortemente que esse não é o modo protegido.Your submission must contain enough information before being revealed to be reproducible after being revealed
Javascript, Rachado
Esse desafio se baseia no de Grant Davis , mas corrige a solução que ele tinha em mente (que cria um iframe e usa o iframe
window
). A solução é executada no console javascript no Chromeabout:blank page
e leva doisinput()
segundos, os soma econsole.log
o resultado. Coloque seu código depois:Primeiro, espancar
prompt
econsole
e definir o atalhod
. Em seguida, criamos um observador de mutações com um retorno de chamada que remove todos os destinos mutados. Definimos esse observador de mutação para observar o documento, notificarchildList
esubtree
modificar. Em vez do literaltrue
, usamos nosso atalho para o valor verdadeirodocument
(a especificação não permite isso, mas o chrome sim).Depois de postar isso, percebi um clobber muito mais elegante. Minha solução pretendida ainda funciona, mas o crack publicado não:
fonte
Perl 5, quebrado por Ilmari Karonen
A entrada é recebida em linhas separadas
STDIN
e a saída é impressaSTDOUT
.Todo o código segue o
__DATA__
marcador. Isso usa um método semelhante à solução do @ WheatWizard, pois o código é analisado e os caracteres inutilizáveis são removidos.Isso foi testado nas versões 5.8, 5.10 e 5.16 e não requer sinalizadores de linha de comando.
Experimente online!
fonte
STDIN
com caracteres em linhas separadas eSTDOUT
. Vou adicionar isso ao corpo principal.Python 3, quebrado pelo zbw
Todos os módulos foram excluídos, o que significa que não há recursos internos disponíveis e muito mais pode ser feito. Saída para STDOUT, entrada de STDIN. Esta é a segunda iteração desta resposta depois que a anterior foi interrompida por uma falha trivial ao adicionar uma declaração de interrupção.
fonte
APL (ngn-apl) , quebrado por ngn
Feito em cooperação com meu colega Marshall .
Entrada através de argumentos esquerdo e direito para
+
. Ou seja, seu objetivo é inserir o código após o seguinte, para que sua última linha leia⎕←3+2
e5
saia para STDOUT.Experimente online!
Funciona definindo todas as funções úteis para as
{}
quais um ou dois argumentos e retorna uma lista numérica vazia. Também define⍣
apenas para compor funções.Rachadura
⍺⍵1/0
replicar 0 pelo argumento da esquerda e o argumento da direita e 1⍋
obter os índices que classificariam isso (já que todos os elementos são zero, fornece 0 1 2… (a + b)⌈/
o valor máximo (a + b)fonte
+
usando apenas APL puro e sem truques sujos.Python 2 , Rachado
Esta é a segunda iteração de uma resposta que foi quebrada uma vez pelo @HyperNuetrino usando um método que eu não esperava. Eu já o corrigi, então espero que as únicas soluções restantes tenham que obedecer às restrições que pretendi.
Implementa a adição como uma função nomeada
Experimente online!
fonte
u
, mas estou preso sem ele.u
?.count
. Posso obter uma string contanto que a saída desejada, mas não tenho como medir seu comprimento.__import__('sys').setrecursionlimit(100)
... e nada foi corrigido. Eu realmente não tenho vontade de publicá-lo no tópico do ladrão, parece trapaça. Experimente onlineJava 8, Rachado por @ OlivierGrégoire
Aqui está a minha tentativa. Basicamente, a idéia é sobrecarregar todos os namespaces que você pode usar para gerar (e refletir, espero). A saída é destinada ao sdout (System.out).
A lista negra é normalmente uma abordagem pior do que a lista de permissões, por isso tenho certeza de que é apenas uma questão de tempo até que alguém tenha uma abordagem que eu não considerei.
fonte
class String{}
após o teste sem perceber que ele iria nocautearmain(String[] ...)
. Ele deve funcionar agoraint sum = 0; new Exception("" + sum) { public void printStackTrace() { ClassLoader cl = ClassLoader.getSystemClassLoader(); try { printStackTrace(new PrintStream((PrintStream)cl.loadClass("java.lang.System").getDeclaredField("out").get(null))); } catch (Exception e){} } }.printStackTrace();
cQuents, quebrado por Mayube
Isso deve ser bastante fácil, mas você nunca sabe.
O "problema" é que, sem
C
no seu código, você tem um erro.Solução da Mayube:
Cada item na sequência é a primeira entrada mais a segunda vez a terceira (aka 1)
Minhas soluções:
A sequência alterna entre a primeira entrada mais a segunda entrada e a terceira entrada (1). O primeiro item no segundo é
A+B
.Semelhante à solução do Mayube - em vez de multiplicar
B*C
, apenas adicionaC
e subtrai.Experimente online!
Explicação
Atualmente, este programa gera
1
, uma vez que, sem entrada do usuário, a primeira entrada é a primeira1
na entrada padrão (#
).fonte
Default input is combined with user input to form the total input, which must align with the expected input (which is based on the highest input requested by the Sequence Definition)
A,B,C,D,E
no código. Por exemplo, se em algum momento você tiver a variávelD
em seu programa, o analisador espera que haja 4 entradas, mas se houver também umE
, o analisador espera que existam 5 entradas. Não pode haver menos do que o valor esperado. No entanto, sempre há uma última entrada opcionaln
, que é usada de maneiras diferentes por modos diferentes.A
, portanto ele procura uma entrada. Como existem dois, ambos provenientes dos#
quais especifica a entrada padrão, ele usa o primeiro comoA
valor e o segundo comon
.BC
, A seria a primeira entrada, B seria a segunda, C seria 1 e n seria a segunda 1?#1,1
(sem barra), seria: A como o primeiro 1, B como o segundo 1, C como a primeira entrada en como a segunda entrada. Também pode fazer#1|1
, onde A é o primeiro 1, B é, é a primeira entrada, C representa a segunda entrada, e n é o segundo 1.Node.JS versão 7.3.0 (Rachado por Dom Hastings)
Coloque o segundo bloco de código após o primeiro.
Isenção de responsabilidade: o segundo bloco de código não funcionará por si só (sem ser colocado após o primeiro). Se isso não for permitido, no entanto, eu posso modificar o segundo trecho.
Este é um programa completo. Saída é
process.stdout
(STDOUT), entrada éprocess.argv
(argumentos de linha de comando)Este é o meu primeiro policial e ladrão, espero que este seja um bom desafio :)
Experimente online!
O desafio explicou
Gera uma variável aleatória
n
de 0 a 1e7. Se você chamar de gravação com o correton
, não imprime nada, mas definel
como 0, que "desbloqueia" a função de gravação, permitindo imprimir qualquer coisa. Se você tentar chamar write com uma não-string, o enviará para um loop infinito. Se você tentar chamar a gravação com algo diferente do correto,n
enquanto a gravação estiver "bloqueada", o enviará para um loop infinito para evitar adivinhações.A solução pretendida
Ignora o tipo de que aparentemente verifica apenas as strings usando um Symbol, que também começa com s. Isso gera um erro na função resultante da chamada de avaliação, porque você não pode adicionar a string "f" a um símbolo. Nós capturamos o erro e usamos regex para recuperar
n
o rastreamento de pilha, onde está o nome da função. Em seguida, tentamos escrevern
que não imprime nada, mas define a variável "lock"l
como 0 para "desbloquear" a função de gravação. Agora que a função de gravação está desbloqueada, apenas imprimimos a soma.fonte
RProgN2 , rachado por Arnold Palmer
Escreve sobre todos os operadores matemáticos, sem nenhuma maneira de restaurá-los. Em particular, ele os substitui por uma função que remove os dois principais itens da pilha.
Experimente online!
Solução original
Experimente online!
fonte
²
símbolo faz. Quer me esclarecer?[[
neste caso, e envolve-los em um @ArnoldPalmer função«»
cria variáveis locais, em vez de estragar as globais, teria sido super útil.Haskell,
161144 bytes, Rachado por BlackCapEntrada para STDIN, saída para STDERR. Adicione ao final do programa.
Edit: Pretende ser compilado sem argumentos extras do GHC, apenas o normal
ghc --make prog.hs
.Editado novamente para diminuir a contagem de bytes.
Diverta-se!
fonte
main = do x <- readLn :: IO Integer; y <- readLn; print $ x + y
main
função esteja no móduloMain
quando nenhum-main-is
sinalizador for fornecido.Mascarpone , rachado por Ilmari Karonen
A entrada é um número de igreja no stdio, usando
i
para incremento ez
para zero. Por exemplo, 2 + 3 seria:Com uma nova linha à direita, a
saída deve ser um número no stdout, no mesmo formato que no stdio. Por exemplo, se a resposta for cinco, você deve gerar:
(mascarpone não tem conceito de números)
Solução pretendida:
Não é imediatamente aparente na documentação, mas, como @IlmariKaronen afirmou em seu crack, os literais de string em Mascarpone são na verdade açúcar sintático para forçar uma sequência de caracteres.
Escrevi deliberadamente comentários
[this]$
para fazer parecer que estou pressionando uma corda e soltando-a imediatamente depois. Um cracker ingênuo pode ter tentado algo como[:,>!]/*
empurrar uma corda, trocá-la com o intérprete e interpretá-la.Também finjo colocar o intérprete que deixei na pilha
$
, mas$
já foi redefinido para um NOP. Você fica com esse intérprete na pilha e precisa carregá-lo durante todo o programa; através de cada caractere de cada string.fonte
C # (.NET Core) rachado por Ilmari Karonen
Também rachado por Joshua .
Lê os dois valores de stdin e grava o resultado em stdout. Testado no Windows com Framework Versão 3, 4.6 e no TIO .
Aqui está o programa completo que eu pretendia.
Experimente online!
fonte
GolfScript , rachado por Dennis
Experimente online!
Afinal, este é um desafio do código-golfe , por que não experimentar o GolfScript?
Uma solução válida deve ser um trecho que leia dois números inteiros da pilha, adicione-os e retorne o resultado na pilha. O problema é que ele ainda deve funcionar mesmo depois que o código acima redefiniu quase todos os operadores internos do GolfScript para não fazer absolutamente nada. Pelo menos eu deixei
;
intocado, para que você ainda possa retirar valores da pilha. ;-) Seu código deve funcionar no interpretador GolfScript padrão, conforme implementado, por exemplo, no TIO (veja o link acima).A solução de Dennis , como a minha , baseia-se no recurso raramente usado do GolfScript, que permite o código Ruby interpolado em strings com aspas duplas. Usamos esse recurso para definir um novo operador de adição que funcione exatamente como o
+
operador interno e depois chamá-lo.(Uma razão pela qual o recurso de interpolação Ruby no GolfScript é tão raramente usado é que, desajeitadamente, o código Ruby interpolado é executado durante a análise e sua saída é armazenada em cache pelo intérprete GolfScript. Portanto, se você tem uma string com código Ruby interpolado em um loop, o código será executado apenas uma vez antes que o programa real seja iniciado e, em seguida, sempre retorne o mesmo valor em todas as iterações do loop.Você pode contornar isso usando a string eval para adiar a análise, mas isso torna a sintaxe já estranha ainda mais feio e detalhado, e de qualquer forma, para esse desafio, desativei também o operador eval.No
~
entanto, acontece que a definição de novos operadores GolfScript internos é uma coisa que esse recurso realmente faz muito bem e de forma limpa.)fonte
"#{var'_','gpush a+b'.cc2}";_
, que funciona exatamente como a sua, exceto por ser alguns bytes mais curta.Node.js v8.2.0, rachado por Dom Hastings
Você deve implementar a
logic
função. Entrada são os argumentos fornecidos (a partir de stdin), saída é o que a sua função retorna (é impressa em stdout).Minha igreja de código codifica os números da entrada. O restante do código existe apenas para intimidá-lo.
A função mess faz alguns truques para implementar a notação sem ponto (
a . b == dot (a) (b)
), que eu principalmente uso para adicionar. id .
a lugares aleatórios, o que não faz nada, mas confunde qualquer pessoa não familiarizada com a programação funcional.A transformação aplicada aos números antes de eu passá-los para a
logic
função éx+1
ey-1
, que soma 0, então é outro NOP a ser adicionado à obscuridade.A solução pretendida foi:
fonte
Inform 7 , rachado por ppperry
A entrada deve ser digitada pelo player como um comando interativo, por exemplo,
add 17 to 25
ousum 17 25
. Você pode escolher a forma exata do comando que deve ser digitado, desde que inclua dois números. A soma dos números (por exemplo42
) deve ser impressa em resposta ao comando.O desafio, é claro, é fazer isso enquanto toda a atividade "ler um comando" é substituída por uma não-operação. Provavelmente existem várias maneiras de resolver esse problema, mas pelo menos deve exigir alguma familiaridade com o idioma. O que eu inventei é realmente bastante simples, se um pouco inesperado.
Testei minha solução no GNOME Inform 7 IDE, versão 6L38 , no Ubuntu Linux. A solução pretendida funciona nos back-ends Glulx e Z-machine e deve funcionar em outras versões recentes do Inform 7. Observe que (sem uma solução alternativa adequada) o código acima fará com que o intérprete fique ocupado quando tentar ler um comando; o intérprete da Z-machine parece ficar completamente sem resposta quando isso acontece e não pode ser parado no IDE, por isso recomendo usar o Glulx para teste.
fonte
CPython 3 (novamente), quebrado por Sisyphus
Você pode fazer o que quiser - desde que não seja implementado em C. Isso significa que não
print
, nãoinput
- todos irão atingir a_(1)
linha e terminar. Entrada de STDIN com os números em duas linhas separadas, saída para STDOUT. Gostaria de saber quanto tempo isso vai durar ... Demorei um pouco para encontrar o segundo trecho de trabalho depois de inventar esse truque incapacitante. A especificação explícita do Cpython para evitar falhas com base em alguma implementação alternativa do sys.setprofile.fonte
functools
?Java 8 ( Rachado )
Segunda tentativa. Dessa vez, investi dois minutos de testes.
A maioria das coisas deve ser coberta.
fonte
Python 2 rachado
Experimente online!
Eu prefácio isso dizendo que esta resposta é uma jogada idiota, pretendida como uma resposta de limite inferior.
Inspirado pelas respostas do Wheat Wizard e HyperNeutrino .
O trecho lê o arquivo de origem e se recusa a continuar se o último pedaço de código separado por espaço em branco não for compartilhado
e6400dd63733d10ec042e3c28033cfa85e1d25fbef80020810c354d7c942e843
.EDIT : Editado ligeiramente em resposta a este comentário . O problema principal não muda, qualquer tentativa de crack não é invalidada.
fonte
This code is not allowed to crash or exit.
Java 8 rachado por @ OlivierGrégoire
Eu tentei dificultar o máximo possível! :) E, diferentemente da outra resposta Java até agora, você terá que seguir as regras exatas do desafio, colocando-o após todo esse trecho (para que não, você não coloque seu código no
public static void main(String[] args)
método, coloque-o depois de toda a aula. :) Boa sorte!Adicionei comentários para mostrar o que está sendo restrito.
( Inspirado nesta postagem, que é menos restritiva e passível de beatificação com a mesma abordagem que eu poderia usar para minha resposta. )
Experimente aqui. (ideone.com em vez de TIO, pois parece não funcionar lá. Os testes foram feitos no Eclipse IDE, mas minha solução pretendida funcionará se você usar ideone.com)
fonte
Geléia: CRACKED
Isso será incrivelmente fácil em comparação com a incrível resposta em Python do Wheat Wizard, mas aqui vamos nós: P
O sha256 hexadigesto da minha solução alternativa, incluindo o primeiro snippet, é
cfeb1e193ad77f66f039c0d6a792a3e4c311490f6412698e019ca1fae10c0e0a
.Nota
Você pode não ter nenhuma linha nova no código, exceto nas seqüências de caracteres, caso contrário, esse código nem será executado, o que anula o objetivo desse desafio.
Rachado por DJMcMayhem
Para ser justo, isso usa uma nova linha, então eu gostaria de ver uma solução que não use uma nova linha.
Também uma solução de Jonathan Allan
Isso não usa uma nova linha, por isso foi quebrada. : P
Minha solução é esta:
O primeiro trecho exclui apenas átomos de caractere único, o que significa que o Python eval ainda funciona :)))
fonte
JavaScript, Rachado
Entrada:
prompt()
duas vezesResultado:
console.log()
Minha solução não funciona no jsfiddle. Funciona na página about: blank com o console JS do Google chrome.
Minha solução:
Explicação:
Eu removi o prompt e o console, definindo-os como 0.
Na minha solução, crio um iframe, que cria uma sandbox, e uma nova instância da janela em que o prompt e o console funcionam corretamente.
fonte
Java, Rachado
Isso
deve sermuito fácil de quebrar.Solução pretendida
Experimente online
fonte
java.io
.. Mas você tem a solução destina-se de qualquer maneira ..