Trouver l'aiguille dans la botte de foin (voleurs)

18

Cela fait partie d'un défi de . 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 Needleau 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.

Martin Ender
la source
Si l'utilisation du voleur hashing, encryption or random number generationest autorisée? (Mais possibilité minuscule)
l4m2

Réponses:

11

JavaScript, 85 octets (ES6)

Faille la réponse d'Arnauld

f=(k=b=x=35)=>x--?f(k*4853461&268435455):k&2?'N'+(k^12408877).toString(b):'Haystack'

Démo "Needle"

Explication

La fonction d'origine était:

f=(k=b=x=35)=>x--?f(k*74837258394056219&268435455):k&2?'N'+(k^124038877).toString(b):'Haystack'

qui est plus lisible comme:

f = (k=b=x=35) => {
    if (x--) {
        return f(k*74837258394056219&268435455);
    } else {
        if (k&2) {
            return 'N'+(k^124038877).toString(b);
        } else {
            return 'Haystack';
        }
    }
}

Notez que lorsque n=21625674, puis n.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, 268435455et 124038877. 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 fonction g(k) = (k * a & b), commençant par k=35et itérée 35 fois, puis XORed avec c, donne 21625674.

Pour celui - ci, après réflexion un peu, comme les longueurs sont de petite taille (le maximum aa une longueur 17, bet cavoir une longueur 9), je viens d' utiliser la force brute :-) A écrit un programme C ++ pour générer tous les nombres possibles a, b, cformé en tant que sous - ensembles des numéros originaux, parcourez tous aet bet vérifiez si le nécessaire cétait dans l'ensemble. Fonctionne en 15 secondes environ, et la seule sortie est a=4853461, b=268435455, c=12408877(tour à tour le nombre bn'a pas besoin d'être changé). Je ne sais pas s'il existe un moyen plus intelligent d'inverser cette fonction.

ShreevatsaR
la source
5

Botte de foin , 82 octets

Cracks HyperNeutrino's Answer

0\1-c\
/    
?10F17+c8F+4+cd8F+3+c6-c1+c,c2+c8+c|
 0   \1++c,c|
F/c++2F8
c\8F+2+cd

Essayez-le en ligne!

fireflame241
la source
1
Agréable! La façon dont je l'avais mis en place, ma solution initiale était de supprimer littéralement le 0au début: P Nice pour voir une autre approche cependant! +1
HyperNeutrino
5

Brain-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 yen adans l'original est maintenant utilisé pour convertir een M, qui est ensuite converti Nen place en changeant la boucle de fin entière en ()). La première lettre poussée a kété changée en esimplement 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 était Meddle).

Comparaison des deux programmes:

Haystack: ([((((()()())){}){}){}](()([()](()({}([((((()()()){})))[]])[]({}({})[{}]()({}((()(({}){}){}){}){}())))[][][][][][]))[]))(((()[]){}){({}[()()])}{})
Needle:   ([((((()()())){}){}){}](() [()]   ({}([ (((()()()){})) []])[]({}({}     ()(  ((()(({}){}){}){}){}())))[]              ))   ()  )
Nitrodon
la source
J'étais sûr que ça se terminerait comme ça
H.PWiz
Cela fonctionne certainement , mais je m'étais en quelque sorte convaincu que Nc'était 77 au lieu de 78, donc je ne l'ai pas saisi.
Nitrodon
Le tien est de toute façon plus court.
H.PWiz
Solution intéressante! J'ai ajouté ma solution prévue au message d'origine si vous souhaitez la voir.
Post Rock Garf Hunter
5

Haskell

Cracks @ Laikoni's answer .

s=map;hay=zipWith;a=head;h=s a.(hay(scanr id).s a<*>s(succ<$))$words"Haysta ayst ackH ays k ayst"

Essayez-le en ligne!

Code d'origine:

hays=map;hay=zipWith;stack=head;h=stack{-
 hay.(hays.(stackany hay$or id).stack hay
<*>hays(sum$stack haystack<$>hay))-}$words
 "Haystack Hayst ackH aysta ckH aystac k"

remplacement des caractères supprimés par des traits de soulignement:

