Est-ce que ça va s'arrêter? (Voleurs)


46

C'est le fil des voleurs. Le fil des flics est ici .

Votre défi est de casser la soumission d'un flic en trouvant une entrée qui la stoppe. Vous n'avez pas à chercher pourquoi, ni toutes les entrées qui la bloquent s'il y en a plus d'une, ou l'entrée que le flic avait l'intention de faire, une seule entrée suffira.

Une fois que vous avez déchiffré une soumission, publiez un lien vers celle-ci dans un commentaire ou modifiez-la dans la publication du policier. Vous pouvez également marquer votre soumission pour qu'un mod l'édite dans le message du flic. Aussi, postez l'entrée utilisée et un lien vers le poste du policier dans une réponse de ce fil. Le voleur qui craque le plus de soumissions gagne.

Plusieurs personnes peuvent afficher des fissures dans la même soumission de flic, tant qu'elles sont différentes.

(Si SE a converti votre réponse dupliquée en commentaire, vous souhaiterez peut-être voter sur cette demande de fonctionnalité )


Vous recherchez des soumissions non fissurées?

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>


2
Est-ce que différentes entrées signifient différentes entrées (par exemple, toutes les entrées se terminant par 2 déchiffrent la publication du flic - pouvez-vous différentes personnes afficher des numéros différents se terminant par 2?) Ou différentes familles d’intrants, ou différents types d’intrants?
Stephen

1
Plusieurs personnes peuvent poster des fissures à la même soumission de flic ... S'il vous plaît définir différents .
Dennis

Réponses:


49

Malbolge, poignée de porte

Essayez-le en ligne (Merci Dennis !)

Entrée pour Windows: F_⌠1234567890

Entrée sur un système Linux utilisant ISO-8559-1: F_ô1234567890

Le cœur du fonctionnement du programme Malbolge est qu’il dépend d’un comportement de l’interprète Malbolge qui provoque une boucle infinie s’il rencontre une instruction n’étant pas comprise entre 33 et 126. Le programme a été construit de sorte que votre entrée vous permette de modifier. une seule instruction.

J'ai modifié l'interprète pour vider l'état de la mémoire du programme au début de l'exécution et également pour produire un code source "normalisé" qui se présente sous la forme d'une liste de codes op qui seront exécutés lors de l'exécution du programme. Avec cette information, vous pouvez (lentement) déterminer que même si le programme a pris 13 entrées, seules les 1re et 3e entrées sont réellement importantes.

En parcourant le code normalisé et le vidage de la mémoire (et une touche d'aide du débogueur), j'ai conçu ce qui suit:

a = op (entrée 1, 29524)

b = op (entrée 3, a)

c = op (486, b)

d = op (c, 37)

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

e doit être compris entre 33 et 126

Où se optrouve le "op" dit tritwise décrit dans la spécification. En utilisant ces informations, vous pouvez écrire un programme simple qui itère sur les entrées possibles (0 à 255) et trouve toutes les solutions qui répondent aux critères ci-dessus. J'avais trouvé 2219 solutions possibles, dont certaines ne fonctionneraient probablement pas (vous ne pouvez pas saisir les caractères requis). Plus précisément, les entrées ci-dessus sont basées sur la solution:

(Input 1 = 70, Input 3 = 244)


Je n'ai pas le représentant à commenter craqué sur le post de flics. Est-ce que quelqu'un pourrait faire ça pour moi?
KBRON111

4
Bienvenue chez PPCG! Bon travail! Je pense qu'avec cette fissure, vous aurez bientôt assez de représentants :)
Stephen

1
J'ai commenté à travers. Et oui, excellent travail; J'espérais à moitié que Malbolge durerait la semaine!
Veedrac

6
Bon travail! TIO utilise UTF-8, mais en l'enveloppant dans Bash, votre fissure peut toujours être vérifiée. tio.run/… Vous semblez n'avoir besoin de rien sauf F_ôau fait.
Dennis

1
Maintenant je peux dormir à nouveau
Juan Tonina


13

JS (ES6), Juan Tonina

+0,-0

A pris un peu de chercher Object.ispour trouver. Fondamentalement, +0 === -0depuis les ===vérifie comme des nombres et 0est fini, mais Object.isvoit +0et -0comme des objets différents. Flic très intelligent :)

Essayez-le en ligne!


Ninja l'a eu pendant que je me connectais. Shoot.
user3033745

Zut, résolu plus vite que le temps passé à réfléchir au code: 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)

Nous redéfinissons simplement l'égalité pour qu'elle se comporte exactement comme il se doit pour que le programme se termine.


