Será que vai parar? (Ladrões)

46

Este é o fio dos ladrões. A discussão dos policiais está aqui .

Seu desafio é quebrar a submissão de um policial, encontrando uma entrada que a interrompa. Você não precisa descobrir o porquê, ou todas as entradas que fazem com que pare se houver mais de uma, ou a entrada que o policial pretendeu, apenas uma entrada fará.

Depois de quebrar uma submissão, publique um link para ela em um comentário ou edite para a publicação da polícia. Você também pode sinalizar seu envio para um mod para editá-lo na postagem do policial. Além disso, poste a entrada usada e um link para a postagem do policial em uma resposta neste tópico. O assaltante que conseguir mais envios vence.

Várias pessoas podem postar rachaduras no mesmo envio de policial, desde que sejam diferentes.

(Se o SE converteu sua resposta duplicada em um comentário, você pode votar nesta solicitação de recurso )


Procurando envios sem rachaduras?

fetch("https://api.stackexchange.com/2.2/questions/135363/answers?order=desc&sort=activity&site=codegolf&filter=!.Fjs-H6J36vlFcdkRGfButLhYEngU&key=kAc8QIHB*IqJDUFcjEF1KA((&pagesize=100").then(x=>x.json()).then(data=>{var res = data.items.filter(i=>!i.body_markdown.toLowerCase().includes("cracked")).map(x=>{const matched = /^ ?##? ?(?:(?:(?:\[|<a href ?= ?".*?">)([^\]]+)(?:\]|<\/a>)(?:[\(\[][a-z0-9/:\.]+[\]\)])?)|([^, ]+)).*[^\d](\d+) ?\[?(?:(?:byte|block|codel)s?)(?:\](?:\(.+\))?)? ?(?:\(?(?!no[nt][ -]competing)\)?)?/gim.exec(x.body_markdown);if(!matched){return;}return {link: x.link, lang: matched[1] || matched[2], owner: x.owner}}).filter(Boolean).forEach(ans=>{var tr = document.createElement("tr");var add = (lang, link)=>{var td = document.createElement("td");var a = document.createElement("a");a.innerText = lang;a.href = link;td.appendChild(a);tr.appendChild(td);};add(ans.lang, ans.link);add(ans.owner.display_name, ans.owner.link);document.querySelector("tbody").appendChild(tr);});});
<html><body><h1>Uncracked Submissions</h1><table><thead><tr><th>Language</th><th>Author</th></tr></thead><tbody></tbody></table></body></html>

programmer5000
fonte
2
Diferente significa entradas diferentes (por exemplo, todas as entradas terminadas em 2 quebram a postagem do policial - você pode pessoas diferentes postar números diferentes terminando em 2?) Ou famílias diferentes de entradas ou tipos diferentes de entradas?
Stephen
1
Várias pessoas podem postar rachaduras no mesmo envio de policial ... Defina diferente .
Dennis19 /
@NoOneIsHere codegolf.meta.stackexchange.com/q/13437/58826
programmer5000

Respostas:

49

Malbolge, Maçaneta

Experimente online (Obrigado Dennis !)

Entrada para Windows: F_⌠1234567890

Entrada no sistema baseado em Linux usando ISO-8559-1: F_ô1234567890

O coração de como o programa Malbolge funcionou é que ele dependia de um comportamento do intérprete Malbolge que causa um loop infinito se encontrar alguma instrução que não esteja entre 33 e 126. O programa foi construído de forma que sua entrada permita modificar uma única instrução.

Modifiquei o intérprete para despejar o estado da memória do programa no início da execução e também produzir código fonte 'normalizado', que assume a forma de uma lista de códigos op que serão executados durante a execução do programa. Com essas informações, você pode (lentamente) determinar que, embora o programa tenha recebido 13 entradas, apenas a 1ª e a 3ª entradas realmente são importantes.

Examinando o código normalizado e o despejo de memória (e um toque na ajuda do depurador), criei o seguinte:

a = op (entrada 1, 29524)

b = op (entrada 3, a)

c = op (486, b)

d = op (c, 37)

e = d / 4 + d% 3 * 3 ^ 9

e deve estar entre 33 e 126

Onde opestá o chamado tritwise "op" descrito na especificação. Usando essas informações, você pode escrever um programa simples que repete as entradas possíveis (0 a 255) e encontra todas as soluções que atendem aos critérios acima. Eu encontrei 2219 soluções possíveis, algumas das quais provavelmente não serão soluções funcionais (você não pode inserir os caracteres necessários). Especificamente, as entradas acima são baseadas na solução:

(Input 1 = 70, Input 3 = 244)

KBRON111
fonte
Não tenho o representante para comentar rachou a publicação da polícia. Alguém poderia fazer isso por mim?
KBRON111
4
Bem-vindo ao PPCG! Bom trabalho! Eu acho que com esse tipo de crack, em breve você vai ter rep suficiente :)
Stephen
1
Eu comentei. E sim, excelente trabalho; Eu meio que esperava que Malbolge durasse a semana!
Veedrac
6
Bom trabalho! O TIO usa UTF-8, mas envolvendo-o no Bash, seu crack ainda pode ser verificado. tio.run/… Você parece não precisar de nada F_ô, a propósito.
Dennis
1
Agora posso dormir novamente
Juan Tonina
16

JavaScript (no navegador)

document.all

Isso é falso, surpreendentemente

Edit: por que é document.allfalso ?

Juan Tonina
fonte
4
Estou sem palavras.
Dennis
3
Aahh ... javascript, onde tudo é estranho
Juan Tonina
1
Sim! Essa é a única resposta correta aqui!
tsh
13

JS (ES6), Juan Tonina

+0,-0

Demorou um pouco Object.ispara procurar. Basicamente, +0 === -0uma vez que os ===verifica como números e 0é finito, mas Object.is+0e -0como objetos diferentes. Policial muito esperto :)

Experimente online!

Stephen
fonte
Ninja entendeu enquanto eu estava logando. Atire.
user3033745
Porra, resolvi mais rápido do que o tempo que passei pensando no código: D
Juan Tonina
11

Python, Siphor

class A:
    i = True
    def __eq__(self, a):
        self.i = not self.i
        return self.i

a = A()
f(a)

Apenas redefinimos a igualdade para se comportar exatamente como necessário para que o programa seja encerrado.

g.rocket
fonte
Embora eu suponho que eu poderia ter definido __eq__a raise...
g.rocket
Eu estava prestes a enviar apenas retornando 0: p
Jonathan Allan
@JonathanAllan Como isso funciona?
g.rocket
1
Com certeza apenas class A:__eq__=lambda s,o:0e f(A())faz o trabalho.
Jonathan Allan
1
Ah sim, preciso da negação> _ <
Jonathan Allan
8

PHP, Sísifo

(-0[0)> deal with it=1

A função parse_str altera os espaços e outros caracteres para sublinhados. Se você colocar um [usado para delimitador de matriz sem fechar, ele será alterado para um sublinhado, mas terá o efeito de não converter os seguintes espaços (não sei por que).

Experimente online!

Vicente Gallur Valero
fonte
WTF ?! Isso é loucura ...
Veedrac
7

JavaScript (Node.js), Adnan

[]e []parece funcionar. Eu tentei um monte deles null, incluindo undefined, NaN...

[] >= [] && [] <= [] && [] != [] avalia como verdadeiro.

Moral da história: o JavaScript é estranho .

Experimente online!

totalmente humano
fonte
Sim, matrizes são apenas objetos.
programmer5000
E os objetos são convertidos em cadeias para esses tipos de comparações.
Conor O'Brien
7

JavaScript (ES7), Arnauld

Padrão

"8e7" é solução

var crack_me = (x=0)=>{for(;~x/x.length**3!=-2962963;);}

var key = "8e7"

crack_me(key)
console.log("stopped :)")

Hack

Não há necessidade de calcular esse número, podemos redefinir a lengthpropriedade

Isso define ~x/x.length**3!=-2962963comofalse

var crack_me = (x=0)=>{for(;~x/x.length**3!=-2962963;);}

var key = {toString:()=>"2962962",length:"1"}

crack_me(key)
console.log("stopped :)")

Prioridade dos operadores

~ bit a bit não é o primeiro

** exponentiation segundo

/ division terceiro

Евгений Новиков
fonte
6

Bash, Veedrac

LD_TRACE_LOADED_OBJECTS

Experimente online!

Na página de ld.so(8)manual:

LD_TRACE_LOADED_OBJECTS

Se definido (com qualquer valor), faz com que o programa liste suas dependências dinâmicas, como se executadas ldd(1), em vez de executadas normalmente.

Sísifo
fonte
Eu pensei que isso iria durar mais tempo! Excelente trabalho.
Veedrac
1
@Veedrac: Eu acho que desde que você especificou o bash, é improvável que você encontre um link estaticamente (por exemplo, busybox?) /bin/yes, Mas isso é possível, nesse caso, esse env var seria ignorado.
Peter Cordes
6

Jung , Mathematica, Jung

Unevaluated@Throw@"hammertime"

Não há pista se essa é a solução pretendida, mas ela passa em uma expressão que não é avaliada até ser referenciada como #dentro da função, o que fará com que ele retorne da função imediatamente sem fazer nenhuma avaliação adicional. Você pode ver que a função é realmente chamada (em vez de apenas lançar a exceção antes mesmo de invocar a função) alterando a função para:

#0[Print@"stop";#;$IterationLimit=∞]&

O que realmente imprimirá o stopantes de gerar o erro.

Martin Ender
fonte
Bingo! (Eu estava realmente indo para Unevaluated[Abort[]], mas mesma coisa.)
JungHwan Min
5

Retina , PunPun1000

11111

Experimente online!

Qualquer entrada com n 1 s onde a soma dos divisores de n + 1 é igual a n + 1 deve funcionar.

Kritixi Lithos
fonte
Bom ver alguém obter a solução destina
PunPun1000
5

Rubi

exit

sem nova linha. 3.send('exit')certamente não é igual a 5, mas executa Kernel#exit:

Inicia o encerramento do script Ruby, levantando a exceção SystemExit

É possível chamar exitem 3 causa :

O módulo Kernel é incluído pela classe Object, portanto seus métodos estão disponíveis em todos os objetos Ruby [como métodos privados].

abort também funciona:

Encerre a execução imediatamente, efetivamente, chamando Kernel.exit (false). Se a mensagem for fornecida, ela será gravada no STDERR antes de terminar.

Eric Duminil
fonte
5

JavaScript (Node.js) , programador5000

Já estou rachado, mas o meu é um pouco diferente :) Não tenha representante suficiente para comentar na polícia. Também fique à vontade para editar para corrigir a formatação, meu primeiro post aqui.

Principalmente eu defino __proto__igual a uma função que lança. Retirado de olhar para a página Mozilla para proto. (Desculpe, representante baixo, não é possível postar um link.)

x = {}
let No = function () { throw 'halted' }
x.__proto__ = new No()
f = x=>{while(x.__proto__);}

Experimente online!

EDIT: Tenho algum representante, então aqui está o link: Mozilla__proto__

Rahmani Haumed
fonte
Eu comentei o policial para você.
24417 Stephen
1
Obrigado! Também obrigado a todos pelos altos, acho que posso comentar agora!
Haumed Rahmani
1
Bem-vindo ao PPCG: D
Conor O'Brien
5

Jarko Dubbeldam R

function(x)if(is.list(x))return(1)

Contribuindo pela primeira vez com algo, lembre-se de quaisquer erros que cometi no formato.

Certamente isso é válido. Apenas uma reorganização de is.list (), certo?

CriminallyVulgar
fonte
Aliás, eu não tenho o representante para comentar sobre o original, para que uma mão seja apreciada se for válida.
CriminallyVulgar
Comentou para você.
TheLethalCoder
Não é a solução pretendida, mas funciona. Bom trabalho.
JAD 27/07
5

Javascript, programador5000

Comprimento máximo da string

Usa uma string com um comprimento menor que o suportado pelo mecanismo. Ao adicionar "h"a essa cadeia, um erro é gerado. Experimente online!

function getAlmostMaxLenStr() {
  var prevBases = [];
  var base = "a";
  try {
    while(true) {
      prevBases.push(base);
      base += base;
    }
  } catch(e) {}
  for (var i = prevBases.length-1; i>=0; --i) {
    try {
      base += prevBases[i];
    } catch (e) {}
  }
  return base;
}
f(getAlmostMaxLenStr());

Bloco de origem cruzada

Fortemente inspirado na resposta de @ jadkik94 , mas funciona em qualquer lugar. Cria um iframe de origem cruzada e passa o .contentWindowiframe do mesmo. Isso falha quando a função tenta usar o valor devido à segurança de origem cruzada.

let f=x=>{
  try {
    console.log(x+"h"); // we don't want to lock up your browser, do we ;)
  } catch (e) { console.log("Halted!\n",e); }
}
let iframe=document.createElement("iframe");
const url = location.host.indexOf("google") === -1 ? "https://google.com" : "https://stackexchange.com";
iframe.src=url;
iframe.onload=a=>f(iframe.contentWindow);
document.body.appendChild(iframe);

Valor primitivo

Variante das .toString()respostas - isso apenas usa toPrimitive. Ele retorna um objeto como o valor primitivo, que o Javascript não sabe como manipular (para gerar um erro). Experimente online!

f({
  [Symbol.toPrimitive](){return {}}
});
Birjolaxew
fonte
Bom trabalho, mas ainda não a solução pretendida! Muito esperto!
programmer5000
4

Node.js, Adnan

{}e {}ou quaisquer 2 objetos são as duas entradas. Eu nem entendo como isso funciona.

Aqui está a incrível lógica de comparação de objetos de JS:

console.log({} == {});
console.log({} === {});
console.log({} > {});
console.log({} < {});
console.log(!!{});

console.log({} >= {});
console.log({} <= {});

programmer5000
fonte
Sim, que era a solução destinada :)
Adnan
4

JavaScript (Nó Babel) , Conor O'Brien

(Repita, coloque policiais acidentalmente.) Não tenho certeza do que se pretendia, mas decimais positivos que não são enormes parecem funcionar.

Também acho que ainda não posso comentar na polícia.

f(0.1)
console.log('done')

Experimente online!

Rahmani Haumed
fonte
Também esqueci disso, bom.
Conor O'Brien
4

Javascript (NOT node.js) , programmer5000

Isso não pode ser adicionado porque cria um objeto que não possui toString porque um novo Setnão possui protótipos inerentes de Object.

entrada:

new Set()

Experimente online!

Grant Davis
fonte
Esta foi provavelmente a solução destina-se, eu vou manter isso no saco da minha cabeça a partir de agora: P
Stephen
Desculpe, isso não parece funcionar para mim? Experimente online!
Haumed Rahmani
@HaumedRahmani adicionou um botão try online. Eu usei macaco-aranha, não babel.
Grant Davis
Não é a solução pretendida, mas bom trabalho!
programmer5000
4

Bash 4.2, Dennis

PATH=1

Claramente, não é a solução pretendida, porque também funciona no bash mais recente.

Experimente online.

Veedrac
fonte
4

Python 2, Foon

__import__("os")._exit(0)

O que diz na lata, basicamente.

Experimente online.

Veedrac
fonte
Curiosamente, no TIO isso acaba com o tempo; no Windows (especificamente com winpty python inputbad.py e colando na linha), ele sai conforme o desejado ... e sim, não é de surpreender que meu schtict estivesse explorando o bit "entrada sob Python 2 faz avaliação sob o capô"
Foon
@Foon Hmm, está funcionando bem no TIO para mim. Veja o link na resposta.
Veedrac
Estranho ... Eu devo ter batido o jogo e, em seguida, digitado entrada no meu link TIO e não percebeu que
Foon
Eu tenho certeza que isso rachaduras cada submissão python ..
enderland
@enderland Somente se eles avaliarem sua opinião, o que a maioria deles não faz.
Veedrac
4

Python 3, Syphor

Isso foi divertido. Precisamos fazer a type(x) != strverificação passar, por isso precisamos controlar o valor de retorno de type(). Temos que substituir o __class__atributo e substituí-lo por um objeto personalizado, que se estende type, que __ne__substitui o método por um que sempre retorna falso. Isso faz com que seja aprovada na verificação de tipo, mas a pesquisa falhará porque onão é um str.

class m(type):
    def __ne__(a,b):
        return False
class c:pass
o=c()
o.__class__=m("",(c,),{})
f(o)
ebopalisesy
fonte
Bem vindo ao site! :)
DJMcMayhem
4

C #, TheLethalCoder

System.Nullable`1[[System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]

Ou qualquer outra classe anulável.

Luc
fonte
3

Retina

Uma nova linha seguida de uma 1obra. Eu encontrei imediatamente.


1

Experimente online

mbomb007
fonte
Ninja'd por um minuto
Kritixi Lithos
@ Cowsquack A pergunta diz que várias rachaduras para o mesmo posto policial são permitidas.
mbomb007
Eu sabia que deveria ter removido novas linhas a partir da entrada como um primeiro passo
PunPun1000
3

JS (ES6)

"   "

Qualquer caractere com um código menor que 10 deve funcionar; Eu usei um tabpersonagem acima, que SE converte em espaços.

Shaggy
fonte
Ninja'd
programmer5000
Desculpe :( mais eu acho que você precisa de aspas em torno dele para que seja uma string
Stephen
@ programmer5000, então eu vejo :(
Shaggy
Não tem problema, @StepHen; natureza do jogo. Tomei as aspas para ser implícita, mas eu vou editá-las no.
Shaggy
@Shaggy Eu não sei o que a decisão é, mas f(<tab>)é válido sintaxe (entrada vazia) e nós teríamos que diferenciar f(1)e f("1")de qualquer maneira
Stephen
3

JavaScript (ES6), programmer5000

"\0"

Experimente online!

A condição era !x||x>="\n". Qualquer caractere único em uma tabela ASCII com um código menor que \nirá funcionar.

Stephen
fonte
Sim, eu pensei que era isso, não tinha certeza ...
tuskiomi
3

cQuents, Passo Galinha

Qualquer coisa seguida por um espaço e um número inteiro positivo. O espaço separa as entradas e a entrada extra se torna o número do termo a ser produzido.

Experimente online!

PurkkaKoodari
fonte
Eu estava prestes a postar a 1! Você me ninja'd: /
Mr. Xcoder
@ Mr.Xcoder eu digitei isso no celular, esperando que ninguém iria ninja me: P
PurkkaKoodari
3

MATL , Luis Mendo (não a solução pretendida)

A entrada vazia interrompe o programa e gera o seguinte erro:

input: falha na leitura da entrada do usuário!

Experimente online!

Mr. Xcoder
fonte