Спрятать иголку в стоге сена (менты)

38

Это часть задачи . Иди сюда за грабителями.

Вызов ментов

Вы должны написать программу или функцию на языке по вашему выбору, который выводит строку Haystack. Однако должна быть возможность удалить некоторое подмножество символов из вашей программы (без переупорядочения остальных), чтобы полученная строка также была действительной программой на том же языке, которая печатает Needleвместо этого. Обе программы / функции могут опционально печатать один завершающий символ новой строки (независимо друг от друга), но не более того. Вывод чувствителен к регистру и должен соответствовать точному предоставленному регистру.

Ваша цель, конечно, очень хорошо спрятать «иголку». Но обратите внимание, что ваша заявка может быть взломана любым действительным решением, а не только тем, которое вы намеревались.

Пожалуйста, включите в свой ответ:

  • Язык (и версия, если применимо) вашей заявки.
  • Размер программы Haystack в байтах.
  • Сама программа Haystack.
  • Метод вывода, если это не STDOUT.
  • Если возможно, ссылка на онлайн переводчик / компилятор для выбранного вами языка.

Ваша заявка может быть либо программой, либо функцией, но не фрагментом, и вы не должны использовать среду REPL. Вы не должны принимать никаких входных данных, и вы можете вывести их через STDOUT, возвращаемое значение функции или параметр функции (out).

Обе программы / функции должны быть выполнены в течение 5 секунд на приемлемом настольном компьютере и должны быть детерминированными. Вы не должны использовать встроенные модули для хэширования, шифрования или генерации случайных чисел (даже если вы запрограммировали генератор случайных чисел на фиксированное значение).

В интересах справедливости, должен быть свободно доступный переводчик или компилятор для выбранного вами языка.

Ответ взломан, если программа Needle найдена. Если ваш ответ не был взломан в течение 7 дней, вы можете указать предполагаемую программу «Игла» в своем ответе, что сделает ваше представление безопасным. Пока вы не раскрываете свое решение, оно все равно может быть взломано грабителями, даже если 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]

Обратите внимание, что подмножество удаленных символов не обязательно должно быть смежным.

Uncracked Материалы