Bien que je suppose que j'aurais pu simplement définir __eq__à raise...
g.rocket

J'étais sur le point de soumettre avec juste revenir 0: p
Jonathan Allan

@ JonathanAllan Comment ça marche?
g.rocket

1
Assez sûr juste class A:__eq__=lambda s,o:0et f(A())fait le travail.
Jonathan Allan

1
Ah ouais besoin de la négation> _ <
Jonathan Allan


8

PHP, Sisyphe

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

La fonction parse_str modifie les espaces et les autres caractères en soulignés. Si vous mettez un [utilisé pour le délimiteur de tableau sans fermer, cela le change en trait de soulignement mais a pour effet de ne pas traduire les espaces suivants (je ne sais pas pourquoi).

Essayez-le en ligne!


WTF?! C'est fou ...
Veedrac

7

JavaScript (Node.js), Adnan

[]et []semblent fonctionner. J'ai essayé un tas d'entre eux , y compris null, undefined, NaN...

[] >= [] && [] <= [] && [] != [] évalue à vrai.

Morale de l'histoire: JavaScript est bizarre .

Essayez-le en ligne!


Oui, les tableaux ne sont que des objets.
programmer5000

Et les objets sont convertis en chaînes pour ces types de comparaisons.
Conor O'Brien

7

JavaScript (ES7), Arnauld

la norme

"8e7" est la solution

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

var key = "8e7"

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

Pirater

Pas besoin de calculer ce nombre, nous pouvons redéfinir la lengthpropriété

Cela met ~x/x.length**3!=-2962963àfalse

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

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

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

Priorité des opérateurs

~ bitwise n'est pas le premier

** exponentiation seconde

/ division troisième


6

Bash, Veedrac

LD_TRACE_LOADED_OBJECTS

Essayez-le en ligne!

De la ld.so(8)page de manuel:

LD_TRACE_LOADED_OBJECTS

Si elle est définie (sur n'importe quelle valeur), le programme répertorie ses dépendances dynamiques, comme si elles étaient exécutées ldd(1), au lieu de s'exécuter normalement.


Je pensais que ça durerait plus longtemps! Excellent travail.
Veedrac

1
@ Veedrac: Je suppose que puisque vous avez spécifié bash, il est peu probable que vous trouviez une liaison statique (ex. Busybox?) /bin/yes, Mais c'est possible, auquel cas cette variable d'environnement serait ignorée.
Peter Cordes

6

Mathematica, JungHwan Min

Unevaluated@Throw@"hammertime"

Aucune idée si cette solution est prévue, mais elle passe dans une expression qui n'est pas évaluée tant qu'elle n'est pas référencée comme étant #à l'intérieur de la fonction, ce qui la fera revenir immédiatement de la fonction sans effectuer d'évaluation supplémentaire. Vous pouvez voir que la fonction est réellement appelée (au lieu de simplement lever l'exception avant même d'appeler la fonction) en modifiant la fonction en:

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

Ce qui va en effet imprimer le stopavant de jeter l'erreur.


Bingo! (J'allais en fait Unevaluated[Abort[]], mais c'est la même chose.)
JungHwan Min


5

Rubis

exit

sans nouvelle ligne. 3.send('exit')n'est sûrement pas égal à 5, mais il exécute Kernel#exit:

Initie la terminaison du script Ruby en levant l'exception SystemExit

Il est possible d'appeler exità 3 cause :

Le module Kernel est inclus par la classe Object. Ses méthodes sont donc disponibles dans chaque objet Ruby [en tant que méthodes privées].

abort fonctionne également:

Terminez immédiatement l’exécution en appelant Kernel.exit (false). Si msg est donné, il est écrit dans STDERR avant la fin.


5

JavaScript (Node.js) , programmer5000

Déjà fissuré, mais le mien est légèrement différent :) N'a pas assez de représentant pour commenter dans les flics. Aussi, n'hésitez pas à éditer pour corriger le formatage, mon premier post ici.

Principalement, je mets __proto__égal à une fonction qui jette. Tiré de regarder la page de Mozilla pour proto. (Désolé, faible représentant, impossible de poster un lien.)

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

Essayez-le en ligne!

EDIT: Vous avez un représentant, alors voici le lien: Mozilla__proto__


J'ai commenté le flic pour vous.
Stephen

1
Merci! Merci également à tous pour les hauts, devinez que je peux commenter maintenant!
Haumed Rahmani

1
Bienvenue sur PPCG: D
Conor O'Brien


5

R, Jarko Dubbeldam

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

Si vous apportez quelque chose pour la première fois, signalez toutes les erreurs de format que j'ai commises.

Je suis sûr que c'est valide. Juste une reformulation de is.list (), non?


Incidemment, je n'ai pas le représentant à commenter sur l'original, donc une main serait appréciée si elle est valide.
CriminallyVulgar

Commenté pour vous.
TheLethalCoder

Pas la solution prévue, mais fonctionne. Bon travail.
JAD

5

Javascript, programmeur5000

Longueur maximale de la chaîne

Utilise une chaîne d'une longueur inférieure à celle prise en charge par votre moteur. Lors de l'ajout "h"à cette chaîne, une erreur est générée. Essayez-le en ligne!

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

Bloc d'origine croisée

Fortement inspiré par la réponse de @ jadkik94 , mais fonctionne partout. Crée une iframe d’origine croisée, puis passe l’une .contentWindowde ces iframe. Cela échoue lorsque la fonction tente d'utiliser la valeur en raison de la sécurité de l'origine croisée.

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

Valeur primitive

Variante des .toString()réponses - cela utilise simplement à la toPrimitiveplace. Il renvoie un objet en tant que valeur primitive, ce que Javascript ne sait pas manipuler (il génère donc une erreur). Essayez-le en ligne!

f({
  [Symbol.toPrimitive](){return {}}
});

Beau travail, mais toujours pas la solution prévue! Très intelligent!
programmer5000

4

Node.js, Adnan

{}et {}ou 2 objets sont les deux entrées. Je ne comprends même pas comment cela fonctionne.

Voici l'étonnante logique de comparaison d'objet de JS:

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

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


Oui, c'était la solution voulue :)
Adnan


4

Javascript (NOT node.js) , programmeur5000

Cela ne peut pas être ajouté car il crée un objet qui n'a pas de chaîne toString, car un nouveau Setprototypage n'est pas inhérent à partir de Object.

contribution:

new Set()

Essayez-le en ligne!


C'était probablement la solution envisagée, je la garderai désormais dans le sac de ma tête: P
Stephen

Désolé, cela ne semble pas fonctionner pour moi? Essayez-le en ligne!
Haumed Rahmani

@HaumedRahmani a ajouté un bouton d'essai en ligne. J'ai utilisé le singe araignée, pas Babel.
Grant Davis

Pas la solution prévue, mais bon travail!
programmer5000



4

Python 2, Foon

__import__("os")._exit(0)

Ce qu'il dit sur l'étain, fondamentalement.

Essayez-le en ligne.


Fait intéressant, sur TIO, le temps passe pour moi; sous Windows (en particulier avec winpty python inputbad.py et collage dans la ligne), il sort comme vous le souhaitez ... et oui, ce n’est pas surprenant que mon schéma exploite le "entrée sous Python 2 ne s’évalue pas sous le capot"
Foon

@Foon Hmm, ça fonctionne très bien sur TIO pour moi. Voir le lien en réponse.
Veedrac

Bizarre ... Je dois avoir frappé le jeu, puis tapé une entrée sur mon lien TIO et ne pas l'avoir réalisé
Foon

Je suis presque sûr que ça
casse

@enderland Seulement s'ils évaluent votre contribution, ce que la plupart d'entre eux ne font pas.
Veedrac


4

Python 3, Siphor

C'était amusant. Nous devons faire passer le type(x) != strchèque, nous devons donc contrôler la valeur de retour de type(). Nous devons remplacer l' __class__attribut et le remplacer par un objet personnalisé, qui s'étend type, la __ne__méthode étant remplacée par celle renvoyant toujours la valeur false. Cela le fait passer la vérification de type, mais la recherche échouera car ce on'est pas une str.

class m(type):
    def __ne__(a,b):
        return False
class c:pass
o=c()
o.__class__=m("",(c,),{})
f(o)

Bienvenue sur le site! :)
DJMcMayhem

4

C #, TheLethalCoder

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

Ou toute autre classe nullable.



3

JS (ES6)

"   "

Tout caractère avec un code inférieur à 10 devrait fonctionner; J'ai utilisé un tabpersonnage ci-dessus, que SE convertit en espaces.



Désolé :( plus je pense que vous auriez besoin de guillemets pour que ce soit une chaîne
Stephen

@ programmer5000, alors je vois :(
Shaggy le

Pas de problème, @StepHen; nature du jeu. J'ai pris les citations comme étant implicites, mais je les éditerai.
Shaggy

@Shaggy Je ne sais pas quelle est la décision, mais f(<tab>)c'est une syntaxe valide (entrée vide) et nous aurions à faire la différence entre f(1)et de f("1")toute façon
Stephen



En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.