¿Se detendrá? (Ladrones)

46

Este es el hilo de los ladrones. El hilo de la policía está aquí .

Su desafío es descifrar el envío de un policía al encontrar una entrada que lo detenga. No tiene que averiguar por qué, o todas las entradas que hacen que se detenga si hay más de una, o la entrada que pretendía el policía, solo una entrada servirá.

Una vez que haya descifrado un envío, publique un enlace en un comentario o edítelo en la publicación del policía. También puede marcar su envío para un mod para editarlo en la publicación del policía. Además, publique la entrada utilizada y un enlace a la publicación del policía en una respuesta en este hilo. El ladrón que descifra la mayor cantidad de envíos gana.

Varias personas pueden publicar grietas en el mismo envío de policía, siempre que sean diferentes.

(Si SE convirtió su respuesta duplicada en un comentario, puede votar esta solicitud de función )


¿Está buscando presentaciones sin descifrar?

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>

programador 5000
fuente
2
¿Significa diferentes entradas diferentes (digamos, todas las entradas que terminan en 2 descifran la publicación del policía, ¿pueden diferentes personas publicar diferentes números que terminan en 2?) O diferentes familias de entradas, o diferentes tipos de entradas?
Stephen
1
Varias personas pueden publicar grietas en el mismo envío de policía ... Defina diferente .
Dennis
@NoOneIsHere codegolf.meta.stackexchange.com/q/13437/58826
programmer5000

Respuestas:

49

Malbolge, pomo de la puerta

Pruébelo en línea (¡Gracias Dennis !)

Entrada para Windows: F_⌠1234567890

Entrada en un sistema basado en Linux usando ISO-8559-1: F_ô1234567890

El núcleo de cómo funcionaba el programa Malbolge es que dependía de un comportamiento del intérprete Malbolge que causa un bucle infinito si encuentra alguna instrucción que no esté entre 33 y 126. El programa fue construido de tal manera que su entrada le permitiría modificar Una sola instrucción.

Modifiqué el intérprete para volcar el estado de la memoria del programa al comienzo de la ejecución y también para producir código fuente 'normalizado' que toma la forma de una lista de códigos operativos que se ejecutarán durante la ejecución del programa. Con esa información, podría (lentamente) determinar que, aunque el programa tomó 13 entradas, solo la primera y la tercera entradas realmente importaron.

Mirando el código normalizado y el volcado de memoria (y un toque de ayuda del depurador) ideé lo siguiente:

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 debe estar entre 33 y 126

¿Dónde opestá el llamado tritwise "op" que se describe en la especificación? Con esta información, puede escribir un programa simple que repita las posibles entradas (0 a 255) y encuentre todas las soluciones que cumplan con los criterios anteriores. Encontré 2219 posibles soluciones, algunas de las cuales probablemente no serán soluciones de trabajo (no puede ingresar los caracteres requeridos). Específicamente, las entradas anteriores se basan en la solución:

(Input 1 = 70, Input 3 = 244)

KBRON111
fuente
No tengo el representante para comentar en la publicación de la policía. ¿Alguien podría hacer eso por mí?
KBRON111
44
Bienvenido a PPCG! ¡Buen trabajo! Creo que con esta grieta, pronto tendrás suficiente representante :)
Stephen
1
Comenté al otro lado. Y sí, excelente trabajo; ¡Casi esperaba que Malbolge durara la semana!
Veedrac
66
¡Buen trabajo! TIO usa UTF-8, pero al envolverlo en Bash, su crack aún se puede verificar. tio.run/… Parece que no necesitas nada más que F_ôpor cierto.
Dennis
1
Ahora puedo dormir de nuevo
Juan Tonina
13

JS (ES6), Juan Tonina

+0,-0

Tomó un poco de mirar Object.ispara encontrar. Básicamente, +0 === -0ya que los ===comprueba como números, y 0es finito, pero Object.isve +0y -0como objetos diferentes. Policía muy inteligente :)

