건초 더미에서 바늘 찾기 (고무)


18

이것은 도전의 일부입니다 . 경찰 부분은 여기 로가

강도의 도전

Haystack 프로그램에서 문자의 하위 집합을 제거하여 경찰의 답변을 해독하여 Needle대신 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]

제거 된 문자의 하위 집합이 연속적 일 필요는 없습니다.


강도 사용 hashing, encryption or random number generation이 허용 된다면 ? (작지만 가능)
l4m2

답변:


11

자바 스크립트, 85 바이트 (ES6)

Arnauld의 답변에 균열

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

"니들"데모

설명

원래 기능은 다음과 같습니다.

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

다음과 같이 더 읽기 쉽습니다.

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

참고 때 n=21625674, 다음 n.toString(35)입니다 'eedle'.

입력의 35는 서브 세트로 변경 될 수 없습니다 (모든 문자 'del'을 포함 할 수있을 정도로 큰베이스를 원하기 때문에 22 이상의베이스가 필요합니다). 숫자가 변경 그래서입니다 74837258394056219, 268435455그리고 124038877. 우리는 그것들을 원래 숫자의 숫자의 부분 집합으로 형성된 숫자 a, b, c로 대체하여 함수가 35 번으로 g(k) = (k * a & b)시작 k=35하고 반복 된 다음 c로 XOR되었습니다 21625674.

이 하나를 들어, 길이 (최대 작은만큼, 조금 생각 후 a길이 (17)을 가지고, b그리고 c길이 9가), 난 그냥 무차별를 사용 :-) 썼다 는 C ++를 프로그램을 모든 가능한 번호를 생성 a, b, c부분 집합으로 형성 원래 숫자의 반복, 모든 통해 a하고 b, 체크 필수 여부를 c설정했다. 약 15 초에서 실행하고있는 유일한 출력은 a=4853461, b=268435455, c=12408877(수 판명는 b변경할 필요가 없습니다). 이 기능을 뒤집는 더 영리한 방법이 있는지 확실하지 않습니다.



5

Brain-Flak , 96 바이트

균열 펑키 컴퓨터 남자의 대답 .

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

온라인으로 사용해보십시오!

이것은 재미있는 도전이었습니다.

변환 시작 부분에 -24 ya원래의 지금 변환하는 데 사용됩니다 eM다음으로 변환됩니다, N에 전체 최종 루프를 변경하여 장소에 ()). 첫 번째 푸시 된 문자 ke6을 추가하는 푸시-팝을 제거함으로써 간단히 변경되었습니다 . 나머지는 대부분 제자리에 떨어졌으며, 그 과정에서 약간의 유머 실수가 발생했습니다 (하나의 프로그램이 포함 된 프로그램 포함 Meddle).

두 프로그램의 비교 :

Haystack: ([((((()()())){}){}){}](()([()](()({}([((((()()()){})))[]])[]({}({})[{}]()({}((()(({}){}){}){}){}())))[][][][][][]))[]))(((()[]){}){({}[()()])}{})
Needle:   ([((((()()())){}){}){}](() [()]   ({}([ (((()()()){})) []])[]({}({}     ()(  ((()(({}){}){}){}){}())))[]              ))   ()  )

나는 그것이 같은 끝날 것이라고 확신했다
H.PWiz

그것은 확실히 작동 하지만, 어떻게 든 N78 대신 77 이라는 것을 스스로 확신 시켰기 때문에 그것을 잡지 못했습니다.
Nitrodon

어쨌든 당신은 더 짧습니다.
H.PWiz

재미있는 해결책! 원한다면 원하는 게시물을 원래 게시물에 추가했습니다.
밀 마법사

5

하스켈

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

온라인으로 사용해보십시오!

원본 코드 :

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"

제거 된 문자를 밑줄로 교체 :

___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____"

구성 방법 Needle: 코드 끝의 문자열이 단어로 분할됩니다. 각 단어의 첫 번째 문자는 단어에 문자가있는 횟수만큼 증가합니다 (예 : Haysta-> Hplus 6 chars->) N.


