Esconder a agulha no palheiro (policiais)

38

Isso faz parte de um desafio de . Vá aqui para a parte dos ladrões.

O desafio da polícia

Você deve escrever um programa ou função em um idioma de sua escolha, que produza a string Haystack. No entanto, deve ser possível remover alguns subconjuntos de caracteres do seu programa (sem reordenar o restante), de modo que a sequência resultante também seja um programa válido no mesmo idioma, que será impresso Needle. Ambos os programas / funções podem opcionalmente imprimir uma única nova linha à direita (independentemente uma da outra), mas nada mais. A saída diferencia maiúsculas de minúsculas e deve seguir a caixa exata fornecida.

Seu objetivo, é claro, é esconder a "agulha" muito bem. Mas observe que seu envio pode ser quebrado com qualquer solução válida, não apenas a que você pretendia.

Por favor inclua na sua resposta:

  • O idioma (e versão, se relevante) do seu envio.
  • O tamanho do programa Haystack em bytes.
  • O próprio programa Haystack.
  • O método de saída, se não for STDOUT.
  • Se possível, um link para um intérprete / compilador on-line para o idioma escolhido.

Seu envio pode ser um programa ou função, mas não um trecho e você não deve assumir um ambiente REPL. Você não deve receber nenhuma entrada e pode enviar via STDOUT, valor de retorno da função ou parâmetro de função (saída).

Ambos os programas / funções precisam ser concluídos em 5 segundos em uma máquina de mesa razoável e precisam ser determinísticos. Você não deve usar built-ins para hash, criptografia ou geração de números aleatórios (mesmo que você propague o gerador de números aleatórios para um valor fixo).

No interesse da justiça, deve haver um intérprete ou compilador disponível gratuitamente para o idioma escolhido.

Uma resposta será quebrada se o programa Needle for encontrado. Se sua resposta não tiver sido respondida por 7 dias, você poderá revelar o programa de agulhas pretendido na sua resposta, o que torna sua submissão segura. Contanto que você não revele sua solução, ela ainda poderá ser quebrada por ladrões, mesmo que os sete dias já tenham passado. O programa mais curto e seguro do Haystack (medido em bytes) vence.

Exemplos

Aqui estão alguns exemplos simples em diferentes idiomas:

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]

Observe que o subconjunto de caracteres removidos não precisa ser contíguo.

Envios sem rachaduras

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