Pruébalo en línea!

Stephen
fuente
Ninja lo consiguió mientras estaba iniciando sesión. Dispara.
user3033745
Maldición, resuelto más rápido que el tiempo que pasé pensando en el 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)

Simplemente redefinimos la igualdad para que se comporte exactamente como se requiere para que el programa finalice.

g. cohete
fuente
Aunque supongo que podría haber definido __eq__que raise...
g.rocket
Estaba a punto de presentarme con solo regresar 0: p
Jonathan Allan
@JonathanAllan ¿Cómo funciona eso?
g.rocket
1
Bastante seguro solo class A:__eq__=lambda s,o:0y f(A())hace el trabajo.
Jonathan Allan
1
Ah, sí, necesito la negación> _ <
Jonathan Allan
8

PHP, Sísifo

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

La función parse_str cambia los espacios y otros caracteres a guiones bajos. Si coloca un [usado para delimitador de matriz sin cerrar, lo cambia a un guión bajo pero tiene el efecto de no traducir los siguientes espacios (no sé por qué).

Pruébalo en línea!

Vicente Gallur Valero
fuente
WTF ?! Eso es una locura ...
Veedrac
7

JavaScript (Node.js), Adnan

[]y []parece funcionar Probé un montón de ellos null, incluyendo undefined, NaN...

[] >= [] && [] <= [] && [] != [] se evalúa como verdadero

Moraleja de la historia: JavaScript es raro .

Pruébalo en línea!

totalmente humano
fuente
Sí, las matrices son solo objetos.
programmer5000
Y los objetos se convierten en cadenas para este tipo de comparaciones.
Conor O'Brien
7

JavaScript (ES7), Arnauld

Estándar

"8e7" es la solución

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

var key = "8e7"

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

Cortar a tajos

No es necesario calcular este número, podemos redefinir la lengthpropiedad

Esto se establece ~x/x.length**3!=-2962963enfalse

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

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

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

Prioridad de los operadores

~ bit a bit no es el primero

** exponentiation segundo

/ division tercero

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

Bash, Veedrac

LD_TRACE_LOADED_OBJECTS

Pruébalo en línea!

Desde la página del ld.so(8)manual:

LD_TRACE_LOADED_OBJECTS

Si se establece (a cualquier valor), hace que el programa enumere sus dependencias dinámicas, como si se ejecutara ldd(1), en lugar de ejecutarse normalmente.

Sísifo
fuente
¡Pensé que esto duraría más! Excelente trabajo.
Veedrac
1
@Veedrac: Supongo que dado que especificó bash, es poco probable que encuentre un enlace estático (por ejemplo, busybox?) /bin/yes, Pero eso es posible, en cuyo caso se ignoraría este entorno.
Peter Cordes
6

Mathematica, JungHwan Min

Unevaluated@Throw@"hammertime"

No tengo ni idea de si esta es la solución prevista, pero pasa una expresión que no se evalúa hasta que se hace referencia a ella como #dentro de la función, lo que hará que vuelva inmediatamente de la función sin realizar ninguna evaluación adicional. Puede ver que la función se llama realmente (en lugar de simplemente lanzar la excepción incluso antes de invocar la función) cambiando la función a:

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

Lo que efectivamente imprimirá stopantes de lanzar el error.

Martin Ender
fuente
¡Bingo! (En realidad iba por Unevaluated[Abort[]], pero lo mismo.)
JungHwan Min
5

Retina , PunPun1000

11111

Pruébalo en línea!

Cualquier entrada con n 1 s donde la suma de los divisores de n + 1 sea ​​igual a n + 1 debería funcionar.

Kritixi Lithos
fuente
Es bueno ver a alguien obtener la solución
deseada
5

Rubí

exit

Sin nueva línea. 3.send('exit')seguramente no es igual a 5, pero ejecuta Kernel#exit:

Inicia la terminación de la secuencia de comandos Ruby al generar la excepción SystemExit

Es posible llamar exitel 3 porque :

El módulo Kernel está incluido por la clase Object, por lo que sus métodos están disponibles en cada objeto Ruby [como métodos privados].

abort también funciona:

Termine la ejecución inmediatamente, efectivamente llamando a Kernel.exit (falso). Si se proporciona msg, se escribe en STDERR antes de finalizar.

Eric Duminil
fuente
5

JavaScript (Node.js) , programador 5000

Ya está roto, pero el mío es ligeramente diferente :) No tengo suficiente representante para comentar en la policía. También siéntase libre de editar para corregir el formato, mi primera publicación aquí.