5

Hexagony , 17 바이트, H.PWiz

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

온라인으로 사용해보십시오!

원본과 비교 :

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

심상:

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

설명

보너스 마크-6 개의 IP와 셀 중 하나를 제외한 모든 IP를 사용합니다!

컬러 패스

IP # 0은 검은 색 경로를 따라로 향하면서 시작합니다 ].
그런 다음 IP # 1로 전환하여 빨간색 경로를 따라 인쇄 N하고 N;다시 인쇄 ]합니다.
우리 푸른 경로 헤드 기억 IP # 2에 다음 전이 e후 녹색 경로를 따라, 현재의 메모리 셀 (AT 반사에 실행 \) ;;(;되는 인쇄 ee에서 메모리 셀을 감소 e하는 d후 인쇄물 d.
IP는 주황색 경로를 따라 계속 진행 Nl;se하며을 인쇄 하고 현재 메모리 셀에 l저장 e합니다. 그것은 인쇄, 갈색 경로를 따라 계속 e함께;. 이 시점에서 우리는 이미 인쇄 Needle했으므로 나머지는 마무리입니다. IP가 저장된 c다음 히트 ]합니다. 그런 다음 IP # 3으로 전환합니다.이 경로는 파란색 경로를 따라 치고을 치고 튀어 오릅니다 . 그런 다음 IP # 4로 전환하면 녹색 경로를 따라 튀어 나온 다음 분기됩니다 ( 긍정적 이므로 ). 마지막으로 IP # 5로 전환 하여을 저장 하고 종료합니다 .
컬러 경로 2
\_]
_\]c
e@


좋은! 이것이 의도 된 해결책이었습니다.
H.PWiz

4

파이썬 2 , 123 바이트

agtoever의 답변 균열

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

반복

비교:

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

나는 각 문자로 시작하는 숫자 기호의 색인 중앙값에 다항식을 인쇄 Meedle하여 인쇄하는 많은 재미있는 해결책을 찾았 Needlf습니다 Needle. 그런 다음 손으로 원래 프로그램의 하위 집합으로 유사한 계수를 찾으려고했지만 유효한 솔루션을 찾도록 강제로 무력화해야했습니다.


와! 잘 했어! 나는 그것이 금이 간다고 기대하지 않았다.
agtoever

내가 NumPy와 1.12를 다시 작성했다, 그래서 나는 원래 ;-) ..., 내가 어떤 REPL 환경에서 찾을 수 없습니다 NumPy와 1.13을 기반으로 도전을 개발
agtoever


2

젤리 , 14 바이트

Jonathan Allan의 답변에 균열

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

온라인으로 사용해보십시오!

비교:

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

나는 œc리터럴 문자열의 다양한 하위 집합을 반복하고 tr -d가능한 각 필터에 사용 grep되었으며 Needle에 사용했습니다. 첫 번째 문자열에 사용 된 문자 중 어느 것도 답에 사용되지 않았다는 가정을 사용하여 15 초 안에 답을 찾을 수 있습니다.


정확히 내가 생각했던 사람 Nebbed+ ruble의없이 rub.
Jonathan Allan


2

자바 (OpenJDK 8), 191 바이트

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

온라인으로 사용해보십시오!

삭제 된 문자 :

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

이것은 철자를 d평가합니다 .078101101100108101Needle


2

루비 , 149 바이트

이 균열 : /codegolf//a/144790/74216

모듈은 매우 작았으므로 멀티 스레드 생일을 작성하고 최선을 다했습니다.

편집 : 그 후 더 짧은 대답을 찾았습니다.

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

온라인으로 사용해보십시오!

변경 사항 :

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'

2

dc , 34 바이트

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

균열 . 티오 .

나는 Haystack (5215583380252484459)과 Needle (86197399743589)의 수치 표현을 시작했습니다. 다음으로 후자의 인수 분해를 수행했습니다. 47 * 432323 * 4242169입니다. 이것으로부터, 그 수를 재구성하는 것은 매우 쉬웠습니다.

사용 된 문자 표시 :

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

