Cache l'aiguille dans la botte de foin (Flics)


38

Cela fait partie d'un défi des . Allez ici pour la partie des voleurs.

Le défi des flics

Vous devez écrire un programme ou une fonction dans la langue de votre choix, qui génère la chaîne Haystack. Cependant, il doit être possible de supprimer un sous-ensemble de caractères de votre programme (sans réorganiser le reste), de sorte que la chaîne résultante soit également un programme valide dans la même langue, qui sera imprimé à la Needleplace. Les deux programmes / fonctions peuvent éventuellement imprimer une nouvelle ligne de fin (indépendamment l’une de l’autre), mais rien d’autre. La sortie est sensible à la casse et doit suivre exactement le boîtier fourni.

Votre objectif, bien sûr, est de très bien cacher l’aiguille. Mais notez que votre soumission peut être fissurée avec n'importe quelle solution valide, pas seulement celle que vous vouliez.

S'il vous plaît inclure dans votre réponse:

  • La langue (et la version, le cas échéant) de votre soumission.
  • La taille du programme Haystack en octets.
  • Le programme Haystack lui-même.
  • La méthode de sortie si ce n'est pas STDOUT.
  • Si possible, un lien vers un interprète / compilateur en ligne pour la langue de votre choix.

Votre soumission peut être un programme ou une fonction, mais pas un extrait et vous ne devez pas assumer un environnement REPL. Vous ne devez prendre aucune entrée et vous pouvez sortir via STDOUT, une valeur de retour de fonction ou un paramètre de fonction (out).

Les deux programmes / fonctions doivent être terminés en moins de 5 secondes sur un ordinateur de bureau raisonnable et doivent être déterministes. Vous ne devez pas utiliser les fonctions intégrées pour le hachage, le chiffrement ou la génération de nombres aléatoires (même si vous générez le générateur de nombres aléatoires à une valeur fixe).

Dans un souci d'équité, il doit exister un interprète ou un compilateur librement disponible pour la langue de votre choix.

Une réponse est fissurée si le programme Needle est trouvé. Si votre réponse n'a pas été fissurée pendant 7 jours, vous pouvez indiquer le programme Needle prévu dans votre réponse, ce qui sécurise votre soumission. Tant que vous ne révélez pas votre solution, les voleurs peuvent la craquer, même si les 7 jours sont déjà écoulés. Le programme Haystack sûr le plus court (mesuré en octets) gagne.

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.

Soumissions non fissurées

<script>site = 'meta.codegolf'; postID = 5686; isAnswer = false; QUESTION_ID = 144600;</script><script src='https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js'></script><script>jQuery(function(){var u='https://api.stackexchange.com/2.2/';if(isAnswer)u+='answers/'+postID+'?order=asc&sort=creation&site='+site+'&filter=!GeEyUcJFJeRCD';else u+='questions/'+postID+'?order=asc&sort=creation&site='+site+'&filter=!GeEyUcJFJO6t)';jQuery.get(u,function(b){function d(s){return jQuery('<textarea>').html(s).text()};function r(l){return new RegExp('<pre class="snippet-code-'+l+'\\b[^>]*><code>([\\s\\S]*?)</code></pre>')};b=b.items[0].body;var j=r('js').exec(b),c=r('css').exec(b),h=r('html').exec(b);if(c!==null)jQuery('head').append(jQuery('<style>').text(d(c[1])));if (h!==null)jQuery('body').append(d(h[1]));if(j!==null)jQuery('body').append(jQuery('<script>').text(d(j[1])))})})</script>


1
En relation. (La principale différence est que les programmes avaient implémenté les séquences OEIS et permis au programme fissuré d’émettre une séquence OEIS différente, ce qui rend beaucoup plus difficile pour les policiers de se protéger contre les fissures involontaires. Cela permettait également aux voleurs de voler les voleurs en trouvant des solutions encore plus courtes.)
Martin Ender

