Розшифруйте вихідний код


142

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

У цій грі копів і грабіжників кожен поліцейський напише просту програму, щоб дати єдиний вихід. Потім вони оприлюднить чотири речі про свою програму:

  1. Мову
  2. Довжина програми
  3. Бажаний вихід
  4. Скручена версія вихідного коду

Тоді грабіжники повинні розшифрувати вихідний код, щоб їх програма функціонувала як оригінал.


Правила копа

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

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

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

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

Ваш бал - це найкоротша програма, яку ви подали, яка не була зламана. Через тиждень період невдалої подачі набуде імунітету. Для того, щоб вимагати цього імунітету, слід відредагувати свою відповідь, щоб показати правильну відповідь. (Уточнення: Доки ви не виявите відповідь, ви не застраховані і все одно можете зламатися.) Виграє найнижчий бал.

Простий приклад відповіді поліцейських

Перл, 20

ellir"lnto Wo d";prH

Hello World

Або ...

Перл, 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. Пітона, 23 (mbomb007)
  8. Рубі, 27 (гістократ)
  9. SAS, 28 (ConMan)
  10. Рубі, 29 (гістократ)
  11. Пітона, 30 (mbomb007)
  12. JavaScript, 31 (hsl)
  13. Рубі, 33 роки (історик)
  14. Marbelous, 37 (es1024)
  15. Рубі, 43 (гістократ)
  16. PHP, 44 (kenorb)
  17. Рубі, 45 (історик)
  18. Марбелуса, 45 (es1024)
  19. Пітон 2, 45 (Еміль)
  20. PHP, 46 (Ісмаель Мігель)
  21. Haskell, 48 (nooodl)
  22. Python, 51 (DLosc)
  23. Пітона, 60 (Sp3000)
  24. Пітон 2, 62 (каламутна)
  25. JavaScript, 68 (Джеймі Баркер)
  26. Математика, 73 (Арчінде)
  27. Хаскелл, 77 (гордийскеллер)
  28. Python, 90 (DLosc)
  29. C ++, 104 (користувач23013)
  30. ECMAScript 6, 116 (Mateon1)
  31. C ++ 11, 121 (es1024)
  32. Трава, 134 (користувач23013)
  33. PowerShell, 182 (Христофор)

Нерозв’язані подання

У порядку часу проводки. Цей список ввічливий для багатьох користувачів.

Невеликий інструмент для перевірки рішень, люб’язність n̴̖̋h̷͉̃a̷̭̿h̷̭̿́d̷̰̀ĥ̷̳


4
@xnor Так, це означає.
PhiNotPi

3
Ви можете заборонити хешування ... codegolf.stackexchange.com/questions/40304/…
NinjaBearMonkey

7
Напевно, ви повинні вказати, що переможець повинен опублікувати оригінальний вихідний код через тиждень. Що заважає мені розміщувати безглуздість і стверджувати, що ніхто з розбійників не отримав правильної відповіді?
користувач2023861

62
Я подумав: «Ой, просто напишіть програму про зловживання, зашифруйте її та виграйте цю річ!». Але потім я спробував написати програму зловживання.
rodolphito

8
Попередження: Копи, не використовуйте Ideone для перевірки ваших публікацій, оскільки вони зберігають ваші програми та інші люди можуть їх бачити.
rodolphito

Відповіді:


65

Python 3, розмір 74 ( тріщини )

Python просто не був таким самим після того, як його перевиховували у Big Brother.

Вхід:

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

В кінці рядків 1 і 2 є дві нові лінії.

Вихід:

True
True
True

Зауважте, що кожен Trueу своєму рядку.


1
Що за дверима 101?
FryAmTheEggman

5
Спочатку я був 2+2==5четвертим твердженням, поки не виявив, що =зробити це занадто просто.
xnor

5
Ніцца посилання 1984 року.
Джастін

2
Тріснув . Це було чудово.
Sp3000

52

Python 3, розмір 12 ( тріщини )

print (abcd)

Моя програма не видає жодних результатів та помилок.