___s=map;hay=zipWith;__a__=head;h=s______
 _a_.(hay__(s__c_an_______r id).s____ _a_
<*>___s(su_____c________c_<$____))__$words
 "Haysta__ _ayst ackH ays__ _k_ ayst____"

Comment Needleest 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 exemple Haysta-> Hplus 6 caractères -> N.

nimi
la source
5

Hexagonie , 17 octets, H.PWiz

]; N @ cl; e ;; (\. S.; _

Essayez-le en ligne!

Comparaison avec l'original:

];N.@cl;e@;;(\H/;ya;_.>s.;t//<._  original
];N @cl;e ;;(\       . s.;     _  modified

Visualisation:

  ] ; N
 @ c l ;
e ; ; ( \
 . s . ;
  _ . .

Explication

Points bonus - utilise les 6 IP et toutes les cellules sauf une!

Coloured paths

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 Navec N;puis enveloppant à ]nouveau.
Nous avons ensuite transition vers IP n ° 2, qui tête le long du chemin bleu, le stockage edans la cellule de mémoire de courant, puis le long de la voie verte, l' exécution (avec une réflexion au niveau \) ;;(;qui imprime ee, décrémente la cellule de mémoire à partir ed' dalors affichée d.
L'IP continue le long du chemin orange, exécutant Nl;sequi imprime let stocke edans la cellule de mémoire actuelle. Il continue sur le chemin brun, l' impression de la eavec;. À ce stade, nous avons déjà imprimé Needle, donc le reste ne fait que terminer. L'IP stocke c, 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 .
Coloured paths 2
\_]
_\]c
e@

boboquack
la source
Agréable! C'était la solution envisagée.
H.PWiz
4

Python 2 , 123 octets

Cracks agtoever's Answer

import numpy
print "".join([dir(numpy)[int(i)][0] for i in numpy.poly1d([-143/2e1,-31,14,131,61,184])(numpy.arange(-3,3))])

repl.it

Comparaison:

print "".join([dir(numpy)[int(i)][1-0] for i in numpy.poly1d([-1*1433/252e1,-3232/1920.,4026./72/2/3.,613/(6*4.)*1,-4723./1.8e2,-9763/120.,-2689/(-1+5*17.),1+138*.4*2])(numpy.arange(-12/3,13%9))])
print "".join([dir(numpy)[int(i)][  0] for i in numpy.poly1d([-1  43 /2  e1,-3    1    ,               1     4    ,       1         3 1   ,  6     1       ,1   8  4  ])(numpy.arange(-   3, 3  ))])

J'ai eu beaucoup de plaisir à trouver des solutions imprimées Meedleet Needlfen ajustant un polynôme à la médiane des indices des symboles numpy qui commencent par chacune des lettres Needle. 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.

jacobly
la source
Hou la la! Bon travail! Je ne m'attendais pas à ce qu'il soit fissuré si tôt.
agtoever
J'ai à l'origine développé le défi basé sur numpy 1.13, que je ne trouvais dans aucun environnement de repl, donc j'ai dû le réécrire pour numpy 1.12 ... ;-)
agtoever
2

Javascript, 91 octets

_=>(+{}+[])[+[]]+([][[]]+[])[3]+([][[]]+[])[3]+([][[]]+[])[2]+(![]+['t'])[2]+([][[]]+[])[3]

Cracks cela . C'était vraiment amusant.

mon pronom est monicareinstate
la source
2

Gelée , 14 octets

Faille la réponse de Jonathan Allan

“¡#ɦṢÞɠ»ḟ“¡pṄ»

Essayez-le en ligne!

Comparaison:

“¿ọ⁽ṅ*FỊ⁼g£¡#!ʋzoɦṪ£ṢÞḲÐɠ`”m3⁾“»jVḟ“¡!pṄ»
“          ¡#    ɦ  ṢÞ  ɠ      »  ḟ“¡ pṄ»

J'avais l'habitude œcd'itérer à travers différents sous-ensembles des chaînes littérales, utilisées tr -dpour chaque filtre possible et grepé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.

jacobly
la source
Exactement celui que j'avais en tête Nebbed+ rublesans rien rub.
Jonathan Allan
2

Java (OpenJDK 8), 191 octets

