Расшифруй исходный код

142

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

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

  1. Язык
  2. Длина программы
  3. Желаемый вывод
  4. Скремблированная версия исходного кода

Затем грабители должны расшифровать исходный код, чтобы их программа функционировала так же, как и оригинал.


Полицейские правила

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

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

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

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

Ваша оценка - самая короткая из представленных вами программ, которая не была взломана. По истечении одной недели непроверенная отправка становится иммунной. Чтобы заявить об этом иммунитете, вы должны отредактировать свой ответ, чтобы показать правильный ответ. (Пояснение: пока вы не откроете ответ, вы не застрахованы и все еще можете взломать.) Побеждает самый низкий балл.

Простой пример полицейских ответов

Perl, 20

ellir"lnto Wo d";prH

Hello World

Или же...

Perl, 15

*3i)xp3rn3*x3t(

272727

Правила Грабителя

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

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

Грабитель с наибольшим количеством очков (успешных трещин) побеждает.

Простой пример Ответы грабителя

Ваша программа была print "Hello World";. (Хотя print"Hello World" ;мог бы и сработать.)

Ваша программа была print(3**3x3)x3

Безопасные представления

  1. ASP / ASP.Net, 14 (Джейми Баркер)
  2. Befunge-98, 15 (FireFly)
  3. GolfScript, 16 (Питер Тейлор)
  4. CJam, 19 (DLosc)
  5. GolfScript, 20 (user23013)
  6. Perl, 21 (прим)
  7. Python, 23 (mbomb007)
  8. Руби, 27 (гистократ)
  9. SAS, 28 (ConMan)
  10. Руби, 29 (гистократ)
  11. Python, 30 (mbomb007)
  12. JavaScript, 31 (hsl)
  13. Руби, 33 (гистократ)
  14. Marbelous, 37 (es1024)
  15. Руби, 43 (гистократ)
  16. PHP, 44 (кенорб)
  17. Руби, 45 (гистократ)
  18. Marbelous, 45 (es1024)
  19. Питон 2, 45 (Эмиль)
  20. PHP, 46 (Исмаэль Мигель)
  21. Хаскелл, 48 (нооодл)
  22. Python, 51 (DLosc)
  23. Python, 60 (Sp3000)
  24. Питон 2, 62 (мутная рыба)
  25. JavaScript, 68 (Джейми Баркер)
  26. Mathematica, 73 (Arcinde)
  27. Хаскелл, 77 лет
  28. Питон, 90 (DLosc)
  29. C ++, 104 (user23013)
  30. ECMAScript 6, 116 (Mateon1)
  31. С ++ 11, 121 (es1024)
  32. Трава, 134 (user23013)
  33. PowerShell, 182 (Христофор)

Неразрешенные представления

В порядке времени размещения. Этот список любезно предоставлен многими пользователями.

Небольшой инструмент для проверки решений, предоставлено n̴̖̋h̷͉̃a̷̭̿h̸̡̅ẗ̵̨́d̷̰̀ĥ̷̳

PhiNotPi
источник
4
@xnor Да, вот что это значит.
PhiNotPi
3
Возможно, вы захотите запретить хеширование ... codegolf.stackexchange.com/questions/40304/…
NinjaBearMonkey
7
Вы, вероятно, должны указать, что победитель должен опубликовать исходный код через одну неделю. Что мешает мне размещать тарабарщины и утверждать, что ни один из грабителей не получил правильного ответа?
user2023861
62
Я подумал: «О, я просто напишу программу malbolge, зашифруй ее и выиграй!». Но потом я попытался написать программу malbolge.
Родольфито
8
Предупреждение: Копы, не используйте Ideone для проверки ваших представлений, так как он хранит ваши программы, и другие люди могут их видеть.
Родольфито

Ответы:

65

Python 3, размер 74 ( треснувший )

Питон просто не был тем же самым после перевоспитания Большим братом.

Входные данные:

print(war is peace)
print(freedom is slavery)
print(ignorance is strength)

В конце строк 1 и 2 есть две новые строки.

Выход:

True
True
True

Обратите внимание, что каждый Trueв своей строке.

XNOR
источник
1
Что за дверью 101?
FryAmTheEggman
5
Первоначально у меня было 2+2==5четвертое утверждение, пока я не обнаружил, что =это слишком легко.
xnor
5
Хорошая ссылка 1984 года.
Джастин
2
Трещины . Это было отлично.
Sp3000
52

Python 3, размер 12 ( треснувший )

print (abcd)

Моя программа не выдает никаких ошибок.

XNOR
источник
4
Трещины . Хорошо, решение очень нелогичное.
matsjoyce
2
Очень мило, я собирался intненадолго.
Фокс Уилсон
@matsjoyce Отлично сделано. Это было мое предполагаемое решение.
xnor
1
@matsjoyce Да, я ожидал, что кто-то сделает это в конце концов. Тем не менее, я призываю всех не портить себя и попытаться решить это вручную. Уверяю вас, это милое решение.
xnor
Я думаю, что понял. Решение, которое я нашел, не работает, если я сначала наберу, pythonа затем введите свое решение в командной строке. Но это работает, если я положу свое решение в файл и введите python file.
kasperd
26

Python 2, размер 50

треснувший

Мы уже знаем ответ на вопрос, но что это за вопрос?

Код

print *********************--///222222222222222222

Обратите внимание, что нет пробелов или переводов строки. Единственный пробельный символ - это один пробел после print.

Выход

42

Я пытался сбалансировать длину и сложность кода, но меня не удивит, если я немного пропущу его. Надеюсь, этого хватит, по крайней мере, отбить грубую силу.

Geobits
источник
2
Трещины
Ypnypn
6
Это было бы лучше с размером 42.
CVN
23

Pyth - 71 треснувший

Код

C-3P0: "Sir, the possibility,..."* 
Han Solo: "Never Tell Me The Odds!"

Выход

3720

* Изначально Джордж Лукас заставил Хана прервать C3-PO. **

** Он назвал это своей величайшей идеей со времен Джар-Джара.


Интересное примечание: несмотря на все изменения, через которые прошел Pyth, здесь все еще есть верный ответ!


оригинал

ts,*s,y30 l" : : i i Han Solo "eP-C"h"TsrhT

объяснение

Остальные символы переходят на следующую строку. Pyth интерпретирует только первую строку файла.

ts,сделать 2-кортеж и получить их сумму -1.
*умножить:
s,y30 l"..."суммировать 2-кортеж, содержащий 2 * 30 и длину строки (18).
eP-C"h"Tполучить наибольший простой множитель h's ascii value минус 10 (47).
srhTполучить сумму чисел от 0 до 10.

В общем, это в основном просто вычисляет: (30 * 2 + 18) * (47) + 55-1. Прочитав ответ @ isaacg, я заметил, что существует чрезвычайно простое решение: *h30tC"y"31 * 120.

обновленный

*h30tC"y" "-P:Sir, e possibilit,...
Han Solo: Never Tell Me The Odds!"
Все еще работает даже после всего этого времени ...

Извините за плохое форматирование объяснений, я не знаю, как использовать спойлеры: S (хотя @ Sp3000 сделал его немного лучше для вас)

Теперь вы можете запустить Pyth онлайн! Попробуй это здесь. Спасибо @isaacg :)

