Hide the Needle in the Haystack (Poliziotti)


38

Questo fa parte di una sfida di . Vai qui per la parte dei ladri.

La sfida della polizia

Dovresti scrivere un programma o una funzione in una lingua a tua scelta, che genera la stringa Haystack. Tuttavia, deve essere possibile rimuovere alcuni sottoinsiemi di caratteri dal programma (senza riordinare il resto), in modo che la stringa risultante sia anche un programma valido nella stessa lingua, che stampa Needleinvece. Entrambi i programmi / funzioni possono opzionalmente stampare una nuova riga finale (indipendentemente l'una dall'altra), ma nient'altro. L'output fa distinzione tra maiuscole e minuscole e deve seguire il case esatto fornito.

Il tuo obiettivo, ovviamente, è nascondere molto bene l '"ago". Ma tieni presente che il tuo invio può essere decifrato con qualsiasi soluzione valida, non solo quella che volevi.

Si prega di includere nella risposta:

  • La lingua (e la versione se pertinente) della tua richiesta.
  • La dimensione del programma Haystack in byte.
  • Il programma Haystack stesso.
  • Il metodo di output se non è STDOUT.
  • Se possibile, un collegamento a un interprete / compilatore online per la lingua scelta.

L'invio può essere un programma o una funzione, ma non uno snippet e non è necessario assumere un ambiente REPL. Non devi accettare alcun input e puoi emetterlo tramite STDOUT, valore di ritorno della funzione o parametro di funzione (out).

Entrambi i programmi / funzioni devono essere completati entro 5 secondi su una macchina desktop ragionevole e devono essere deterministici. Non è necessario utilizzare gli incorporamenti per hash, crittografia o generazione di numeri casuali (anche se si semina il generatore di numeri casuali su un valore fisso).

Nell'interesse dell'equità, ci deve essere un interprete o un compilatore liberamente disponibile per la lingua scelta.

Una risposta viene decifrata se viene trovato il programma Needle. Se la tua risposta non è stata decifrata per 7 giorni, potresti rivelare il programma Needle previsto nella tua risposta, il che rende la tua presentazione sicura. Fintanto che non rivelerai la tua soluzione, potrebbe essere comunque violata dai ladri, anche se i 7 giorni sono già passati. Vince il programma Haystack sicuro più breve (misurato in byte).

Esempi

Ecco un paio di semplici esempi in diverse lingue:

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]

Nota che il sottoinsieme di caratteri rimossi non deve essere contiguo.

Sottomissioni non crackate

<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
Relazionato. (La differenza principale è che uno aveva i programmi implementano sequenze OEIS e ha permesso al programma crackato di produrre qualsiasi sequenza OEIS diversa, il che rende molto più difficile per i poliziotti proteggersi da crepe involontarie. Ha anche permesso ai ladri di rubare crepe da altri rapinatori trovando soluzioni ancora più brevi.)
Martin Ender,

