将针藏在干草堆中(警察)


38

这是挑战的一部分。去这里抢劫犯的一部分。

警察的挑战

您应该使用自己选择的语言编写程序或函数,该程序或函数将输出字符串Haystack。但是,必须有可能从程序中删除某些字符子集(而无需重新排序其余字符),以使生成的字符串也是使用相同语言的有效程序,而将其打印出来Needle。这两个程序/功能都可以选择打印一条尾随的换行符(彼此独立),但没有其他内容。输出区分大小写,并且必须遵循提供的确切大小写。

当然,您的目标是很好地隐藏“针”。但是请注意,可以使用任何有效的解决方案来破解提交的内容,而不仅仅是您想要的解决方案。

请在您的答案中包括:

  • 您提交的语言(和相关版本)。
  • Haystack程序的大小(以字节为单位)。
  • Haystack程序本身。
  • 如果不是STDOUT,则为输出方法。
  • 如果可能,请提供指向您所选择语言的在线口译/编译器的链接。

您提交的内容可能是程序或功能,但不能是摘要,并且您不得采用REPL环境。您不得输入任何内容,而可以通过STDOUT,函数返回值或函数(输出)参数进行输出。

两种程序/功能都必须在合理的台式机上在5秒内完成,并且需要确定性。您不得使用内置函数进行散列,加密或随机数生成(即使您将随机数生成器植入固定值)。

为了公平起见,必须为您选择的语言提供免费的解释器或编译器。

如果找到Needle程序,答案将被破解。如果您的答案在7天内没有被破解,则可以在答案中显示预期的Needle程序,从而确保提交的内容安全。只要您不公开解决方案,即使7天已经过去,它也可能会被强盗破解。最短的安全 Haystack程序(以字节为单位)获胜。

例子

这是几个使用不同语言的简单示例:

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]

请注意,已删除字符的子集不必是连续的。

完整的提交

<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
有关。(主要区别在于,一个程序具有实现OEIS序列的功能,并允许破解程序输出任何不同的OEIS序列,这使警察很难防范意外裂缝。这还使强盗可以窃取其他裂缝通过寻找更短的解决方案强盗)。
马丁安德