Je le ferais dans Haystack mais il n’a pas de documentation et je regarde à travers le code :(
Okx


1
L'extrait de pile obtient une longueur incorrecte pour cette réponse
mbomb007

1
@ kamoroso94 Oui, mais cela signifie que vous pouvez terminer les programmes candidats au bout de 5 ou 6 secondes, car s'ils ne le finissent pas, ils ne peuvent pas être la solution que vous recherchez.
Martin Ender

Réponses:


16

Meule de foin , 84 octets, fissurée

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!

Cela me semble assez compliqué, mais si vous trouvez le bon sous-ensemble, c'est un peu trop facile ... bon, juste pour commencer: P



1
@icrieverytim 1. oo cool, ils sont tous les deux glyphes Unicode 2. l'actuel est plus précis scientifiquement
HyperNeutrino

1. Oui, je sais, ils ont l'air vraiment cool. : PI les a trouvés dans cette mine d’or d’un bloc Unicode . Ne soyez pas surpris s'ils se retrouvent dans la page de code de Neon. 2. TBH, l'ancien ressemblait mieux à l'OMI. : P
totalement humain

1
@HyperNeutrino Pourquoi avez-vous un intérêt pour le benzène?
Michthan

3
@Michthan Considérant que je suis un neutrino, c'est une bonne question, mais je ne sais pas: P
HyperNeutrino

12

Hexagonie , 37 octets

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

Essayez-le en ligne!

Juste mon entrée obligatoire en hexagone ...

Pour plus de commodité, voici le code non plié:

   H [ @ ;
  ( . . . e
 < l . a ; . 
/ $ . > ; \ s
 N ; \ a c .
  > ) . ; ;
   ; . _ y

Comment ça marche:

Le programme commence par H, puis nous passons à IP # 5. Cette adresse IP commence dans le coin ouest, rebondissant et bouclant lors de l'exécution (en fait) ;a;y;s;(donc nous l'avons imprimée Hays). Ensuite , nous obtenons sincrémenté tpar un )et imprimé, puis nous passons Ne...(cavant d’atteindre a;c;(toujours rebondissant autour d’une petite partie de l’hexagone). Le programme touche le _, reflète à travers \à lqui obtient décrémenté à unk par (, qui passe par une autre \avant d' être imprimé et le programme se termine de la sur @.

Version verbeuse


3
Cette langue me fait toujours craquer. Je t'aime pour ça.
phroureo

Mon cerveau explose en ce moment. J'essayais de comprendre cela assez pour déchiffrer le code, mais YEESH man. Quel genre de gars tordu compose cela ??
phroureo

@phroureo ...> _>
Martin Ender

Après que votre réponse soit en sécurité, pouvez-vous me donner une étape par étape sur ce qu'il fait? (Ou si vous avez déjà une étape par étape quelque chose de similaire, pointez-moi là?)
phroureo

1
@phroureo Cela ne me dérange pas d'ajouter une explication sur le programme des flics avant qu'il ne soit en sécurité, et je ne pense pas que je le revendiquerai de toute façon (je ne suis pas très enthousiaste à l'idée de remporter mon propre défi avec une soumission que j'ai à peine mise. aucun effort dans). Je vais essayer d'ajouter l'explication demain. En attendant, je suis heureux de vous aider avec Hexagony dans le salon de discussion esolangs .
Martin Ender

10

Brain-Flak , 146 octets ( fissuré )

([((((()()())){}){}){}](()([()](()({}([((((()()()){})))[]])[]({}({})[{}]()({}((()(({}){}){}){}){}())))[][][][][][]))[]))(((()[]){}){({}[()()])}{})

Essayez-le en ligne!

Solution prévue, 80 octets

([((((()()())){}){}){}](()([()](()({}([((((()()()){})))[]])[]({}({})[{}]()({}((()(({}){}){}){}){}())))[][][][][][]))[]))(((()[]){}){({}[()()])}{})
( ((   )(                  [(  (( (         )()()){})) []]   ({}(  )    ( (  ( ()(({}){}){}){}){}())))            ))    (((()[]){}){({}[()  ])}{})


8

JavaScript, 95 octets (ES6), fissuré

Une fonction renvoyant une chaîne.

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

Démo "Haystack"


Très beau puzzle. Cracked
ShreevatsaR

8

Haskell , 168 bytes ( Fissuré par nimi )

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"

Essayez-le en ligne! L' évaluation l'identificateur hrenvoie la chaîne "Haystack", après quelques suppressions des hrendements "Needle".


1
Fissuré . C'était assez amusant à résoudre.
nimi


4

Hexagone , 32 octets.Fissuré

Je ne pouvais pas résoudre Martin , alors je poste le mien.

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

Essayez-le en ligne!

Ici, il est formaté:

   ] ; N .
  @ c l ; e
 @ ; ; ( \ H
/ ; y a ; _ .
 > s . ; t /
  / < . _ .
   . . . .

Mon objectif avec ceci était que les deux solutions utilisent autant d'adresses IP que possible, j'en ai 6 pour Needle et seulement 5 pour Haystack .




3

Java (OpenJDK 8) , 226 217 octets ( fissuré )

Premier golf de code, probablement très facile mais c'était un défi amusant!

String d(){int h=3609000-5055+911,m=557558,s=15441301-157*10000;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!


Votre TIO ne fonctionne pas. Vous voudrez peut-être changer le return new Main().d();en System.out.print(new Main().d());dans la méthode principale.
Kevin Cruijssen

@KevinCruijssen Merci pour le heads-up!
Luke Stevens


3

dc , 148 octets ( fissuré )

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

Essayez-le en ligne!

C'est assez simple, mais j'espère que ce sera au moins un peu amusant à résoudre: з



2

JavaScript, 119 octets (ES6), fissuré

Une fonction renvoyant une chaîne. Assez long et pas si difficile, mais heureusement amusant.

_=>(+{}+['H'])[+[3]]+(+[][[]]+[])[+!!3]+(+[][[]]+['y'])[3]+(+[][[]]+['s'])[-~2]+(~![]+['t'])[2]+(+[][[]]+[])[+!!3]+'ck'

Démo "Haystack"


Fissuré . Jsfuck github README.md a beaucoup aidé.
mon pronom est monicareinstate

2

Python 2.7.2, 103/117 octets, fissuré

Version de la fonction (117 octets):

def e():
 a,b,s=20070763850923833476353301471991752,0b1010100010010011,""
 while a>0:
  s=chr(a%b)+s
  a//=b
 print s

Version du programme (103 octets):

a,b,s=20070763850923833476353301471991752,0b1010100010010011,""
while a>0:
 s=chr(a%b)+s
 a//=b
print s

Cela devrait Haystackbien imprimer . Testé sur Python Fiddle .

Btw c'est la première tentative.

Vous ne savez pas si la version du programme est considérée comme un extrait, je mets donc les deux versions ici.



2

Python 2.7.10 avec Numpy 1.12.1, 208 209 octets ( fissuré) )

Il semble qu’il existe une aiguille et une botte de foin dans Numpy! Voici la botte de foin; voyez si vous pouvez trouver l'aiguille. J'espère que vous aurez autant de plaisir à chercher l'aiguille que de le cacher.

import numpy
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))])

