Найдите иголку в стоге сена (грабители)


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'

"Needle" демо

объяснение

Первоначальная функция была:

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

Brain-Flak , 96 байт

Cracks Funky Computer Мужской ответ .

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

Попробуйте онлайн!

Это было забавное испытание.

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

Сравнение двух программ:

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

Я был уверен , что это закончится , как это
H.PWiz

Это, конечно, работает , но я каким-то образом убедил себя, что Nэто 77 вместо 78, поэтому я не понял этого.
Nitrodon

Ваш короче в любом случае.
H.PWiz

Интересное решение! Я добавил свое предполагаемое решение в исходное сообщение, если вы хотите его увидеть.
Пшеничный волшебник

5

Haskell

Трещины @ Лайкони ответ .

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 @ сл; е ;; (\ s;.. _

Попробуйте онлайн!

Сравнение с оригиналом:

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

Визуализация:

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

объяснение

Бонусные метки - использует все 6 IP-адресов и все, кроме одной ячейки!

Цветные дорожки

IP # 0 начинается с того, что идет по черному пути в ].
Затем мы переходим к IP # 1, который идет по красной дорожке, печатая, Nа N;затем снова оборачивая ].
Затем мы переходим к IP # 2, который идет по синему пути, сохраняя eв текущей ячейке памяти, затем по зеленому пути, выполняя (с отражением в \), ;;(;которое печатает ee, уменьшает ячейку памяти с того, eчтобы dзатем печатать d.
IP продолжается по оранжевому пути, выполняя Nl;seкоторый печатает lи сохраняетe в текущей ячейке памяти. Это продолжается по коричневому пути, печатая eс;, К этому моменту мы уже напечатали Needle, так что остальное только заканчивается. IP хранит c, потом хиты ].
Цветные дорожки 2
Затем мы переходим к IP # 3, который движется по синему пути, ударяясь \, прыгая, в _который врезается ].
Затем мы переходим к IP # 4, который идет по зеленому пути, подпрыгивая _, затем \и переходя к ](так cкак он положительный).
Наконец, мы переходим к IP # 5, который eзатем сохраняет данные с выхода @.


Ницца! Это было намеченное решение.
H.PWiz

4

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

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. Затем я попытался вручную найти похожие коэффициенты с подмножествами исходной программы, но в итоге мне пришлось прибегнуть к грубому принуждению, чтобы найти верное решение.


Вот это да! Прекрасная работа! Я не ожидал, что это будет взломано так скоро.
agtoever

Изначально я разработал вызов , основанный на 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для каждого возможного фильтра, и grepредактировал для 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

Трещины это . TIO .

Я начал с получения числового представления Хейстек (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


Вау. Это замечательно. Это может быть еще один вопрос Codegolf: сколько существует способов получить определенный результат, удаляя символы в выражении ...
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до a d. Затем он продолжает (с переносом) ...;.затем отскакивает к lи попадает в [последний раз, переходя на IP # 3. Он выполняет ;, >перенаправляет на северо-запад, а .затем <перенаправляет на запад, нажимая e, оборачивая ;и заканчивая на @.

Подробная версия

Я так рад, что вы использовали нормальный размер шестиугольника для программы Needle; Я проверял программы размера 19 (для шестигранника с длиной стороны 3), когда понял, что вы можете удалить любое количество символов, и он автоматически заполнит шестигранник .s в конце, что значительно усложнит его взлом. Как таковой, Hexagony - злой язык для этой задачи, потому что (в основном) любой удаляемый символ меняет весь путь выполнения программы. Тем не менее, мне нравилось пытаться придумать это, даже если я в конце концов и сделал грубое принуждение. :)


Если я что-то напутал / пропустил, пожалуйста, дайте мне знать.
Джо.

Хорошая работа, это выглядит довольно точно. Я сравню это с тем, что у меня было изначально на выходных.
Мартин Эндер

1

Java (OpenJDK 8) , 151 байт

Трещины Ответ Кевин 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 хорошо, это умный способ сделать "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());}(не знаю, почему я включил BigInteger, поскольку достаточно только байтового массива ...) , но мне больше нравится твоя .. :)
Кевин Круйссен

1

Brain-Flak , 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.