FryAmTheEggman
источник
9
Вышесказанное может содержать явно придуманную информацию о создании Star-Wars.
FryAmTheEggman
2
трещины
Исаак
@FryAmTheEggman Вы можете использовать теги в блоках, например<br>
Sp3000
21

CJam, размер 51 [БЕЗОПАСНО]

Код

main(int argc,char* argv){printf("Hello, World!");}

Выход

55
2292213229222231957511222223333751125537511222222135723331131931959319319

Вы можете поиграть с ним в онлайн-переводчике .

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

намек

Начните со второй строки вывода. Несколько цифр не появляются во всем этом, а другие подозрительно часто. Почему это может быть? Если вы можете расшифровать это, остальные должны почти встать на свои места.

Решение

"that rrrrraging london Hail!v"{elccimf(;W))},(*,pa

Должно быть, погода была довольно плохой, когда я придумал эту анаграмму ...

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

Мартин Эндер
источник
9
Подожди, это зашифровано ???
Доктор
18

Befunge-98, размер 15 [SAFE]

Код

"quick"
*+.@\_j

Выход

3314

оригинал

«u_ji@q.+k*c
"
Любопытная, но несколько хорошо известная особенность Befunge заключается в том, что вы можете завершить строку той же кавычкой, с которой она начинается, что по сути выталкивает всю эту строку (кроме кавычки) в стек. В качестве дополнительного трюка, я повторно использовать ту же строку снова , путем использования uдля обратного указателя команд. Тогда это просто некоторая арифметика: основная идея состоит в суммировании всех этих значений (что делается с помощью kповторения +операции).

Светлячок
источник
На каком интерпретаторе (-ах) вы его проверили, и, в частности, какие предположения они делают о битовой пропускной способности соты?
Питер Тейлор
@PeterTaylor Я тестировал его на cfunge под x86_64 linux. Некоторые тесты, кажется, показывают, что в нем используются 64-битные целые числа со знаком, хотя я могу сказать, что мое решение не зависит от семантики переполнения, поэтому я не уверен, имеет ли это значение.
FireFly
Итак, я не должен искать 8-битные переполнения. Позор, что, возможно, упростил это;)
Питер Тейлор
Тьфу. Я сделал программы для печати 3312, 3300и некоторые другие рядом 3314. Так близко ...
Джастин
@Quincunx отлично ...: P
FireFly
16