Principalmente pongo __proto__igual a una función que arroja. Tomado de mirar la página de Mozilla para proto. (Lo siento, baja representación, no puedo publicar un enlace).

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

Pruébalo en línea!

EDITAR: Tengo un representante, así que aquí está el enlace: Mozilla__proto__

Haumed Rahmani
fuente
Comenté sobre el policía por ti.
Stephen
1
¡Gracias! También gracias a todos por los ups, supongo que puedo comentar ahora!
Haumed Rahmani
1
Bienvenido a PPCG: D
Conor O'Brien
5

R, Jarko Dubbeldam

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

La primera vez que contribuyes con algo, así que menciona cualquier error que haya cometido en el formato.

Estoy bastante seguro de que esto es válido. Solo una nueva versión de is.list (), ¿verdad?

Criminalmente vulgar
fuente
Por cierto, no tengo el representante para comentar sobre el original, por lo que agradecería una mano si es válida.
CriminallyVulgar
Comentado por ti.
TheLethalCoder
No es la solución prevista, pero funciona. Buen trabajo.
JAD
5

Javascript, programador 5000

Longitud máxima de la cuerda

Utiliza una cadena con una longitud inferior a la que admite su motor. Al agregar "h"a esta cadena, se genera un error. Pruébalo en línea!

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());

Bloque de origen cruzado

Muy inspirado por la respuesta de @ jadkik94 , pero funciona en todas partes. Crea un iframe de origen cruzado, luego pasa el .contentWindowde dicho iframe. Esto falla cuando la función intenta usar el valor debido a la seguridad de origen cruzado.

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 de las .toString()respuestas: esto solo se usa en su toPrimitivelugar. Devuelve un objeto como valor primitivo, que Javascript no sabe cómo manejar (por lo que arroja un error). Pruébalo en línea!

f({
  [Symbol.toPrimitive](){return {}}
});
Birjolaxew
fuente
Buen trabajo, pero aún no es la solución prevista! ¡Muy inteligente!
programmer5000
4

Node.js, Adnan

{}y / {}o cualquier 2 objetos son las dos entradas. Ni siquiera entiendo cómo funciona esto.

Aquí está la increíble lógica de comparación de objetos de JS:

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

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

programador 5000
fuente
Sí, esa era la solución prevista :)
Adnan
4

JavaScript (Nodo Babel) , Conor O'Brien

(Volver a publicar, poner accidentalmente a la policía.) No estoy seguro de lo que se pretendía, pero los decimales positivos que no son enormes parecen funcionar.

También supongo que todavía no puedo comentar en policías.

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

Pruébalo en línea!

Haumed Rahmani
fuente
También se olvidó de eso, bueno.
Conor O'Brien
4

Javascript (NO node.js) , programador 5000

Esto no se puede agregar porque crea un objeto que no tiene toString porque un nuevo Setno tiene prototipos inherentes Object.

entrada:

new Set()

Pruébalo en línea!