4
Тріснув . Приємно, рішення дуже контрінтуїтивне.
matsjoyce

2
Дуже приємно, я збирався intна деякий час.
Фокс Вілсон

@matsjoyce Чудово виконано. Це було моє намічене рішення.
xnor

1
@matsjoyce Так, я очікував, що хтось зробить це врешті-решт. Все-таки я закликаю всіх не псувати себе і намагаюся вирішити це вручну. Запевняю, це миле рішення.
xnor

Я думаю, що я це отримав. Знайдене нами рішення не працює, якщо спершу введіть, pythonа потім введіть своє рішення. Але це спрацьовує, якщо я поміщую своє рішення у файл та тип python file.
kasperd


26

Python 2, розмір 50

Тріснув

Відповідь на питання ми вже знаємо, але що таке питання?

Код

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

Зауважте, що немає пробілів чи нових рядків. Єдиним символом пробілу є єдиний пробіл після print.

Вихідні дані

42

Я намагався врівноважити довжину і складність коду, але це не здивувало б мене, якби я його пропустив трохи. Сподіваємось, цього достатньо, щоб принаймні відмовити від грубої сили.



6
Це було б краще з розміром 42.
CVn

23

Pyth - 71 Cracked

Код

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 аscii значення мінус 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 :)


9
Вищезазначене може містити кричущо складену інформацію про створення Star-Wars.
FryAmTheEggman


@FryAmTheEggman Теги можна використовувати в блоках, наприклад<br>
Sp3000

21

CJam, розмір 51 [SAFE]

Код

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

Вихідні дані

55
2292213229222231957511222223333751125537511222222135723331131931959319319

Ви можете пограти з цим в онлайн-перекладачі .

Це повинно бути хитрішим, ніж виглядає.

Підказка

Почніть з другого рядка виводу. Кілька цифр не відображаються у всіх, а інші - підозріло часто. Чому це могло бути? Якщо ви можете розшифрувати це, решта повинна майже стати на місце.

Рішення

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

Погоди, мабуть, було дуже погано, коли я придумав цю анаграму ...

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


9
Зачекайте, це це сутичка ???
TheDoctor

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 байт) [SAFE]

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

Очікуваний вихід:

-117345085515973157874551915956356303213327583847247840186528288852476459638212404362749

Оригінальне джерело:

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


Це очікуваний вихід, виключаючи зворотний новий рядок, чи новий рядок просто не виводиться?
ProgramFOX

@ProgramFOX, результат закінчиться новим рядком. Єдині способи, які я знаю, уникнути цього потребували б :.
Пітер Тейлор


13

Пітон, 69 символів [ розтрісканий grc ]

Зашифровано:

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

Вихід:

1083

Це просто нешкідливе задоволення :) Тестовано на CPython 2.7.8, 3.3.2 і для чорта цього PyPy3 2.3.1.


Пояснення

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




11

Пітон 3, 70 символів

Зашифровано:

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

Вихід (довжина 99 символів):

388626024960000000000026872002432000000000000676169243200000000000007317718780000000000000028820330

Оновлення

Минув тиждень, тож замість публікації відповіді ось вам підказка:

Спробуйте взяти квадратний корінь числа та працювати звідти



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


У мене таке відчуття, це не працюватиме у всіх браузерах / движках. У якому середовищі ви це випробували?
Мартін Ендер


Ох ... і я був переконаний, що ти був 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!


1
@ MartinBüttner Я знав, що хтось бачив писанку ...
matsjoyce

1
Я цього не робив, але я швидко погукав його. Чесно кажучи, якби я не поспішав, я, певно, міг би бачити, що решта символів після helloних була анаграмою import. ^^
Мартін Ендер

7

Perl - 47 ( потрісканий grc )

Код (там також є пробіл)

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

Вихід:

012345012345012345012345012345

Ви можете запустити його в Інтернеті тут, і він працює під strictта warnings.



@grc Я б сказав, що це дійсно! Хороша робота! Це правильно друкує. Якщо ви хочете отримати деякі підказки щодо версії, яка працює під strictі warningsдайте мені знати.
hmatt1