<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, что значительно затрудняет защиту полицейских от непреднамеренных взломов. Это также позволяло грабителям красть трещины из других грабители, находя даже более короткие решения.)
Мартин Эндер
Я бы сделал это в стоге сена, но у него нет документации, и я смотрю код :(
Okx
1
Фрагмент стека получает неправильную длину для этого ответа
mbomb007
1
@ kamoroso94 Да, но это означает, что вы можете прервать программы-кандидаты через 5 или 6 секунд, потому что, если они не закончили, они не могут быть решением, которое вы ищете.
Мартин Эндер

Ответы:

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

HyperNeutrino
источник
Трещины .
fireflame241
1
@icrieverytim 1. ооо круто, они оба символы Юникода 2. текущий является более точным с научной точки зрения
HyperNeutrino
1. Да, я знаю, они выглядят очень круто. : PI нашел их в этом золотом руднике блока Unicode . Не удивляйтесь, если они окажутся в кодовой странице Неона. 2. ТБХ, старый выглядел лучше ИМО. : P
полностью человек
1
@HyperNeutrino Почему у вас есть интерес к бензолу?
Миштхан
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получает приращение к tпути )и распечатано, то мы проходим через Ne...(cдоходя до a;c;(все еще подпрыгивая небольшой участок шестиугольника). Программа хитов _, отражает через \к lкоторой получает декрементируется к kпути (, который проходит через другой \перед печатью и программа заканчивается на @.

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

Мартин Эндер
источник
3
Этот язык все еще не дает мне покоя. Я люблю тебя за это.
phroureo
Мой мозг взрывается прямо сейчас. Я пытался понять это достаточно, чтобы взломать код, но ДА, чувак. Какой извращенный парень делает это?
phroureo
@phroureo ...> _>
Мартин Эндер
После того, как ваш ответ безопасен, можете ли вы дать мне пошаговое описание того, что он делает? (Или, если у вас уже есть шаг за шагом где-то что-то похожее, укажите мне там?)
phroureo
1
@phroureo Я не возражаю добавить объяснение полицейской программы до того, как она станет безопасной, и я не думаю, что в любом случае буду утверждать, что она безопасна (я не слишком заинтересован в том, чтобы выиграть свой собственный вызов с помощью представления, которое я едва помещал любое усилие в). Я постараюсь добавить объяснение завтра. А пока я рад помочь вам с гексагонией в чате esolangs .
Мартин Эндер
10

Brain-Flak , 146 байт ( треснувший )

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

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

Предполагаемое решение, 80 байтов

([((((()()())){}){}){}](()([()](()({}([((((()()()){})))[]])[]({}({})[{}]()({}((()(({}){}){}){}){}())))[][][][][][]))[]))(((()[]){}){({}[()()])}{})
( ((   )(                  [(  (( (         )()()){})) []]   ({}(  )    ( (  ( ()(({}){}){}){}){}())))            ))    (((()[]){}){({}[()  ])}{})
Мастер пшеницы
источник
Трещины
Nitrodon
8

JavaScript, 95 байт (ES6), Cracked

Функция, возвращающая строку.

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

"Стог сена" демо

Arnauld
источник
Очень хорошая головоломка. Трещины
ShreevatsaR
8

Haskell , 168 байт ( взломано Ними )

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

Laikoni
источник
1
Трещины . Было довольно весело решить.
Ними
4

Гексагония , 32 байта. Трещины

Я не мог решить Мартина , поэтому я публикую свои собственные.

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

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

Вот это отформатировано:

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

Моя цель была в том, чтобы оба решения использовали как можно больше IP-адресов, я получил 6 для Needle и только 5 для Haystack .

H.PWiz
источник
Треснувший
Бобоквак
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
Трещины .
молоко
2

JavaScript, 119 байт (ES6), Cracked

Функция, возвращающая строку. Довольно долго и не так сложно, но, надеюсь, весело.

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

"Стог сена" демо

Arnauld
источник
Трещины . Jsfuck github README.md очень помог.
мое местоимение monicareinstate
2

Python 2.7.2, 103/117 байт, Cracked

Версия функции (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 есть Игла и Стог сена! Вот стог сена; посмотрим, сможете ли вы найти Игла. Надеюсь, вам было так же весело искать Иглу, как и мне.

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 .

agtoever
источник
Не то, чтобы это действительно
имело
2

Java 8, 321 байт, Cracked

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 имеет на одного персонажа меньше, но в любом случае взломан .
17
2

Рубин , 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

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

Я попытаюсь придумать что-нибудь подлое, но сейчас вот попытка «просто, но противно».

histocrat
источник
1
это было весело ^^
cab404
Отлично сработано! Рад, что грубая сила была не слишком скучной.
гистократ
2

Brain-Flak , 188 байт ( треснувший )

Я только что увидел ответ Funky Computer Man, когда я написал это.

Это несколько запутано.

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

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

Предполагаемое решение, 96 байт:

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

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

H.PWiz
источник
Ты имеешь в виду что-то запутанное, кроме обычного запутывания в мозговых зенитах.
Грифон - Восстановить Монику
@ Грифон Да, я добавил несколько дополнительных битов.
H.PWiz
Трещины.
Нитродон
2

T-SQL, 757 символов взломан

Извините за удаление моего предыдущего ответа - я редактировал его слишком много раз, когда запутывал, и не хотел ничего выдавать. :)

В любом случае, запутывание в SQL немного затруднительно, если только вы не хотите делать такие сумасшедшие вещи, как это , а я не вкладывался.

Кроме того, я безоговорочно не извиняюсь за присвоение имен своим переменным после 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)

Если это самый простой ответ в этой теме, вы, вероятно, правы. : P Сложно обмануть SQL.

phroureo
источник
не должен ли «стог сена» быть «стог сена»?
cab404
SQL не очень хорошо справляется с заглавными буквами (если вы не определите схему, которую предполагается использовать для букв). Я решил не делать этого. : P
phroureo
1
@phroureo Спецификация прямо заявляет, что она должна быть написана заглавными буквами правильно.
LyricLy
Хорошо, я исправил приведенный выше код (хотя я не обязательно исправлял SQL Fiddle, так как он работает так же).
Phroureo
1
треснул (извините ...)
Роберт Фрейзер
1

Ly , 40 байт, трещины

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

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

О, парень, еще один Ли CNR представления. Они не очень хорошо работали исторически (возможно, из-за меня, а не из-за языка), но мы увидим, что эти тарифы и сегодня не исключение.

Решение:

(78)"e"sl(100)"l"l&o;, удалить XXXXXX XXXXX XXXXXX X Xс семью ведущими пробелами

LyricLy
источник
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
kamoroso94
источник
0

Aceto , 154 байта (Сейф)

              27 \ 'dNU QJi9MLJ € {{x (}] J {'! O∑ € xiDQxsJ (] sicpicp1.2sJJicp90I.2 + D / edxi - '> xd80J0IJicx'NIx5sJsJidcpIcpL7sssJicpei7 +L'JPJPJPJP   

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

'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
FantaC
источник