Знайдіть голку в копиці сіна (грабіжники)


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

JavaScript, 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, кожне утворене підмножиною цифр вихідних чисел, таким чином, що функція g(k) = (k * a & b), починаючи з k=35ітерації 35 разів, а потім XORed з c, дає 21625674.

Для цього, після того, як думати трохи, так як довжина мала (максимальні aмають довжину 17, bі cмає довжину 9), я використовував тільки грубу силу :-) Написав на C ++ програми , щоб генерувати всі можливі номери a, b, cвиконаний в вигляді підмножин оригінальних номерів, повторіть усі aта bі перевірте, чи потрібне cбуло в наборі. Запускається в близько 15 секунд, і тільки вихід a=4853461, b=268435455, c=12408877(виявляється числом bне потрібно міняти). Я не впевнений, чи є більш розумний спосіб перевернути цю функцію.


5

Стог сіна , 82 байти

Тріщини Відповідь HyperNeutrino в

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

Спробуйте в Інтернеті!


1
Приємно! Як я його налаштував, моїм оригінальним рішенням було буквально просто зняти 0на початку: P Приємно бачити інший підхід, хоча! +1
HyperNeutrino

5

Мозок-Флак , 96 байт

Тріщини Funky Computer відповідь людини .

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

Спробуйте в Інтернеті!

Це було веселим викликом.

-24 на початку якого звернені yдо aв оригіналі тепер використовується для перетворення , eщоб M, який потім перетворюється в Nмісці, змінюючи всю кінцеву петлю до ()). Перший висунутий лист kбуло змінено на eпросто, видаливши push-pop, який додає до нього 6. Решта здебільшого просто встали на місце, по ходу були кілька жартівливих помилок (включаючи одну програму, вихід якої був Meddle).

Порівняння двох програм:

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

Я був впевнений , що це закінчиться , як це
H.PWiz

Це, безумовно, працює , але я якось переконав себе, що Nце 77 замість 78, тому я його не спіймав.
Nitrodon

Ваш все одно коротший.
H.PWiz

Цікаве рішення! Я додав своє оригінальне рішення до оригінальної публікації, якщо ви хочете його побачити.
Опублікувати Rock Garf Hunter

5

Хаскелл

Cracks @ відповідь Лайконі .

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-> Hплюс 6 символів -> N.


5

Шестикутник , 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-адрес і всі, крім однієї комірки!

Coloured paths

IP # 0 починається з направлення прямо по чорній стежці в ].
Потім ми переходимо до IP №1, який прямує по червоній стежці, друкуючи, Nа N;потім знову загортаючи ].
Потім перехід до IP # 2, яка проходить уздовж синього шляху, зберігання eв поточному осередку пам'яті, а потім по зеленій доріжці, виконавчі (з відображенням у \) , ;;(;який друкує ee, зменшує осередок пам'яті з , eщоб dпотім друкує d.
IP продовжується помаранчевим шляхом, виконуючи Nl;seякий друкує l, і зберігається eв поточній комірці пам'яті. Він продовжується коричневим шляхом, друкуючи eс;. До цього моменту ми вже надрукували Needle, тому решта тільки закінчується. IP зберігає c, потім потрапляє ]. Потім ми переходимо до IP №3, який прямує по синій стежці, вдаряючись , підстрибуючи в який, підстрибує . Потім ми переходимо до IP №4, який прямує по зеленій стежці, підстрибуючи , потім і розгалужуючи до (оскільки є позитивним). Нарешті, ми переходимо до IP №5, який зберігає, після чого виходить .
Coloured paths 2
\_]
_\]c
e@


Приємно! Це було намічене рішення.
H.PWiz

4

Python 2 , 123 байт

Відповідь аграріїв тріщин

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

repl.it

Порівняння:

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. Потім я намагався вручну знайти подібні коефіцієнти з підмножинами оригінальної програми, але мені в кінцевому підсумку довелося вдатися до грубої примуси, щоб знайти дійсне рішення.


Оце Так! Чудова робота! Я не очікував, що вона незабаром зламається.
аґтовер