Il produit comme spécifié:

Haystack

Vous pouvez repl.it .


Pas que ça compte vraiment, mais c'est 209 octets, pas 208
caird coinheringaahing


2

Java 8, 321 octets, fissuré

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

Essayez ici.

Plus lisible:

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

Je ne suis pas sûr que ce soit trop long / dur .. Encore une fois, Java en général est assez long pour commencer, donc cacher l’Aiguille correctement augmente bien sûr le nombre d’octets.
Si personne ne le craque, j ' Ajoutez plus tard quelques astuces spoiler.


1
Le TIO a un caractère de moins, mais craqué dans les deux sens.
jacobly

2

Ruby , 185 octets, fissuré par cab404

x='yGwztsPXhxDkBKlCYdFjQnpUROfoHvqmTgbaJSLcEiZrIAuMVNW'
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!

Je vais essayer de trouver quelque chose de sournois, mais pour l’instant, voici un essai de «simple mais odieux».



1
that was fun ^^
cab404

Well done! Glad brute force wasn't too boring.
histocrat

2

Brain-Flak, 188 bytes (Cracked)

I only just saw Funky Computer Man's answer As I posted this.

It is somewhat obfuscated.

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

Try it online!

Intended solution, 96 bytes:

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

Try it online!


You mean somewhat obfuscated beyond just normal Brain-Flak obfuscation.
Gryphon - Reinstate Monica