GolfScript (16 байт) [БЕЗОПАСНЫЙ]

%%()*../1129n{}~

Ожидаемый результат:

-117345085515973157874551915956356303213327583847247840186528288852476459638212404362749

Первоначальный источник:

n)~{.*911%(}./2%

Питер Тейлор
источник
Этот ожидаемый результат исключает завершающий символ новой строки, или он просто не будет выводиться?
Программа Fox
@ProgramFOX, вывод закончится новой строкой. Единственные известные мне способы избежать этого потребуют :.
Питер Тейлор
13

Python, 69 символов [ взломано grc ]

Яичница:

((((((((((((())))))))))))),,,,accdddiiiiillmmnopprrrrrssssssttttttttu

Выход:

1083

Это просто безобидное развлечение :) Протестировано на CPython 2.7.8, 3.3.2 и, черт возьми, на PyPy3 2.3.1.


объяснение

Использование встроенных функций str, dict, listчтобы создать строку и затем применяет mapс ordпреобразовать строку в список целых чисел, которые затем sumмед.

Sp3000
источник
12

Python, размер 56 ( треснувший )

Код

for i in "iprint()".join(([2,3,7,0,9,chr((-7+732^70)])))

Выход

hi mom

Фокс Уилсон
источник
2
Python 2? или 3?
Geobits
1
@ Geobits, либо один работает.
Фокс Уилсон
1
Трещины.
user1354557
11

Python 3, 70 символов

Яичница:

""(((())))****++++222222222;;;;;=======cccccccccceeeiinnpprrttxxxxxxxx

Выход (длиной 99 символов):

388626024960000000000026872002432000000000000676169243200000000000007317718780000000000000028820330

Обновить

Прошла неделя, поэтому вместо того, чтобы публиковать ответ, вот подсказка:

Попробуйте взять квадратный корень из числа и работать оттуда

Sp3000
источник
9

JavaScript, 94 взломан FireFly

alert(' '' '''((()))+++,,,,,,,,,,,,,000111111114444577888;;;;;======[[[]]]aaafhinorrrrvvvxx||)

Выход

fun in the sun

оригинал

a=alert;v='';r=[1,7,8,14,11,8,14,10,0,5,14,4,7,8];for(x in r)v+=('h'+(1==0)+a)[r[x]]||'';a(v);

SLuck49
источник
У меня есть чувство, это не будет работать во всех браузерах / движках. В какой среде вы это тестировали?
Мартин Эндер
Ох ... и я был убежден, что вы сделали это в alertпервую очередь, так как индексы так хорошо соответствовали нужным персонажам. Интересное совпадение.
FireFly
Вообще-то, у меня это тоже было сначала, когда я начал над ним работать, но я изменил его, чтобы уменьшить различия в браузерах.
SLuck49
Не работает на Chrome. У меня последняя версия. Это говоритSyntax Error: Unexpected String
Оливер Ни
8

Руби, 38 - взломан Мартином Бюттнером

print(succ(downcase!))$$$..[[]]6e0<><_

Выход:

u

Оригинал:

$6.pincdwnca[]rescue$><<$!.to_s[((0))]

Дверная ручка
источник
Трещины.
Мартин Эндер
1
@ MartinBüttner Хех, совсем не оригинал. Но ваше решение, возможно, еще страшнее, чем оригинал. ;)
Дверная ручка
1
Эй, есть рыба
TheDoctor
Так что printи downcase!были красные селедки. Я ожидал ответа, чтобы использовать puts, не думал $><<.
Kernigh
7

Python 3, размер 16 ( треснувший )

Код:

help tim__rolo__

Вывод (с новой строкой в ​​конце):

Hello world!
matsjoyce
источник
3
Трещины.
Мартин Эндер
1
@ MartinBüttner Я знал, что кто-то видел пасхальное яйцо ...
matsjoyce
1
Я не сделал, но я был быстр, чтобы погуглить это. ;) Если честно, если бы я не спешил, я бы, наверное, увидел, что остальные персонажи после helloбыли анаграммой import. ^^
Мартин Эндер
7