Я спочатку розробив виклик на основі numpy 1.13, якого не знайшов у жодному середовищі repl, тому мені довелося переписати його для numpy 1,12 ... ;-)
agtoever

2

Javascript, 91 байт

_=>(+{}+[])[+[]]+([][[]]+[])[3]+([][[]]+[])[3]+([][[]]+[])[2]+(![]+['t'])[2]+([][[]]+[])[3]

Тріщить це . Це насправді було весело.


2

Желе , 14 байт

Тріщини Джонатана Аллана

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

Спробуйте в Інтернеті!

Порівняння:

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

Раніше я œcперебирав різні підмножини буквених рядків, що використовуються tr -dдля кожного можливого фільтра та greped для Needle. Використовуючи припущення, що жоден із використаних символів у першому рядку не використовувався у відповіді, нехай він знайде відповідь за 15 секунд.


Саме те, що я мав на увазі Nebbed+ rubleбез жодного rub.
Джонатан Аллан


2

Java (OpenJDK 8), 191 байт

Тріщить відповідь Люка Стівена

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оцінити, до 078101101100108101яких заклинань Needle.


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

постійного струму , 34 байти

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

Тріщить це . ТІО .

Я почав з отримання чисельного представлення стогів сіна (5215583380252484459) та голки (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

гг! Я знав, що ставити стільки номерів - погана ідея)
cab404

@ cab404 Цікаво: ти використовував зовсім інший розрахунок, щоб дістатися до 86197399743589?
agtoever


Ого. Це чудово. Це може бути ще одне питання кодогольфа: скільки способів отримати певний результат, видаливши символи в виразі ...
agtoever

я гадаю, що, як правило, потрібна серйозна математика, щоб обчислити всі можливості і довести, що їх існує лише така кількість)
cab404

2

Шестикутник , 19 байт, Мартін Ендер

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

Спробуйте в Інтернеті!

Порівняння з оригіналом

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

Розгорнутий код

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

Так, я ніколи нічого не писав у "Гексагоні", але подумав, що лише 37 байтів мені вдасться придумати тріщину. Мартіне, сподіваюся, ти знаєш, що я багато поклав часу, щоб спробувати розібратися в цьому. :)

Я можу бути невірним, але поясню те, що думаю цей код:

Програма починається з [, яка автоматично переходить на IP №5. Цей IP починається у західному куті, спрямовуючи його [знову до IP # 4. Звідси він виконується, N;eпісля чого прямує до південно-східного кута і виконує ;, відскакує праворуч на інший, ;а потім обгортає, до (якого зменшується струм eдо а d. Потім він продовжує (з обгорткою), ...;.а потім відскакує до lта потрапляє до [останнього, переходячи до IP №3. Він виконує ;, >переадресовує на північний захід, .потім <перенаправляє на захід, натискаючи e, завертаючи на ;та закінчуючи на@ .

Докладна версія

Я так радий, що ви використовували звичайний розмір шестикутника для програми Needle; Я перевіряв програми розміром 19 (для шестикутника довжиною 3), коли зрозумів, що ви можете видалити будь-яку кількість символів, і він автоматично заповнить шестикутник .s, в кінці, що зробить його різко складніше. Наразі Гексагонія - це зла мова для цього виклику, оскільки (здебільшого) будь-який видалений персонаж змінює весь шлях виконання програми. Це, як було сказано, мені подобалося намагатися придумати це, навіть якщо я в кінцевому підсумку змусив це зробити. :)


Якщо я щось заплутав / пропустив, будь ласка, повідомте мене про це.
Джо.

Приємна робота, це виглядає досить точно. Я порівняю це з тим, що у мене було спочатку за вихідні.
Мартін Ендер

1

Java (OpenJDK 8) , 151 байт

Тріщини Відповідь Кевіна Круїссена

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());}Задумане рішення: , але мені подобається твій краще .. :)
Кевін Кройсейсен

1

Мозок-Флак , 102 байти

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

Тріщини відповідь H.PWiz в .

Спробуйте в Інтернеті!

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


1

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методу працює так само добре.
Джонатан С.


0

T-SQL по phroureo , 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)

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.