Cela fait partie d'un défi de policiers et de voleurs . Allez ici pour la partie des flics.
Le défi des voleurs
La réponse d'un flic peut être piratée en supprimant tout sous-ensemble de caractères du programme Haystack, afin qu'il sorte Needle
au lieu de Haystack
(tout en étant une soumission valide dans la même langue). Vous n'avez pas à trouver exactement la même solution que le policier prévu, tant que la vôtre est valide par les contraintes ci-dessus.
Si vous gérez cela, postez une réponse avec la solution, en vous liant à la réponse du flic, et laissez un commentaire sur la réponse du flic en vous reliant à la vôtre.
Le voleur qui déchire le plus de réponses de flic gagne. Les liens sont rompus par la somme des tailles des réponses des flics fêlés (en faveur du voleur qui déchire les soumissions plus longues).
Chaque réponse de flic ne peut être crackée qu'une seule fois, et bien sûr, vous n'êtes pas autorisé à cracker votre propre réponse. Si la réponse du policier s'avère invalide avant ou après avoir été piratée, elle n'est pas prise en compte dans le score du voleur.
Exemples
Voici quelques exemples simples dans différentes langues:
Ruby
Haystack: puts 1>0?"Haystack":"Needle"
Delete: XXXXXXXXXXXXXXX
Needle: puts "Needle"
Python 2
Haystack: print "kcatsyaHeldeeN"[-7::-1]
Delete: XXXXXXXX XX
Needle: print "eldeeN"[::-1]
Notez que le sous-ensemble de caractères supprimés ne doit pas nécessairement être contigu.
la source
hashing, encryption or random number generation
est autorisée? (Mais possibilité minuscule)Réponses:
JavaScript, 85 octets (ES6)
Faille la réponse d'Arnauld
Démo "Needle"
Afficher l'extrait de code
Explication
La fonction d'origine était:
qui est plus lisible comme:
Notez que lorsque
n=21625674
, puisn.toString(35)
est'eedle'
.Le 35 dans l'entrée ne peut probablement pas être changé en un sous-ensemble (parce que nous voulons une base suffisamment grande pour contenir toutes les lettres «del», nous avons donc besoin d'une base d'au moins 22). Donc , les chiffres sont à changer
74837258394056219
,268435455
et124038877
. Nous voulons les remplacer par des nombres a, b, c, chacun formé d'un sous-ensemble des chiffres des nombres originaux, de sorte que la fonctiong(k) = (k * a & b)
, commençant park=35
et itérée 35 fois, puis XORed avec c, donne21625674
.Pour celui - ci, après réflexion un peu, comme les longueurs sont de petite taille (le maximum
a
a une longueur 17,b
etc
avoir une longueur 9), je viens d' utiliser la force brute :-) A écrit un programme C ++ pour générer tous les nombres possiblesa
,b
,c
formé en tant que sous - ensembles des numéros originaux, parcourez tousa
etb
et vérifiez si le nécessairec
était dans l'ensemble. Fonctionne en 15 secondes environ, et la seule sortie esta=4853461
,b=268435455
,c=12408877
(tour à tour le nombreb
n'a pas besoin d'être changé). Je ne sais pas s'il existe un moyen plus intelligent d'inverser cette fonction.la source
Botte de foin , 82 octets
Cracks HyperNeutrino's Answer
Essayez-le en ligne!
la source
0
au début: P Nice pour voir une autre approche cependant! +1Brain-Flak , 96 octets
Cracks Funky Computer Man's answer .
Essayez-le en ligne!
C'était un défi amusant.
Le -24 au début qui se convertit
y
ena
dans l'original est maintenant utilisé pour convertire
enM
, qui est ensuite convertiN
en place en changeant la boucle de fin entière en())
. La première lettre poussée ak
été changée ene
simplement en supprimant un push-pop qui en ajoute 6. Le reste vient juste de se mettre en place, avec quelques faux pas humoristiques en cours de route (dont un programme dont la sortie étaitMeddle
).Comparaison des deux programmes:
la source
N
c'était 77 au lieu de 78, donc je ne l'ai pas saisi.Haskell
Cracks @ Laikoni's answer .
Essayez-le en ligne!
Code d'origine:
remplacement des caractères supprimés par des traits de soulignement:
Comment
Needle
est construit: la chaîne à la fin du code est divisée en mots. Le premier caractère de chaque mot est incrémenté autant de fois qu'il y a de caractères dans le mot, par exempleHaysta
->H
plus 6 caractères ->N
.la source
Hexagonie , 17 octets, H.PWiz
Essayez-le en ligne!
Comparaison avec l'original:
Visualisation:
Explication
Points bonus - utilise les 6 IP et toutes les cellules sauf une!
L'IP # 0 commence par se diriger à droite le long du chemin noir dans le
]
.Nous passons ensuite à IP # 1, qui se dirige le long du chemin rouge, imprimant
N
avecN;
puis enveloppant à]
nouveau.Nous avons ensuite transition vers IP n ° 2, qui tête le long du chemin bleu, le stockage
e
dans la cellule de mémoire de courant, puis le long de la voie verte, l' exécution (avec une réflexion au niveau\
);;(;
qui imprimeee
, décrémente la cellule de mémoire à partire
d'd
alors affichéed
.L'IP continue le long du chemin orange, exécutant
Nl;se
qui imprimel
et stockee
dans la cellule de mémoire actuelle. Il continue sur le chemin brun, l' impression de lae
avec;
. À ce stade, nous avons déjà impriméNeedle
, donc le reste ne fait que terminer. L'IP stockec
, puis frappe]
. Nous passons ensuite à IP # 3, qui se dirige le long du chemin bleu, frappant , rebondissant dans lequel rebondit . Nous passons ensuite à IP # 4, qui se dirige le long du chemin vert, rebondissant , puis se ramifiant (car c'est positif). Enfin, nous passons à IP # 5, qui stocke puis quitte avec .\
_
]
_
\
]
c
e
@
la source
Python 2 , 123 octets
Cracks agtoever's Answer
repl.it
Comparaison:
J'ai eu beaucoup de plaisir à trouver des solutions imprimées
Meedle
etNeedlf
en ajustant un polynôme à la médiane des indices des symboles numpy qui commencent par chacune des lettresNeedle
. J'ai ensuite essayé de trouver des coefficients similaires avec des sous-ensembles du programme d'origine à la main, mais j'ai finalement dû recourir à la force brute pour forcer un à trouver une solution valide.la source
Javascript, 91 octets
Cracks cela . C'était vraiment amusant.
Afficher l'extrait de code
la source
Gelée , 14 octets
Faille la réponse de Jonathan Allan
Essayez-le en ligne!
Comparaison:
J'avais l'habitude
œc
d'itérer à travers différents sous-ensembles des chaînes littérales, utiliséestr -d
pour chaque filtre possible etgrep
éditées pour Needle. En supposant qu'aucun des caractères utilisés dans la première chaîne n'a été utilisé dans la réponse, il a pu trouver une réponse en moins de 15 secondes.la source
Nebbed
+ruble
sans rienrub
.Python 2 , 73 octets
Cracks la réponse de user71546 .
Essayez-le en ligne!
Résolu avec ce programme.
la source
Java (OpenJDK 8), 191 octets
Faille la réponse de Luke Steven
Essayez-le en ligne!
Caractères supprimés:
Cela fait
d
évaluer à078101101100108101
quel sortNeedle
.la source
Rubis , 149 octets
Cracks cela: /codegolf//a/144790/74216
Le module était assez petit, j'ai donc écrit un anniversaire multithread et j'espérais le meilleur.
Edit: Et après cela a trouvé une réponse encore plus courte.
Essayez-le en ligne!
Changements:
la source
dc , 34 octets
Cracks cela . TIO .
J'ai commencé par obtenir la représentation numérique de Haystack (5215583380252484459) et Needle (86197399743589). Ensuite, j'ai fait une factorisation de ce dernier, qui est 47 * 432323 * 4242169. À partir de cela, il a été assez facile de reconstruire ces chiffres.
Marquage des caractères utilisés:
la source
Hexagonie , 19 octets, Martin Ender
Essayez-le en ligne!
Comparaison avec l'original
Code déplié
Donc, je n'ai jamais rien écrit dans Hexagony, mais j'ai pensé avec seulement 37 octets que je pourrais trouver la fissure. Martin, j'espère que tu sais que j'en mets beaucoup de temps à essayer de comprendre cela. :)
Je me trompe peut-être, mais je vais expliquer ce que je pense ce code fait:
Le programme démarre avec
[
, qui passe automatiquement à IP # 5. Cette IP commence dans le coin ouest, se dirigeant vers le[
une fois de plus, ce qui la déplace vers l'IP # 4. De là, il s'exécuteN;e
puis se dirige vers le coin sud-est et s'exécute;
, rebondit vers la droite pour un autre;
puis s'enroule à(
ce qui diminue le courante
à ad
. Il continue ensuite (avec un enveloppement) pour...;.
ensuite rebondir vers lel
et arriver à la[
dernière fois, en passant à IP # 3. Il s'exécute;
,>
redirige vers le nord-ouest pour.
ensuite<
rediriger vers l'ouest, frappante
, enveloppant;
et se terminant sur le@
.Version verbeuse
Afficher l'extrait de code
Je suis tellement content que vous ayez utilisé une taille hexagonale normale pour le programme Needle; Je vérifiais les programmes de taille 19 (pour un hexagone latéral de longueur 3) quand je me suis rendu compte que vous pouviez supprimer n'importe quel nombre de caractères et qu'il remplirait automatiquement l'hexagone avec
.
s à la fin, ce qui rendrait considérablement plus difficile à casser. Dans l'état actuel des choses, Hexagony est un langage diabolique pour ce défi car (la plupart du temps) tout personnage qui est supprimé change tout le chemin d'exécution du programme. Cela étant dit, j'ai aimé essayer de trouver cela, même si j'ai fini par le forcer brutalement à la fin. :)la source
Java (OpenJDK 8) , 151 octets
Fissures de Réponse de Kevin Cruijssen
Essayez-le en ligne!
Comparaison:
J'ai l'impression que la dernière partie n'était pas prévue.
la source
v->{String h="Haystack";int x=7;return new String(new java.math.BigInteger(new byte[]{(byte)((~-~-~-~-~-~-~-~1^-x++*x)+15),new Byte(""+10+((x=h.length()*4/x)+x-7))}).toByteArray())+(new StringBuffer("hidden".substring(++x%3,x).replaceFirst("d","e"+(char)(x*21+3))).reverse());}
(je ne sais pas pourquoi j'ai inclus le BigInteger car juste un tableau d'octets est suffisant ..) , mais j'aime mieux le vôtre .. :)Brain-Flak , 102 octets
Cracks la réponse de H.PWiz .
Essayez-le en ligne!
la source
Ly , 21 octets
Essayez-le en ligne!
Fissures la réponse de LyricLy .
la source
Java par Johnathan S.
TiO
Retirez simplement la boucle qui ajoute le foin et rien ne restera sur la pile sauf l'aiguille.
la source
equals
méthode fonctionne tout aussi bien.Pyth , 21 octets
craque cela .
Essayez-le en ligne!
la source
T-SQL par phroureo , 757 octets
D'une certaine manière, je ne pense pas que c'était la solution envisagée. Utilise les caractères entourés de
{}
:la source
PHP
Cracks Titus réponse
Essayez-le en ligne
la source