Faille la réponse de Luke Steven

String d(){int h=3905055,m=55,s=15443;String d="0"+h*2+""+m*20+""+s*7,x="",y;for(int g=0;g<d.length();g+=3){y="";for(int e=0;e<3;e++)y+=d.charAt(e+g);x+=(char)Integer.parseInt(y);}return x;}

Essayez-le en ligne!

Caractères supprimés:

int h=3609000-5055+911,m=557558,s=15441301-157*10000
       xx  xxx    xxxx     xxxx       x xxxxxxxxxxxx

Cela fait dévaluer à 078101101100108101quel sort Needle.

Lait
la source
2

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.

x='hxDKFQOoqJLuVNW'
s="n=x.to_i 36;x.bytjs.jach_cons(3){|a,b,c|n+=n*b%c;n*=a^b};puts n%8675309==1388649 ?'Njjdlj':'Haystack'"
eval s.tr ?j,s.size.chr

Essayez-le en ligne!

Changements:

x='yGwztsPXhxDkBKlCYdFjQnpUROfoHvqmTgbaJSLcEiZrIAuMVNW'
x='        hxD  K    F Q    O o  q     J L       u VNW'

# and here's some more variants for extra pwnage:
x=' G  tsPx     KlCYd  Qn U   o v mT  a SLc    I u  NW'
x='  w  s    D BKl  dF QnpU O        ba SLcEiZrI  MV  '
x='yGwz s Xh Dk K C  F  npU O  Hvq   b   L    rIAu V W'
cab404
la source
2

dc , 34 octets

93 9 2*+432212+ 47*4242160 7 2++*P

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:

6 93 3 9 2 2**+*+483622 1 2 3 3*+3*+89 47*+*+3 5 2* 269 158 9**107 97*2 4*++2 3 3*+42 14 2**+*+5*+5 2148 1 6 2*+*+68262 5 280 7 2 3 3*+5 2**+*+*+*+P
  XXX  XXX   XX  X X XX X X     X     XXXX                              X   X      XX X                    X                XXXXX     X     XX     X
toujours
la source
gg! je savais que mettre autant de chiffres était une mauvaise idée)
cab404
@ cab404 Juste curieux: avez-vous utilisé un calcul très différent pour vous rendre au 86197399743589?
agtoever
oui, c'est beaucoup plus long
cab404
Sensationnel. C'est remarquable. Cela pourrait être une autre question de codegolf: combien de façons existe-t-il pour obtenir un certain résultat en supprimant des caractères dans une expression ...
agtoever
je suppose que cela nécessiterait généralement des calculs sérieux pour calculer toutes les possibilités et prouver qu'il n'y en a que ce nombre)
cab404
2

Hexagonie , 19 octets, Martin Ender