Martin Ender
fonte
1
Relacionado. (A principal diferença é que os programas implementaram sequências OEIS e permitiram que o programa quebrado produzisse qualquer sequência OEIS diferente, o que dificulta muito a polícia de se proteger contra rachaduras não intencionais. Também permitiu que os ladrões roubassem rachaduras de outras roubadores de encontrar soluções mais curtos).
Martin Ender
Eu faria isso no Haystack, mas ele não tem documentação e eu cbb olhando através do código :(
Okx
1
O trecho de pilha recebe o errado comprimento para esta resposta
mbomb007
1
@ kamoroso94 Sim, mas isso significa que você pode encerrar os programas candidatos após 5 ou 6 segundos, porque se eles não terminaram, não podem ser a solução que você está procurando.
Martin Ender

Respostas:

16

Palheiro , 84 bytes, Rachado

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

Experimente online!

Isso parece (para mim) um pouco complicado, mas se você encontrar o subconjunto certo, é um pouco fácil demais ... oh bem, apenas para começar: P

HyperNeutrino
fonte
Rachado .
Fireflame241
1
@icrieverytim 1. oo arrefecer ambos são glifos Unicode 2. o atual é mais cientificamente precisas
HyperNeutrino
1. Sim, eu sei, eles parecem muito legais. : A PI os encontrou nesta mina de ouro de um bloco Unicode . Não se surpreenda se eles acabarem na página de códigos do Neon. 2. TBH, o antigo parecia melhor IMO. : P
totallyhuman
1
@HyperNeutrino Por que você tem interesse em benzeno?
9603 Michthan
3
@Michthan Considerando que eu sou um neutrino, que é uma boa pergunta, mas eu não sei: P
HyperNeutrino
12

Hexagonia , 37 bytes

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

Experimente online!

Apenas minha entrada obrigatória no Hexagony ...

Por conveniência, eis o código desdobrado:

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

Como isso funciona:

O programa inicia He passamos para o IP nº 5. Esse IP começa no canto oeste, saltando e girando enquanto executa (com efeito) ;a;y;s;(então nós imprimimos Hays). Em seguida, sé incrementado para um tpor )e impresso, depois passamos Ne...(cantes de chegar a a;c;(ainda pulando em torno de uma pequena seção do hexágono). O programa atinge o _, reflete-se por meio \de lque fica diminuída a um kpor (que passa através de outro \antes de serem impressos e os termina do programa na @.

Versão detalhada

Martin Ender
fonte
3
Essa linguagem ainda me incomoda. Eu te amo por isso.
Phrereo # 9/17
Meu cérebro está explodindo agora. Eu estava tentando descobrir o suficiente para decifrar o código, mas YEESH cara. Que tipo de cara distorcido faz isso?
Phrereo 13/10
@phroureo ...> _>
Martin Ender
Depois que sua resposta estiver segura, você pode me dar um passo a passo do que está fazendo? (Ou, se você já tem um passo-a-passo em algum lugar um algo semelhante, apontar-me lá?)
phroureo
1
@phroureo Eu não me importo de adicionar uma explicação do programa policial antes que seja seguro, e acho que não vou reivindicá-lo de qualquer maneira (não estou muito interessada em vencer meu próprio desafio com uma inscrição que eu mal coloco qualquer esforço). Vou tentar adicionar a explicação amanhã. Enquanto isso, fico feliz em ajudá-lo com a Hexagony na sala de bate-papo da esolangs .
Martin Ender
10

Brain-Flak , 146 bytes ( Rachado )

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

Experimente online!

Solução pretendida, 80 bytes

([((((()()())){}){}){}](()([()](()({}([((((()()()){})))[]])[]({}({})[{}]()({}((()(({}){}){}){}){}())))[][][][][][]))[]))(((()[]){}){({}[()()])}{})
( ((   )(                  [(  (( (         )()()){})) []]   ({}(  )    ( (  ( ()(({}){}){}){}){}())))            ))    (((()[]){}){({}[()  ])}{})
Assistente de Trigo
fonte
Cracked
Nitrodon
8

JavaScript, 95 bytes (ES6), Rachado

Uma função retornando uma string.

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

Demonstração "Haystack"

Arnauld
fonte
Muito bom quebra-cabeça. Rachado
ShreevatsaR
8

Haskell , 168 bytes ( Rachado por 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"

Experimente online! A avaliação do identificador hretorna a sequência "Haystack", após algumas exclusões hrender "Needle".

Laikoni
fonte
1
Rachado . Foi muito divertido de resolver.
nimi
4

Hexagonia , 32 bytes. Rachado

Não consegui resolver o Martin , então estou publicando o meu.

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

Experimente online!

Aqui está formatado:

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

Meu objetivo era que ambas as soluções usassem o maior número possível de IPs, obtive 6 para Needle e apenas 5 para Haystack .

H.PWiz
fonte
Rachado
boboquack
3

Pitão , 44 bytes ( Rachado )

Kr."Dn2û"2sf!/+rrK2 2r."EL8"2Tr."AhÐP­®Z"2

Experimente aqui.

Mr. Xcoder
fonte
Deve ser fácil de crack, apenas uma primeira tentativa :-)
Mr. Xcoder
@ _ @ Por que há código Jelly
Leaky Nun
rachado
Leaky Nun
3

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

Primeiro código de golfe, provavelmente muito fácil, mas foi um desafio divertido!

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

Experimente online!

Luke Stevens
fonte
Seu TIO não funciona. Você pode alterar o return new Main().d();para System.out.print(new Main().d());no método principal.
Kevin Cruijssen 9/10
@KevinCruijssen Obrigado pelo alerta!
Luke Stevens
1
Rachado .
leite
3

dc , 148 bytes ( rachado )

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

Experimente online!

É bastante simples, mas espero que seja pelo menos um pouco divertido de resolver:

cab404
fonte
Cracked
agtoever
2

JavaScript, 119 bytes (ES6), Rachado

Uma função retornando uma string. Muito longo e não tão difícil, mas espero divertido.

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

Demonstração "Haystack"

Arnauld
fonte
Rachado . O jsfuck github README.md ajudou muito.
meu pronome é monicareinstate
2

Python 2.7.2, 103/117 bytes, Rachado

Versão da função (117 bytes):

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

Versão do programa (103 bytes):

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

Isso deve imprimir Haystackbem. Testado em Python Fiddle .

Btw esta é a primeira tentativa.

Não tenho certeza se a versão do programa é contada como um trecho, então coloquei as duas versões aqui.

Shieru Asakoto
fonte
Rachado .
21917 Jacobly
2

Python 2.7.10 com Numpy 1.12.1, 208 209 bytes ( quebrado )

Parece que há uma agulha e um palheiro no Numpy! Aqui está o palheiro; veja se você consegue encontrar a agulha. Espero que você se divirta tanto procurando a agulha quanto eu a escondi.

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

Ele gera como especificado:

Haystack

Você pode repl.it .

de qualquer maneira
fonte
Não que isso realmente importa, mas isso é de 209 bytes, não 208
caird coinheringaahing
Rachado .
9119 Jacobly
2

Java 8, 321 bytes, Rachado

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

Experimente aqui.

Mais legível:

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

Not sure if it's too long/hard.. Then again, Java in general is pretty long to begin with, so hiding the 'Needle' properly of course increases the byte-count quite a bit..
If no one cracks it, I'll add some spoiler-tips later on.

Kevin Cruijssen
fonte
1
The TIO has one fewer character, but cracked either way.
jacobly
2

Ruby, 185 bytes, cracked by 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

Try it online!

I'll try to come up with something sneaky, but for now here's a try at "simple but obnoxious."

histocrat
fonte
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!

H.PWiz
fonte
You mean somewhat obfuscated beyond just normal Brain-Flak obfuscation.
Gryphon - Reinstate Monica
@Gryphon Yes, I added some extra bits.
H.PWiz
Cracked.
Nitrodon
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.

phroureo
fonte
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

LyricLy
fonte
Cracked.
Nitrodon
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>!

Jonathan S.
fonte
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
kamoroso94
fonte
0

PHP, 44 bytes, Cracked

fairly easy to crack; but I like it.

for($i=~1;$c=H_aNyesetdalcek[$i+=2];)echo$c;

Run with -nr or try it online.

Titus
fonte
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
FantaC
fonte