@Gryphon Yes, I added some extra bits.
H.PWiz


2

T-SQL, 757 characters CRACKED

Apologies for deleting my previous answer--I edited it too many times as I obfuscated, and didn't want to give anything away. :)

In any case, obfuscating in SQL is a bit difficult, unless you want to do crazy stuff like this, and I wasn't that invested.

Also, I unabashedly do not apologize for naming my variables after Dota.

SQL Fiddle

create table a(l int,c int)
insert into a values (1,10),(2,1),(3,8),(4,0)
go
;CREATE FUNCTION b(@ varchar(max)) returns varchar(max) as
begin return 'char('+@+'),'''','end 
go
;CREATE FUNCTION 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))
returns varchar(max) as 
begin
return replace(replace(replace(replace(@,@a,@b),@c,@d),@e,@f),@g,@h)
end
declare @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)

If this is the easiest answer in this thread, you're probably right. :P It's hard to trick SQL.


shouldn't 'haystack' be 'Haystack'?
cab404

SQL doesn't handle capitalization very nicely (unless you specifically define the schema that it's supposed to use for the letters). I opted not to. :P
phroureo

1
@phroureo The spec does explicitly state that it must be capitalized correctly.
LyricLy

Alright, I fixed the code above (although I didn't necessarily fix the SQL Fiddle, since it works the same).
phroureo

1
cracked (I'm sorry...)
Robert Fraser

1

Ly, 40 bytes, cracked

(78)"e"&p"Ha"s"yst"l"ck"&o(100)"l"l'&'o;

Try it online!

Oh boy, another Ly CNR submission. These haven't worked very well historically (possibly due to me and not the language), but we'll see how this fares and today is no exception.

Solution:

(78)"e"sl(100)"l"l&o;, remove XXXXXX XXXXX XXXXXX X X with seven leading spaces



1

Java, 345 bytes, Cracked

import java.util.*;interface Main{static void main(String[]args){Stack<Hay>s=new Stack();s.add(new Needle());for(int i=0;i<1000;i++)s.add(new Hay());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());}}

Try it online!

Really long and probably easy to crack, but at least it's got a Stack<Hay>!


very nice one! but yes, pretty easy to crack.
Titus

0

TI-BASIC, 119 bytes (Safe)

Output stored in Ans.

"TIBASIC→Str1
length(Ans→X
Str1
For(I,X,2(7-4not(X-1
Ans+sub("ACDEHKLNSTY",inString("ABCDEFGHIJK",sub("KCBADAEDJDHIGF",1+remainder(11I-1,14),1)),1
End
sub(Ans,1+X,length(Ans)-X

Solution

Remove characters from Str1 to give it a length of 1.

"C→Str1
length(Ans→X
Str1
For(I,X,2(7-4not(X-1
Ans+sub("ACDEHKLNSTY",inString("ABCDEFGHIJK",sub("KCBADAEDJDHIGF",1+remainder(11I-1,14),1)),1
End
sub(Ans,1+X,length(Ans)-X


0

Aceto, 154 bytes (Safe)

              27\'dNU   QJi9MLJ€{{x(}]J{'!o∑€xiDQxsJ(]sicpicp1.2sJJicp90I.2+D/edxi-'>xd80J0IJicx'NIx5sJsJidcpIcpL7sssJicpei7+ UUdJicpLI7sJicpx'p\p9*coJcU'p+\p   

Try it online!

'N'ed'd80J0IJic'eUpppppp Try it online!

Explanation:
<space>*2 - Two spaces for the hilbert curve to work right
'N pushes 'N' onto the stack
'e pushes 'e'
d duplicates it
'd pushes d
80 pushes 8, 0
J concats top two values
0I pushes 0, pops, increments, pushes back on, net effect: pushes 1
J concats to '108'
i converts to integer
c pops and pushes ascii equiv on stack
'e pushes 'e' (again)
U reverses the stack
and the p's print out the stack
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.