Perl - 47 ( взломано grc )

Код (там тоже один пробел)

 """"$$$$$$((()))**....///;;[[]]~==01finoprrstx

Выход:

012345012345012345012345012345

Вы можете запустить его онлайн здесь, и он работает под strictи warnings.

hmatt1
источник
@grc Я бы сказал, что это действительно! Хорошо сделано! Это печатает правильную вещь. Если вам нужны подсказки по версии, которая работает под, strictи warningsдайте мне знать.
hmatt1
7

Ruby, 33 - взломан пользователем23013

enpsttux [[[]]]++\-\**????$$$$...

Выход:

[*]

Оригинал:

puts ?[+[*?*..?]][$$-$$]+?\\.next

Дверная ручка
источник
Какая версия это?
Линн
@nooodl У меня есть 1.9.3, но в этом нет ничего зависящего от версии.
Дверная ручка
Это сложно. Вот что у меня есть: puts очевидно, это будет первое, .nextчто нужно использовать , это еще одно ключевое слово, которое можно использовать, а остальное - какое-то колдовство с $переменными ruby и созданием массива символов ... +1
rodolphito
Трещины .
jimmy23013
@ user23013 Отлично! Не оригинал, хотя; У меня, вероятно, должны быть выходные символы, которых на самом деле не было в источнике;)
Doorknob
7

Python2, 132 символа

____        ,,,,:::''""""""""""((()))[[]]\\\0126aaaabcccceeeeeeeeeEffggiiiiiilllllmmmmnnnnnnooooopppppqqrrrrrrrrrssssStttttttuuvxxyy

Вывод (с новой строки):

chance

Обновленная версия, 96 символов

Ответ на оригинальную версию предложен execвместо compile+ eval, поэтому вот упрощенная версия:

____       :::''""(())[[]]\\\0126aaabcccceeeeeeeeEffiimmnnnnooopppqqrrrrrrrrrssStttttttuuxxxxyy

Обновление: трещины

Полностью взломан Alex Van Liew и KennyTM . Оригинальные решения были (прокрутите вправо, чтобы показать спойлер):

                                                                                                                                eval(compile('try: compile("from __future__ import braces","","single")\nexcept SyntaxError as q:\n\tprint q[0][6:12]',"","single"))
                                                                                                                                exec('try:exec("from __future__ import braces")\nexcept SyntaxError as q:\n\tprint q[0][6:12]')
                                                                                                                                The hint meant "Consider {}, which are not present in the source code".
Vi.
источник
Сколько там новых строк?
Sp3000
Нет (не считая логических символов новой строки, таких как \nлитералы строк). С символами новой строки код может быть короче.
Ви.
2
+1 за то, что я не давал достаточно xs и cs, чтобы я мог делать то, что я хочу сделать: P
Sp3000
1
Должен ли я придумать какой-нибудь намек? Давайте начнем с расплывчатым: Don't count ones which exist. Count ones which do not exist.
Ви.
Трещины .
kennytm
7

Руби, 29 [безопасно]

Пытаясь понять, насколько коротким я могу стать в Руби, не взломавшись.

Код

paper view
otool
$()**,.8<<=>

Выход

[0][0, 3][0, 3, 6][0, 3, 6, 9][0, 3, 6, 9, 12][0, 3, 6, 9, 12, 16][0, 3, 6, 9, 12, 16, 20]

оригинал

eval <<p*8 o=*o,$>.write(o) p

объяснение

Первая строка создает heredoc, который начинается со следующей строки и ограничивается завершающим pсимволом, а затем объединяет полученную строку с собой 8 раз. Так как он заканчивается новой строкой, это фактически создает цикл. Зацикленный код присваивает массив переменной o, состоящей из элементов o.to_a(через *стенографию), за которыми следует вывод $<.write(o), который преобразует oв строку, печатает ее в STDOUT и возвращает количество напечатанных байтов. Переменная, присваиваемая в первый раз, nilпредназначена для оценки правой части, поэтому при первом запуске*oпусто и запись ничего не выводит и возвращает 0. Каждый последующий раунд выводит массив байтов, выведенных в предыдущих раундах. Использование heredoc с разделителями p создает методы приманки для вывода, pи $><<в зашифрованных символах это не сработает, потому что вам нужен счетчик байтов.

histocrat
источник
6

PHP, размер 49 [ взломано Мартином Бюттнером ]

Код

sub(print2w, $+expect+$+one+$+str+$+in=$@~main$);

Выход