Grant Davis
fuente
Esta fue probablemente la solución prevista, de ahora en adelante lo guardaré en la bolsa de mi cabeza: P
Stephen
Lo siento, esto no parece funcionar para mí. Pruébalo en línea!
Haumed Rahmani
@HaumedRahmani agregó un botón de prueba en línea. Solía ​​mono araña, no babel.
Grant Davis
No es la solución prevista, ¡pero buen trabajo!
programmer5000
4

Python 2, Foon

__import__("os")._exit(0)

Lo que dice en la lata, básicamente.

Pruébalo en línea.

Veedrac
fuente
Curiosamente, en TIO este tiempo de espera para mí; bajo Windows (específicamente con winpty python inputbad.py y pegando en la línea), sale como se desea ... y sí, no es sorprendente que mi schtict explotara el bit "input under Python 2 eval eval under the hood"
Foon
@Foon Hmm, está funcionando bien en TIO para mí. Ver enlace en respuesta.
Veedrac
Extraño ... Debo haber presionado play y luego escribí la entrada en mi enlace TIO y no me di cuenta
Foon
Estoy bastante seguro de que esto grietas cada presentación pitón ..
enderland
@enderland Solo si evalúan su aporte, que la mayoría de ellos no.
Veedrac
4

Python 3, Siphor

Esto fue divertido. Necesitamos pasar el type(x) != strcheque, por lo que necesitamos controlar el valor de retorno de type(). Tenemos que anular el __class__atributo y reemplazarlo con un objeto personalizado, que se extienda type, que tiene el __ne__método reemplazado por uno que siempre devuelve falso. Esto hace que pase la verificación de tipo, pero la búsqueda fallará porque ono es un str.

class m(type):
    def __ne__(a,b):
        return False
class c:pass
o=c()
o.__class__=m("",(c,),{})
f(o)
ebopalisesy
fuente
Bienvenido al sitio! :)
DJMcMayhem
4

C #, TheLethalCoder

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

O cualquier otra clase anulable.

Luc
fuente
3

Retina

Una nueva línea seguida de una 1obra. Lo encontré de inmediato.


1

Pruébalo en línea

mbomb007
fuente
Ninja'd por un minuto
Kritixi Lithos
@Cowsquack La pregunta dice que se permiten múltiples grietas para la misma publicación policial.
mbomb007
Sabía que debería haber eliminado las nuevas líneas de la entrada como primer paso
PunPun1000
3

JS (ES6)

"   "

Cualquier personaje con un código menor que 10 debería funcionar; He usado un tabpersonaje arriba, que SE convierte en espacios.

Lanudo
fuente
Ninja'd
programmer5000
Lo sentimos :( además, creo que necesitarías citas a su alrededor para que sea una cadena
Stephen
@ programmer5000, así que veo :(
Shaggy
No hay problema, @StepHen; Naturaleza del juego. Tomé las citas como implícitas, pero las editaré.
Shaggy
@Shaggy No sé cuál es el fallo, pero f(<tab>)es una sintaxis válida (entrada vacía) y tendríamos que diferenciar entre f(1)y de f("1")todos modos
Stephen
3

JavaScript (ES6), programador 5000

"\0"

Pruébalo en línea!

La condición fue !x||x>="\n". Cualquier carácter individual en una tabla ASCII con un código menor que \nfuncionará.

Stephen
fuente
Sí, pensé que era eso, no estaba seguro ...
tuskiomi
3

cQuents, Step Hen

Cualquier cosa seguida de un espacio y un entero positivo. El espacio separa las entradas, y la entrada adicional se convierte en el número del término a emitir.

Pruébalo en línea!

PurkkaKoodari
fuente
¡Estaba a punto de publicar a 1! Usted me ninja: /
Sr. Xcoder
@ Mr.Xcoder Escribí esto en el móvil, esperando que nadie me ninja: P
PurkkaKoodari
3

MATL , Luis Mendo (no es la solución prevista)

La entrada vacía detiene el programa y muestra el siguiente error:

input: error al leer la entrada del usuario

Pruébalo en línea!

Sr. Xcoder
fuente