Lo farei su Haystack ma non ha documentazione e guardo attraverso il codice :(
Okx


1
Lo snippet di stack ottiene la lunghezza sbagliata per questa risposta
mbomb007,

1
@ kamoroso94 Sì, ma ciò significa che puoi terminare i programmi candidati dopo 5 o 6 secondi, perché se non hanno finito non possono essere la soluzione che stai cercando.
Martin Ender,

Risposte:


16

Pagliaio , 84 byte, Cracked

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

Provalo online!

Questo sembra (per me) piuttosto contorto, ma se trovi il sottoinsieme giusto è un po 'troppo facile ... vabbè, solo per iniziare: P



1
@icrieverytim 1. oo cool sono entrambi glifi Unicode 2. quello attuale è scientificamente più accurato
HyperNeutrino

1. Sì, lo so, sembrano davvero fantastici. : PI li ha trovati in questa miniera d'oro di un blocco Unicode . Non essere sorpreso se finiscono nella tabella codici Neon. 2. TBH, quello vecchio sembrava meglio IMO. : P
totalmente umano

1
@HyperNeutrino Perché ti interessa il benzene?
Michthan,

3
@Michthan Considerando che sono un neutrino, questa è una buona domanda, ma non lo so: P
HyperNeutrino

12

Hexagony , 37 byte

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

Provalo online!

Solo la mia voce Hexagony obbligatoria ...

Per comodità, ecco il codice spiegato:

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

Come funziona:

Il programma inizia con H, quindi passiamo a IP # 5. Questo IP inizia nell'angolo ovest, rimbalzando e avvolgendosi durante l'esecuzione (in effetti) ;a;y;s;(quindi abbiamo stampato Hays). Quindi sviene incrementato in un tda )e stampato, quindi passiamo attraverso Ne...(cprima di arrivare a;c;(ancora rimbalzando attorno a una piccola sezione dell'esagono). Il programma colpisce il _, riflette fino \al lquale viene decrementato in un kby (, che passa attraverso un altro \prima di essere stampato e il programma termina sul @.

Versione dettagliata


3
Questa lingua mi fa ancora impazzire. Ti amo per questo.
phroureo,

Il mio cervello sta esplodendo in questo momento. Stavo cercando di capirlo abbastanza per decifrare il codice, ma YEESH amico. Che tipo di ragazzo contorto lo compone ??
phroureo,

@phroureo ...> _>
Martin Ender,

Dopo che la tua risposta è sicura, puoi darmi un passaggio dettagliato su cosa sta facendo? (O se hai già uno step-by-step da qualche parte qualcosa di simile,
indicami

1
@phroureo Non mi dispiace aggiungere una spiegazione del programma della polizia prima che sia sicuro, e non penso che lo rivendicherò comunque in modo sicuro (non sono troppo entusiasta di vincere la mia sfida con una presentazione che ho messo a malapena qualsiasi sforzo in). Proverò ad aggiungere la spiegazione domani. Nel frattempo, sono felice di aiutarti con Hexagony nella chat room di esolangs .
Martin Ender,

10

Brain-Flak , 146 byte ( Cracked )

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

Provalo online!

Soluzione prevista, 80 byte

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


8

JavaScript, 95 byte (ES6), crackato

Una funzione che restituisce una stringa.

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

Demo "Haystack"


Puzzle molto bello. Cracked
ShreevatsaR,

8

Haskell , 168 byte ( Cracked by 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"

Provalo online! La valutazione dell'identificatore hrestituisce la stringa "Haystack", dopo alcune hrese di eliminazioni "Needle".


1
Cracked . È stato abbastanza divertente da risolvere.
nimi,


4

Esagonia , 32 byte. Cracked

Non sono riuscito a risolvere quello di Martin , quindi sto postando il mio.

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

Provalo online!

Qui è formattato:

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

Il mio obiettivo era che entrambe le soluzioni usassero il maggior numero possibile di IP, ne avevo 6 per Needle e solo 5 per Haystack .




3

Java (OpenJDK 8) , 226 217 byte ( Cracked )

Il primo golf di sempre, probabilmente molto semplice, ma è stata una sfida divertente!

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

Provalo online!


Il tuo TIO non funziona. Potresti voler cambiare return new Main().d();in System.out.print(new Main().d());nel metodo principale.
Kevin Cruijssen,

@KevinCruijssen Grazie per il testa a testa!
Luke Stevens,


3

dc , 148 byte ( crackato )

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

Provalo online!

È piuttosto semplice, ma spero che sarà almeno un po 'divertente da risolvere: з



2

JavaScript, 119 byte (ES6), crackato

Una funzione che restituisce una stringa. Abbastanza lungo e non così difficile, ma spero divertente.

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

Demo "Haystack"


Cracked . Il jsfuck github README.md ha aiutato molto.
mio pronome è monicareinstate l'

2

Python 2.7.2, 103/117 byte, Cracked

Versione funzione (117 byte):

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

Versione del programma (103 byte):

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

Questo dovrebbe stampare Haystackbene. Testato su Python Fiddle .

A proposito, questo è il primo tentativo.

Non sono sicuro che la versione del programma sia conteggiata come snippet, quindi ho inserito entrambe le versioni qui.



2

Python 2.7.10 con Numpy 1.12.1, 208 209 byte ( crackato )

Sembra che ci sia un ago e un pagliaio in Numpy! Ecco il pagliaio; vedere se riesci a trovare l'ago. Spero che ti sia divertito tanto a cercare l'Ago quanto a nasconderlo.

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

Emette come specificato:

Haystack

Puoi sostituire.it .


Non che sia davvero importante, ma sono 209 byte, non 208
caird coinheringaahing


2

Java 8, 321 byte, Cracked

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

Provalo qui.

Più leggibile:

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

Non sono sicuro che sia troppo lungo / difficile .. Ancora una volta, Java in generale è piuttosto lungo per cominciare, quindi nascondere correttamente "Needle" ovviamente aumenta il conteggio dei byte un bel po '..
Se nessuno lo rompe, io " In seguito aggiungerò alcuni suggerimenti per lo spoiler.


1
Il TIO ha un carattere in meno, ma è rotto in entrambi i modi.
Jacobly,

2

Rubino , 185 byte, rotto da 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

Provalo online!

Proverò a trovare qualcosa di subdolo, ma per ora ecco un tentativo di "semplice ma odioso".



1
che è stato divertente ^^
cab404

Molto bene! La forza bruta felice non era troppo noiosa.
istocratico,

2

Brain-Flak , 188 byte ( Cracked )

Ho appena visto la risposta di Funky Computer Man .

È un po 'offuscato.

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

Provalo online!

Soluzione prevista, 96 byte:

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

Provalo online!


Intendi in qualche modo offuscato oltre la normale offuscamento del cervello-fiocco.
Gryphon - Ripristina Monica il

@Gryphon Sì, ho aggiunto alcuni bit extra.
H.Piz,


2

T-SQL, 757 caratteri CRACKED

Ci scusiamo per aver eliminato la mia risposta precedente: l'ho modificata troppe volte mentre mi offuscavo e non volevo dare via nulla. :)

In ogni caso, offuscare in SQL è un po 'difficile, a meno che tu non voglia fare cose folli come questa , e non ero così investito.

Inoltre, spudoratamente non mi scuso per il nome delle mie variabili dopo 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)

Se questa è la risposta più semplice in questa discussione, probabilmente hai ragione. : P È difficile ingannare SQL.


il "pagliaio" non dovrebbe essere il "pagliaio"?
cab404,

SQL non gestisce molto bene le maiuscole (a meno che non si definisca specificamente lo schema che dovrebbe utilizzare per le lettere). Ho deciso di non farlo. : P
phroureo,

1
@phroureo La specifica afferma esplicitamente che deve essere capitalizzata correttamente.
Lirico

Bene, ho corretto il codice sopra (anche se non ho necessariamente risolto il violino SQL, poiché funziona allo stesso modo).
phroureo

1
incrinato (mi dispiace ...)
Robert Fraser,

1

Ly , 40 byte, incrinato

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

Provalo online!

Oh ragazzo, un'altra presentazione di Ly CNR. Questi non hanno funzionato molto bene storicamente (forse a causa mia e non della lingua), ma vedremo come queste tariffe e oggi non fanno eccezione.

Soluzione:

(78)"e"sl(100)"l"l&o;, rimuovi XXXXXX XXXXX XXXXXX X Xcon sette spazi iniziali



1

Java , 345 byte, 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());}}

Provalo online!

Davvero lungo e probabilmente facile da decifrare, ma almeno ha un Stack<Hay>!


molto bello! ma sì, abbastanza facile da decifrare.
Tito

0

TI-BASIC, 119 byte (sicuro)

Uscita memorizzata 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

Soluzione

Rimuovi personaggi da Str1per assegnargli una lunghezza di 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 byte (sicuro)

              27 \ 'dNU QJi9MLJ € {{x (}] J {'! O∑ € xiDQxsJ (] sicpicp1.2sJJicp90I.2 + D / edxi - '> xd80J0IJicx'NIx5sJsJidcpIcpL7sssJicpei7 + UJJppc   

Provalo online!

'N'ed'd80J0IJic'eUpppppp Provalo 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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.