7

Ruby, 33 - розтріскується користувачем23013

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

Вихід:

[*]

Оригінал:

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


Яка версія це?
Лінн

@nooodl У мене 1.9.3, але в цьому немає нічого конкретного для версії.
Дверна ручка

Це важко. Ось те , що я до сих пір: puts очевидно , буде перше , що там, .nextще одне ключове слово , яке може бути використано, а решта яка - то чаклунства з рубіновими $змінних і створення масиву символів .... +1
rodolphito


@ user23013 Приємно! Не оригінал, хоча; Я , ймовірно , повинен мати вихідні символи , що не були на самому справі в джерелі;)
дверна ручка

7

Python2, 132 символів

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

Вихід (з новим рядком):

chance

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

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

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

Оновлення: зламано

Повністю зламаний Алекс Ван Лів та КенніТМ . Оригінальні рішення були (прокрутіть праворуч, щоб виявити спойлер):

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

Скільки є нових рядків?
Sp3000

Жоден (без урахування логічних нових рядків, таких як \nвнутрішні рядки рядків). З новими рядками код може бути коротшим.
Ві.

2
+1 за те, що я не даю мені достатньої кількості xs і cs, щоб робити те, що хочу зробити: P
Sp3000

1
Чи варто придумати якийсь натяк? Давайте почнемо з розпливчастим: Don't count ones which exist. Count ones which do not exist.
Ві.


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

Пояснення

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


6

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

Код

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

Вихідні дані

{main}

Ви б не могли розкрити, з якою версією 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

5
Я на мить подумав, що читаю питання "Еволюція Hello World" .
Ві.

1
@Vi так, але я думаю, що відстань Левенштейна - це трохи більше 7 у цій посаді.
Зак

1
Вихід довше 100 символів
Лінн

1
@Zaq: обмеження розміру не на розмірі коду, а на виході!
Лінн

1
Ага. І я здогадався, ти щось робив fix show. Definately невзламиваемий
гордий haskeller

6

J, 22 байти

Код

!%()1348:::bbceehorvxx

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

1226317306651180983274420265228191056569220222873505571155987454033425908908110103433163350999040

Я думаю, що це практично неможливо ...


6

CJam, 32 байти ( тріщинами )

Зашифроване джерело

"Beware the Jabberwock, my son!"

Вихідні дані

4074552392882954617076720538102062920

2
Гм, звідки ви взяли ідею використовувати цитату як скремтований код CJam. ;)
Мартін Ендер


@ MartinBüttner: Це рядок з поеми, а не цитата з фільму. Зовсім інакше!
Денніс

@ Денніс Зачекайте, моя теж не з фільму. (Не зовсім із вірша , однак.: D)
Мартін Ендер

6

Pyth - 35 - Тріщини

У дусі @ MartinBüttner:

Код

"Programming Puzzles and Code Golf"

Вихідні дані

4.459431618637297

Спробуйте розшифрувати його онлайн тут.


Я зламав це, але, зацікавившись, щоб більше людей використовувало Pyth, я тимчасово видаляю свою відповідь.
isaacg

Гаразд, потрісканий .
isaacg

5

TinyMUSH 3.1 , 20

Зашифровано:

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

Вихід:

3210

6
Як ми повинні це запустити? Де мовна мова? (Посилання тут не допомагає).
n̴̖̋h̷͉̃a̷̭̿h̸̡̅ẗ̵̨́d̷̰̀ĥ̷̳

3
@ n̴̖̋h̷͉̃a̷̭̿h̸̡̅ẗ̵̨́d̷̰̀h Ви можете запустити цей код, підключившись до MUSH з відповідною версією TinyMUSH. Перегляньте тут, щоб знайти той, де тип сервера - "МУШ", або завантажте джерело сервера звідси та запустіть MUSH самостійно.
Muqo

5

Python 3, довжина 110 [ розтріскується grc ]

Зашифрований ( \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на a StringIO().



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