我会在Haystack中进行此操作,但没有文档,我会查看代码:(
Okx


1
堆栈代码段得到的长度错误针对此答案
mbomb007 '17

1
@ kamoroso94是的,但这意味着您可以在5或6秒钟后终止候选程序,因为如果尚未完成,它们就不是您要寻找的解决方案。
马丁·恩德

Answers:


16

干草堆,84字节,破解

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

在线尝试!

(对我而言)这看起来有些令人费解,但是如果您找到合适的子集,那就太容易了...哦,好了,只是让我们开始吧:P



1
@icrieverytim 1.太酷了,它们都是unicode字形2.当前的一个更科学准确
-HyperNeutrino

1.是的,我知道,它们看起来真的很酷。:PI在Unicode区块的金矿中找到了它们。如果它们最终出现在Neon的代码页中,请不要感到惊讶。2. TBH,老旧的IMO看上去更好。:P
完全人类的,2017年

1
@HyperNeutrino为什么您对苯感兴趣?
Michthan '17

3
@Michthan考虑到我是一个中微子,这是一个很好的问题,但我不知道:P
HyperNeutrino

12

六边形,37字节

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

在线尝试!

只是我必须的六角形入口...

为了方便起见,下面是展开的代码:

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

工作原理:

该程序从开始H,然后移至IP#5。该IP从西角开始,在执行(实际上)时反弹并环绕;a;y;s;(因此,我们已打印Hays)。然后s增加到一个tby )并进行打印,然后我们通过Ne...(c之前到达a;c;(仍在六边形的一小部分附近反弹)。程序命中_,反映\l递减到一个kby (\在打印之前穿过另一个,程序终止于@

详细版本


3
这种语言仍然使我难以接受。我爱你
phroureo '17

我的大脑现在正在爆炸。我试图弄清楚这一点足以破解代码,但YEESH伙计。什么样的扭曲男人弥补了这一点?
phroureo

@phroureo ...> _>
Martin Ender

在您的答案是安全的之后,您能否逐步介绍我的操作?(或者,如果您已逐步找到某个类似的东西,请问我在那儿吗?)
phroureo

1
@phroureo我不介意在安全之前添加一个关于cop程序的说明,而且我也不认为我会声称它是安全的(我不太想通过自己提出的意见来赢得自己的挑战任何努力)。我明天尝试添加解释。同时,我很高兴在esolangs聊天室为您提供Hexagony的帮助。
Martin Ender

10

Brain-Flak,146字节(破解

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

在线尝试!

目标解决方案,80字节

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


8

JavaScript,95字节(ES6),已破解

返回字符串的函数。

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

“干草堆”演示


很好的难题。破解
ShreevatsaR

8

Haskell,168个字节(由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"

在线尝试!评估所述标识符h返回字符串"Haystack",一些缺失后h的产率"Needle"


1
破解。解决起来很有趣。
nimi




3

的Java(OpenJDK的8) 226个 217字节(裂纹

有史以来第一次打高尔夫球,可能很简单,但这是一个有趣的挑战!

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

在线尝试!


您的TIO无效。你可能想改变return new Main().d();,以System.out.print(new Main().d());在主法。
凯文·克鲁伊森

@KevinCruijssen感谢您的注意!
路加·史蒂文斯

1
破解
牛奶

3

dc,148字节(破解

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

在线尝试!

这很简单,但是我希望解决起来至少会有点有趣:



2

JavaScript,119字节(ES6),已破解

返回字符串的函数。时间很长,并不难,但希望很有趣。

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

“干草堆”演示


破解。jsfuck github README.md很有帮助。
某人

2

Python 2.7.2,103/117字节,已破解

函数版本(117字节):

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

程式版本(103位元组):

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

这应该打印Haystack良好。在Python Fiddle上测试。

顺便说一句,这是第一次尝试。

不知道程序版本是否被视为摘要,因此我将两个版本都放在这里。



2

Python的2.7.10与numpy的1.12.1,208个 209字节(破解

看来在Numpy 中有一个针一个干草堆!这是干草堆;看看是否可以找到Needle。我希望您在寻找“针头”方面和在隐藏它的过程中一样开心。

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

它按指定输出:

Haystack

你可以repl.it


并不是说它真的很重要,但这是209个字节,而不是208个字节
caird coinheringaahing 17-10-8


2

Java 8,321字节,已破解

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

不知道它是否太长/太硬。再说一遍,Java通常从开始就很长,因此正确隐藏“ Needle”当然会增加字节数。
如果没有人破解,我会稍后将添加一些扰流器提示。


1
TIO少了一个字符,但是无论哪种方式都可以破解
jacobly

2

Ruby,185个字节,由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

在线尝试!

我会尝试一些偷偷摸摸的东西,但是现在尝试一下“简单但令人讨厌”。



1
那很有趣^^
cab404

做得好!蛮横的蛮力并不是很无聊。
histocrat

2

Brain-Flak,188字节(已破解

当我发布此消息时,我只看到Funky Computer Man的回答

它有点模糊。

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

在线尝试!

预期的解决方案,96字节:

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

在线尝试!


您的意思是除了普通的Flak-Flak混淆之外还有些混淆。
狮ry-恢复莫妮卡

@Gryphon是的,我添加了一些额外的内容。
H.PWiz


2

T-SQL,已破解 757个字符

删除以前的答案很抱歉-混淆后,我对其进行了太多次编辑,并且不想透露任何内容。:)

在任何情况下,在SQL混淆是有点困难的,除非你想做些疯狂的东西,像这样,我是不是投资。

另外,我毫不掩饰地为Dota之后的变量命名而道歉。

SQL小提琴

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)

如果这是该线程中最简单的答案,那么您可能是对的。:P很难欺骗SQL。


“干草堆”不应该是“干草堆”吗?
cab404

SQL不能很好地处理大写字母(除非您专门定义应该用于字母的模式)。我选择不这样做。:P
phroureo '17

1
@phroureo规范确实明确声明必须正确将其大写。
LyricLy

好的,我修复了上面的代码(尽管我不一定要修复SQL Fiddle,因为它的工作原理相同)。
phroureo '17

1
破解(对不起...)
罗伯特·弗雷泽

1

Ly,40个字节,已破解

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

在线尝试!

哦,男孩,另一个Ly CNR提交者。从历史上看,这些方法的效果不是很好(可能是由于我的原因,而不是由于语言的原因),但是我们将看到这种情况,今天也不例外。

解:

(78)"e"sl(100)"l"l&o;XXXXXX XXXXX XXXXXX X X以七个前导空格删除



1

Java,345字节,已破解

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

在线尝试!

真的很长,可能很容易破解,但至少它有一个Stack<Hay>


非常好一个!但是是的,很容易破解。
泰特斯

0

TI-BASIC,119字节(安全)

输出存储在中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

删除中的字符,Str1使其长度为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个字节(安全)

              27 \'dNU QJi9MLJ€{{x(}] J {'!   

在线尝试!

'N'ed'd80J0IJic'eUpppppp 在线尝试!

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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.