gg! 나는 많은 수를 넣는 것이 나쁜 생각이라는 것을 알았다)
cab404

@ cab404 궁금한 점이 있습니다. 86197399743589에 도달하기 위해 매우 다른 계산을 사용하셨습니까?
agtoever


와. 놀랍습니다. 이것은 또 다른 코드 골 문제 일 수 있습니다. 표현식에서 문자를 삭제하여 특정 결과를 얻는 방법은 몇 가지가
있습니까

나는 그것이 모든 가능성을 계산하고 그 숫자들만 있음을 증명하기 위해 일반적으로 약간의 수학이 필요할 것이라고 생각한다)
cab404

2

Hexagony , 19 바이트, Martin Ender

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

온라인으로 사용해보십시오!

원본과 비교

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

펼쳐진 코드

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

그래서 나는 Hexagony로 아무것도 쓰지 않았지만 균열을 일으킬 수있는 37 바이트 만 생각했습니다. 마틴, 이걸 알아 내기 위해 많은 시간을 할애 했으면 좋겠다 . :)

틀릴 수도 있지만 이 코드가 어떻게 생각 하는지 설명 할 것 입니다.

프로그램은로 시작 [하여 IP # 5로 자동 이동합니다. 이 IP는 서쪽 모서리에서 시작하여 [다시 한 번 향하며 IP # 4로 이동합니다. 여기에서 실행 N;e한 다음 남동쪽 코너로 가서 실행 ;하고을 위해 오른쪽으로 튀어 오른 ;다음 줄 바꿈 (하여 전류 e를 a로 줄 d입니다. 그런 다음에 (랩으로) 계속 ...;.받는 후 반송 l과에 도달 [IP # 3로 이동, 마지막으로 한 번. 이것은 실행 ;, >북서쪽으로 리디렉션 .다음 <타격 서쪽으로 리디렉션 e에 포장 ;하고,에 종료 @.

자세한 버전

니들 프로그램에 일반적인 육각형 크기를 사용하게되어 매우 기쁩니다. 문자 수를 제거 할 수 있다는 사실을 깨달았을 때 크기 19 프로그램 (길이-3면 육각형) .을 확인하고 끝에 육각형을 자동으로 s로 채우면 균열이 훨씬 더 어려워집니다. 그대로, Hexagony는 (대부분) 제거되는 모든 문자가 프로그램의 전체 실행 경로를 변경하기 때문에이 도전에 악한 언어입니다. 즉, 나는 결국 그것을 강제로 무차별 적으로 끝내더라도 이것을 생각해내는 것을 즐겼습니다. :)


내가 엉망이거나 빠진 부분이 있으면 알려주십시오.
조.

잘 했어, 이건 꽤 정확 해 보여 주말에 원래 가지고 있던 것과 비교할 것입니다.
Martin Ender

1

자바 (OpenJDK 8) , 151 바이트

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

온라인으로 사용해보십시오!

비교:

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

나는 마지막 부분이 의도되지 않은 것처럼 느낍니다.


Lol ok, "edle"을 만드는 현명한 방법입니다. 주변을 둘러 보면서 이미 너무 많은 작업을 수행했으며 많은 솔루션이 가능할 것이라고 생각했습니다.;) 의도 된 솔루션은 다음과 같습니다 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());}. , 그러나 나는 당신을 더 좋아합니다 .. :)
Kevin Cruijssen

1

Brain-Flak , 102 바이트

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

균열 H.PWiz의 대답 .

온라인으로 사용해보십시오!

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


1

Johnathan S.의 Java

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

건초를 추가하는 고리를 제거하면 바늘 외에는 아무것도 쌓이지 않습니다.


하, 좋은 하나-실제로 루프를 제거하는 것을 생각하지 못했습니다! 이 equals방법을 제거해 도 잘 작동합니다.
Jonathan S.


0

phroureo의 T-SQL , 757 바이트

seleCT 'Needle'

어떻게 든 그것이 의도 된 해결책이라고 생각하지 않습니다. 로 둘러싸인 문자를 사용합니다 {}.

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)

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.