[@;(...e<l.a;./;N>;

Essayez-le en ligne!

Comparaison avec l'original

H[@;(...e<l.a;./$.>;\sN;\ac.>).;;;._y
 [@;(...e<l.a;./   ;  N     >  ;

Code déplié

  [ @ ;
 ( . . .
e < l . a
 ; . / ;
  N > ;

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écute N;epuis 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 courant eà a d. Il continue ensuite (avec un enveloppement) pour ...;.ensuite rebondir vers le let arriver à la [dernière fois, en passant à IP # 3. Il s'exécute ;, >redirige vers le nord-ouest pour .ensuite <rediriger vers l'ouest, frappant e, enveloppant ;et se terminant sur le @.

Version verbeuse

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. :)

Jo.
la source
Si j'ai foiré / manqué quelque chose, faites-le moi savoir.
Jo.
Beau travail, cela semble assez précis. Je vais le comparer avec ce que j'avais à l'origine ce week-end.
Martin Ender
1

Java (OpenJDK 8) , 151 octets

Fissures de Réponse de Kevin Cruijssen

v->{String h="H";int x=7;return new String(new byte[]{(byte)((-~-~-~-~-~-~1^x++*x)+15),new Byte("10"+h.length())})+new StringBuffer("elde").reverse();}

Essayez-le en ligne!

Comparaison:

v->{String h="Haystack";int x=-7;return x<0?h:new String(new java.math.BigInteger(new byte[]{(byte)((~-~-~-~-~-~-~-~-~-~1^-x++*x)+151),new Byte("2"+"1+\"0+\"".length()+(x=h.length()*4/x)+"-x-7")}).toByteArray())+(new StringBuffer("hidden".substring(++x%3^4,--x-x--).replaceFirst("dd","e"+(char)(x*211%+93))).reverse());}
v->{String h="H       ";int x= 7;return       new String(                         new byte[]{(byte)(( -~-~-~-~-~-~      1^ x++*x)+15 ),new Byte("    1   0  "          +   h.length()    )        })               + new StringBuffer("    e                                 l          d    e"      )             .reverse() ;}

J'ai l'impression que la dernière partie n'était pas prévue.

jacobly
la source
Lol ok, c'est une façon intelligente de faire "edle". En tripotant, je pensais déjà que j'en faisais un peu trop et des tas de solutions seraient possibles ..;) La solution envisagée était: 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 .. :)
Kevin Cruijssen
1

Brain-Flak , 102 octets

(((((((((()()()){}){}){}){}()){}()))()()<>)(()()()){}())<>((()((){}<>)))(({})[(((()()){}())(){}){}()])

Cracks la réponse de H.PWiz .

Essayez-le en ligne!

((((((((((()()()){}){}()){}){}()){}()))<({}[(()()()()){}])(([[]]({})<>)<>)>((()()())){}{})[()]))<[[]()]>((()){}){}((){}[][(<>){}<>])(<>){}(({}<>()[()])[(((()()()){}<[()]>)<(()){}>{}){}()])
 (((((((((()()()){}){}  ){}){}()){}()))      ()()                   <>)     (()()()) {}    () ) <      >((()      ((){}    <>)     )   )  (({}        )[(((()()  ){}  ()  )  () {}   ){}()])
Nitrodon
la source
1

Java par Johnathan S.

import java.util.*;interface Main{static void main(String[]args){Stack<Hay>s=new Stack();s.add(new Needle());System.out.println(s.get(s.indexOf(new Hay())+1).a);}}class Needle extends Hay{{a="Needle";}}class Hay{String a="Haystack";public boolean equals(Object o){return getClass().equals(o.getClass());}}

TiO

Retirez simplement la boucle qui ajoute le foin et rien ne restera sur la pile sauf l'aiguille.

Titus
la source
Ha, chouette - je n'avais pas pensé à retirer simplement la boucle! La suppression de la equalsméthode fonctionne tout aussi bien.
Jonathan
0

Pyth , 21 octets

Kr."Dn2û"2+Kr."EL8"Z

craque cela .

Essayez-le en ligne!

Leaky Nun
la source
Bien sûr, bien. Ce n'était qu'un premier essai, donc la fissure était assez banale ;-)
M. Xcoder
0

T-SQL par phroureo , 757 octets

seleCT 'Needle'

D'une certaine manière, je ne pense pas que c'était la solution envisagée. Utilise les caractères entourés de {}:

create table a(l int,c int)
in{se}rt into a va{l}u{e}s (1,10),(2,1),(3,8),(4,0)
go
;CREATE FUN{CT}ION b(@ varchar(max)) returns varchar(max) as
begin return{ '}char('+@+'),'''','end 
go
;CREATE FU{N}CTION h(@ varchar(max),@a varchar(max), @b varchar(max), @c varchar(max), @d varchar(max), @e varchar(max), @f varchar(max), @g varchar(max), @h varchar(max))
r{e}turns varchar(max) as 
b{e}gin
return replace(replace(replace(replace(@,@a,@b),@c,@d),@e,@f),@g,@h)
end
{d}ec{l}ar{e} @x varchar(max),@ int=1,@y varchar(99)={'}'
,@D varchar(4)='Ha',@O varchar(4)='ys'
,@T varchar(3)='ta',@A varchar(4)='ck'
WHILE @<=4
BEGIN
set @y+=(SELECT dbo.b(c+100)from a where l=@)+' '
set @+=1
END
SELECT @x='select
left(dbo.h('''+@D+@O+@T+@A+''','+ left(@y,len(@y)-1) +'),char(56))'
execute(@x)
Robert Fraser
la source