{main}
bwoebi
источник
Не могли бы вы раскрыть, с какой версией PHP вы это тестировали?
Мартин Эндер
@ MartinBüttner Я не буду указывать точный диапазон, но все, начиная с 5.3.0, будет иметь правильный результат.
Bwoebi
3
Трещины. Только заняло, как ... 4 часа ...
Мартин Эндер
@ MartinBüttner вау, поздравляю! Не ожидал, что ты не сдашься. :-)
bwoebi
6

Haskell, 100 символов (неверный, слишком длинный вывод)

Код

//Sup
tl=[]
while(syn==(+j)) tl+=b.a();
//(: #jquery :)\\
$("#jquery").on("click", j=>alert(j==m))

Выход:

"\er\\e\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"\\\\\\\\\\\\\\\\\\\\\\\\\\"\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"\\\\\\\\\\\\"\\\\\\\\\\\\\"\\\\\\\


оригинал

(#)=(>);(//)=(++)
l=j.show
main=putStr.l.l$l"eer"
j[]="\\"
j(y:u)=let(q,c)=break(#y)u in y:j c//j q
Zaq
источник
5
Я на мгновение подумал, что читаю вопрос «Эволюция Hello World» .
Ви.
1
@ Да, но я думаю, что расстояние Левенштейна в этом посте чуть больше 7.
Зак
1
Выходной больше, чем 100 символов
Линн
1
@Zaq: ограничение не на размер кода, а на вывод!
Линн
1
Да. И я догадался, что ты что-то сделал с fix show. Определенно непробиваемый
гордый haskeller
6

J, 22 байта

Код

!%()1348:::bbceehorvxx

Выход (97 символов)

1226317306651180983274420265228191056569220222873505571155987454033425908908110103433163350999040

Я ожидаю, что это будет практически невозможно ...

Светлячок
источник
6

CJam, 32 байта ( взломан )

Зашифрованный источник

"Beware the Jabberwock, my son!"

Выход

4074552392882954617076720538102062920
Деннис
источник
2
Хм, откуда у вас идея использовать цитату в качестве зашифрованного кода CJam? ;)
Мартин Эндер,
1
Трещины
jimmy23013
@ MartinBüttner: это строка из стихотворения, а не цитата из фильма. Совсем другой!
Деннис
@ Денис Подожди, мой тоже не из фильма. (Не совсем из стихотворения , хотя.: D)
Мартин Эндер
6

Pyth - 35 - треснувший

В духе @ MartinBüttner:

Код

"Programming Puzzles and Code Golf"

Выход

4.459431618637297

Попробуйте расшифровать его онлайн здесь.

FryAmTheEggman
источник
Я взломал его, но в интересах привлечения большего количества людей, чтобы использовать Pyth, я временно удаляю свой ответ.
Исаак
Хорошо, треснул .
Исаак
5

TinyMUSH 3.1 , 20

Яичница:

(#ret,#3!#+#2i\2#,@)

Выход:

3210
Muqo
источник
6
Как мы должны управлять этим? Где ссылка на язык? (Ссылка здесь не помогает).
n̴̖̋h̷͉̃a̷̭̿h̸̡̅ẗ̵̨́d̷̰̀ĥ̷̳
3
@ n̴̖̋h̷͉̃a̷̭̿h̸̡̅ẗ̵̨́d̷̰̀h Вы можете запустить этот код, подключившись к MUSH с соответствующей версией TinyMUSH. Найдите здесь, чтобы найти сервер с типом сервера «MUSH», или загрузите исходный код сервера отсюда и запустите MUSH самостоятельно.
Muqo
5

Python 3, длина 110 [ взломано grc ]

Scrambled ( \nобозначает перевод строки)

\n\n\n   ""((((())))),.......9::;===IOS[]__addeeegghiiiiiiiiijllmmnnoooooooppprrrrsssssssssstttttttttttuuuuuvwyyy

Выход:

The better is Flat dense. break never of be do at never. If bad it honking

Вот еще один забавный - не для того, чтобы быть трудным, а просто что-то необычное и загадочное. :)


объяснение

Случайно выглядящие слова взяты из Дзэн Питона (PEP 20), который автоматически печатается через пасхальное яйцо import this. Отрывок - это просто каждое девятое слово, намекаемое 9::[]настоящим.
Чтобы извлечь каждое девятое слово без автоматической печати фрагмента при импорте, мы перенаправляем sys.stdoutна StringIO().

Sp3000
источник
5

Javascript, 29 - Трещины

Запустить в консоли браузера Chrome

Код

23*47,(no,(.][j,i|i,j][.),on)

Выход

181

Оригинальный код

[,,,].join(3)|[,4,].join(7)*2

Джо
источник
Трещины.
Мартин Эндер