Это сопутствующий поток к основной задаче Unscramble the Source Code . Если вы думаете, что вам удалось расшифровать один из ответов полицейского, вы должны опубликовать свое решение в качестве ответа в этой теме.
Напоминаем, у вас есть одна попытка взломать каждую заявку. Ваша попытка взлома будет расшифрованной версией исходного кода. Если ваше предположение соответствует описанию (те же символы, выходные данные и, конечно, язык), и вы - первое правильное предположение, тогда вы выигрываете очко. Важно отметить, что ваша программа не должна точно соответствовать оригиналу, просто использовать те же символы и иметь одинаковую функциональность. Это означает, что может быть более одного правильного ответа.
Грабитель с наибольшим количеством очков (успешных трещин) побеждает.
Leaderboard
Слишком много решает
- Мартин Бюттнер: (Python 3, 16, matsjoyce) , (CJam, 15, Ypnypn) , (Mathematica, 29, Fox Wilson) , (JavaScript, 15, Caridorc) , (CJam, 52, user23013) , (Pyth, 11, isaacg) , (PHP, 22, kenorb) , (PHP, 13, kenorb) , (Ruby, 17, Doorknob) , (PHP, 49, bwoebi) , (Mathematica, 35, Tally) , (GolfScript, 13, Питер Тейлор ) , (JavaScript, 25, Cris) , (JavaScript, 29, Cris) , (JavaScript, 26, Cris) , (Bash, 33, Debasis) , (JavaScript, 10, Cris), (Луа, 28, ChipperNickel) , (Mathematica, 18, Arcinde) , (JavaScript, 30, Qwertiy) , (CJam, 13, user23013) , (JavaScript, 41, Исмаэль Miguel) , (Рубин, 38, Дверная ручка) , (Marbelous, 36, es1024) , (PHP, 33, Исмаэль Мигель) , (JavaScript, 29, Джо) , (JavaScript, 28, Шон Хольцворт) , (Ruby, 35, гистократ) , (CJam, 19, Ypnypn) , (Ruby, 17, Stephen Touset) , (JavaScript, 36, MegaTom) , (JavaScript, 24, fogcityben) , (Python 3, 21, Reticality) ,(JavaScript, 10, Джейми Баркер) , (JavaScript, 15, Джейми Баркер)
20 решает
- feersum: (Python 3, 44, Sp3000) , (C, 70, es1024) , (MATLAB, 41, COTO) , (Brainfuck, 118, Sp3000) , (C, 30, Ethiraric) , (C, 28, Mig) , (Python 3, 46, hosch250) , (Java, 70, Rodolvertice) , (C, 29, imallett) , (Java, 226, nhahtdh) , (Little Man Computer, 63, The Wolf) , (Python 2, 89 , Beta Decay) , (Python 2, 41, мутная рыба) , (C, 63, es1024) , (C ++, 192, Arcinde) , (Java, 108, durron597) , (C #, 604, eshansingh1) ,(C, 44, Art) , (Java, 134, Olavi Mustanoja) , (Bash, 47, Vi.)
15 решает
- user23013: (CJam, 18, Ypnypn) , (JavaScript, 26, hsl) , (CJam, 12, COTO) , (PHP, 23, bwoebi) , (PHP, 54, Стив Роббинс) , (CJam, 32, Деннис) , (CJam, 19, Мартин Büttner) , (Бака, 23, Волк) , (Рубин, 33, Дверная ручка) , (CJam, 34, Dennis) , (JavaScript, 82, Исмаэль Miguel) , (РНР, 80, Исмаэль Мигель) , (QBasic, 43, DLosc) , (QBasic, 42, DLosc) , (ECMAScript, 90, Cris)
10 решает
- брезгливое ossifrage: (Python, 44, Caridorc) , (PHP, 52, PleaseStand) , (Befunge-93, 17, user23013) , (BBC BASIC, 187, Beta Decay) , (C, 43, Allbeert) , (Ruby, 58, Rodolvertice) , (JavaScript, 32, hsl) , (PHP, 33, kenorb) , (Python 2, 16, imallett) , (PHP, 53, PleaseStand)
- Sp3000: (Python, 154, Fox Wilson) , (Python, 48, kgull) , (Python, 68, рожки) , (Python 2, 38, FryAmTheEggman) , (Python 2, 57, FryAmTheEggman) , (Python, 74, xnor) , (JavaScript, 66, Cris) , (JavaScript, 70, Cris) , (Python 2, 37, мутная рыба) , (Python, 55, FireFly)
7 решает
- grc: (Python 2, 61, FryAmTheEggman) , (Perl 5, 47, chilemagic) , (Python, 69, Sp3000) , (Perl, 39, GentlePurpleRain) , (Perl, 36, брезгливое ossifrage) , (Python 3, 110 , Sp3000) , (C, 53, FireFly)
5 решает
- hsl: (CoffeeScript, 25, Мартин Бюттнер) , (Golfscript, 20, Джозия Уинслоу) , (Lua, 18, user3155415) , (Python, 54, kgull) , (Арифметика, 31, Cris)
- PleaseStand: (PHP, 14, Tryth) , (C ++, 56, hosch250) , (PHP, 21, kenorb) , (QBasic, 37, DLosc) , (JavaScript, 46, FireFly)
4 решает
- bwoebi: (PHP, 52, кенорб) , (PHP, 30, трит) , (PHP, 27, кенорб) , (PHP, 44, кенорб)
- FireFly: (JavaScript, 94, Шон Хольцворт) , (Python, 34, Sp3000) , (Brainfuck, 39, Mig) , (JavaScript, 69, Шон Хольцворт)
3 решает
- Оптимизатор: (JavaScript, 61, jsh) , (JavaScript, 47, palerdot) , (JavaScript, 42, Шон Холзворт)
- es1024: (PHP, 46, Ismael Miguel) , (оболочка Python, 15, xnor) , (оболочка Python, 21, xnor)
- DLosc: (Python, 41, Sp3000) , (Ruby, 37, Rodolvertice) , (CJam, 14, User23013)
2 решает
- xnor: (Python 3, 37, matsjoyce) , (Python 2, 29, Деннис)
- Даниэль Вагнер: (Хаскелл, размер 34, Петр Пудлак) , (Хаскелл, 42 года, гордый Хаскеллер)
- nneonneo: (Python, 41, Sp3000) , (C, 43, FryAmTheEggman)
- Art: (C, 51, es1024) , (C, 48, es1024)
- n̴̖̋h̷͉̃a̷̭̿h̸̡̅ẗ̵̨́d̷̰̀ĥ̷̳: (Java 6+, 101, Rodolvertice) , (Java, 97, Олави Мустаноя)
1 решение
- Ypnypn: (Python 2, 50, Geobits)
- matsjoyce: (Python 3, 12, xnor)
- user1354557: (Python, 56, Фокс Уилсон)
- Деннис: (CJam, 20 лет, Мартин Бюттнер)
- isaacg: ( Pyth , 71, FryAmTheEggman)
- ConMan: (SAS, 17, user3490)
- Arcinde: (JavaScript, 285, Beta Decay)
- Шон Хотазворт: (Javascript, 82, TrungDQ)
- Нооодл: (Рубин, 49, Дверная ручка)
- Бханте Нандия: (Python 3, 37, Sp3000)
- Geobits: (APL, 17, user23013)
- гистократ: (Ruby, 23, MegaTom)
- ProgramFOX: (Python, 13, Reticality)
источник
Ответы:
CJam, размер 20, автор Martin Büttner
Попробуйте онлайн.
Как это работает
Взломать код
Желаемый результат
2.956177636986737
- Double или Double, за которым следует Long.Используя только символы
"Stop, Hammer time!"
, есть четыре встроенных оператора, которые возвращают нецелые числа типа Double:mS
, которыйasin
ma
, которыйatan2
me
, которыйexp
mt
, которыйtan
Все они содержат
m
, поэтому мы можем использовать не более трех из них. Есть только одинS
и одинa
.Все эти операторы нуждаются в вводе данных, и
ma
только один использует два входа. У нас есть только три способа подтолкнуть Лонга:"...",
, что увеличивает длину строки (строго меньше 18).H
, который толкает 17....!
, который выдвигает логическое НЕ...
.У нас нет способа выдвинуть что-то ложное
...
, так как последний вариант всегда будет толкать 0.Вывод не начинается и не заканчивается на
17
или0
. Так как 15 десятичных цифр - это обычное количество цифр для Double, казалось, что вывод был простым Double.Предполагая это, код должен попасть в одну из следующих категорий:
<Long> <mS|me|mt>{1,3}
<Long> <mS|me|mt>{x} <Long> <mS|me|mt>{y} ma <mS|me|mt>{z}
,i
) или округлению (mo
) к Double.Во втором случае
x + y + z
это либо 1, либо 2, а один из длинных - 0 или 17.Остальное было в основном грубой силой. После нескольких попыток
вернулся
9
, что означает, чтопроизводит желаемый результат.
Осталось только удалить из строки все символы, кроме 9. Пробелы - это noops и
i
noop для Longs, поэтому"petStorm!"
это один из возможных вариантов.источник
mr
до того, как взять длину Не то чтобы вы не поняли это в какой-то момент. ;)Python 3, размер 12, от xnor
Ничего не делает (выражение создает пустой кортеж, который не печатается). Это работает из-за оценки короткого замыкания.
источник
()
.print
.bciprt
никогда не выполняется, поэтому он никогда не генерирует NameError.Python, размер 74, xnor
Ну, это было весело. Спасибо FryAmTheEggman, hosch250 и isaacg за предложения / помощь.
источник
list(\nprint(range is range)for aacdeeeeehmppprrrrssvwy in\noct(int is int))
.Python 2, размер 50, Geobits
Выходы 42.
источник
print 2**2**2**2/2**2**2/2**2**2/2-2**2**2*2**2-22
, но это не удивительно, что более одного варианта является правильным.GolfScript, размер 13, Питер Тейлор
Проверьте это здесь.
Еще один, который я только взломал с большой помощью от Sp3000. Благодарность!
Так вот как мы туда попали. Sp3000 заметил кучу последовательных чисел в выводе:
Исходя из этого, мы сделали предположение, что это возрастающая последовательность, которая допускает только одно возможное разбиение оставшихся чисел:
Это 23 числа, что было сильным показателем для повторения блока 22 раза, а также для завершения блока
.
(дублирующий элемент верхнего стека), так что предыдущий результат остался в стеке и чтобы итоговая итерация появлялась на стек в два раза. Это22,{____.}/
.Теперь, глядя на пробелы, они оказываются четвертыми силами (что хорошо, потому что у нас есть
4
и?
). Точнее, они являются четвертой степенью индекса текущего числа. Итак, затем мы посмотрели, какие индексы создали разрыв:В двоичном те
Все они имеют третий установленный бит, что означает, что индекс, вероятно, просто побитовый - и имеет значение
4
(опять же хорошо, потому что мы можем создать другой4
с.
и иметь a&
). Это работает особенно хорошо, потому что эта операция приводит либо к,0
либо4
, и если мы используем это как показатель степени, мы получаем либо1
четвертую степень, либо , что именно то, что нам нужно. Итак, давайте соберем это вместе:Вот что делает блок:
Теперь осталось две проблемы: у нас был бланк, который
,
мы еще не использовали, и первая итерация - это особый случай, в котором нет значения из предыдущей итерации, к которому мы могли бы добавить вещи при встрече+
. Мы обнаружили это благодаря несвязанному комментарию пользователя 23013, который случайно упомянул, что GolfScript начинается с пустой строки в стеке (если в STDIN ничего нет). Таким образом, мы могли бы использовать эту другую,
в самом начале, чтобы превратить эту строку в a0
, что было именно тем, что нам было нужно в начале итерации.источник
Python 3, размер 16, от matsjoyce
источник
Рубин, размер 17, от Doorknob
Это было очень весело. Спасибо Sp3000 за помощь в этом! И я узнал, что
%r?...?
литералы могут иметь любые разделители. :)источник
print
, только для того, чтобы разделить его наp
печать,%r
регулярные выражения иi
сопоставление регулярных выражений без учета регистра.PHP, размер 49, от bwoebi
Это было абсолютно психически .
Это добралось до
довольно быстро, после чего мне нужно что-то, что дает
-6
после запятой,$++$++$++$+=$~main$2
оставив.Основной улов в том , что
$a
,$m
и$i
всеNULL
, поэтому их использование косвенно в переменных величин , означает , что они указывают на один и тот же переменной. Тем не менее, PHP, кажется, делает некоторые странные вещи с разрешением переменных переменных. С обычными переменными вы можете делать такие вещи, каккоторый печатает
4
(2
назначается,$a
а затем добавляется к себе). Но если я сделаю то же самое с переменными переменными:Я получаю
2
, потому что теперь первый$$a
оценка перед назначением.В конце концов мне удалось навязать некоторый порядок, наложив некоторые значения на RHS,
+=
которые должны были быть оценены до этого добавления-назначения. Таким образом, я получил то,5
что я мог тогда просто дополнить. Тем не менее ... происходят некоторые загадочные вещи, и я понятия не имею, почему половина вещей, которые я пробовал, работала и не работала.источник
print@substr(new exception,~$$mn+=2+$$a+++$$i++);
main
были в строке, вводят вас в заблуждение. Кроме того, довольно необычный метод извлечения{main}
, я думаю ;-)main
не вводило меня в заблуждение, после обнаруженияexception
,new
иsubstr
. Я думал, что они будут просто именами переменных. Мне потребовалось немного времени, чтобы придумать, как использовать переменные переменные, а затем я потратил большую часть времени на выяснение порядка операций, которые фактически могли бы привести к операции,5
которую я мог бы дополнить, не используя другой набор скобок.exception
был очевиден, который оставил бездомных персонажейsubstr
иnew
валяется. Это было буквально первое, что я увидел, когда начал работать над этим.Рубин, размер 38, от Doorknob
Я уверен, что это далеко не оригинал. Это детерминированный, несмотря на использование
rand
.Вот как это работает.
$><<
это просто вывод.$pece60
и$win
являются неопределенными глобальными переменными, которые поэтому являются справедливымиnil
(и они позволили мне избавиться от некоторых посторонних символов).!$pece60
делаетtrue
иto_s
дает строку"true"
.Целую вечность я пытался получить
2
или-2
получить доступu
к нему там, но потом я понял, что могу просто взятьt
и вызвать.succ
(essor) для этого, чтобы сделатьu
.rand
сnil
параметром возвращает случайное число с плавающей точкой в интервале [0,1). При использовании чисел с плавающей точкой для индексации строк они усекаются до целых чисел, поэтому всегда будет возвращаться первый символ.Наконец, у меня была запасная пара,
[]
поэтому я просто завернул все в нее, потому что, к счастью, все это выражение в Ruby.Спасибо Sp3000 за то, что он бросил некоторые идеи в чате.
источник
C 51 по es1024
После 20 лет программирования на C сегодня я узнал о шестнадцатеричных константах с плавающей точкой.
источник
Руби, 45 (гистократ)
Woohoo! Это моя первая попытка решить проблему с гольф-кодом, и у меня недостаточно представителей, чтобы прокомментировать исходное сообщение. Я сразу узнал использованный трюк, поскольку я часто нашел его применение в производственном коде. Потребовалось около 5 минут, чтобы выяснить большую часть структуры и несколько часов, чтобы придумать полный ответ.
Объяснение:
%q[]
альтернативный метод для создания строк Скобки и фигурные скобки также могут быть использованы.String#to_i
в Ruby принимает числа в любой базе от 2 до 36. Он игнорирует первый символ в строке, который не является частью числа, поэтому любые лишние символы могут быть «выброшены» после пробела.И вот код, который я использовал для взлома:
Путь встраивания проблемы NP в загадку. Я был полностью обнаженным ботаником. Отличная работа!
источник
p
перед выражением. Предположительно, оставшиеся символы можно использовать для формирования констант, как вы сделали.p %q[zyfnhvjkwudebgmaclrsx].to_i(36)/51074892
хотя я знаю, что я сломал свою настоящую попытку взлома :)Оболочка Python [любая], размер 44, автор Caridorc
Я уверен, что должно было быть что-то большее, чем это, но так как
__name__
приравнивается к__main__
, выбирается 4-й символ «а», а остальная часть строки никогда не оценивается.источник
[__name__ for ___name__ in range(1,4)][2][3]
Perl, размер 36, от брезгливого оссиффража
Еще один сложный.
источник
CJam, размер 13, user23013
Проверьте это здесь.
Решается вручную, вот так:
Во-первых, некоторые предыстории для не-CJammers:
CEGIK
все переменные, которые предварительно инициализируется12
,14
,16
,18
,20
, соответственно.s
преобразует верхний элемент стека в строкуf
это довольно волшебно. Для целей этого ответа упрощенная версия состоит в том, что для массиваa
, некоторого другого значенияb
и оператораg
последовательностьabfg
отображаетсяg(_,b)
наa
(где каждый элементa
входит в_
слот)./
это деление и разбиение массивов (среди прочего).*
это умножение и повторение массива (среди прочего).%
Это модуль и некоторая странная операция, которая в формеad%
для массиваa
и целого числаd
принимает каждыйd
элементa
(как разрезание Python с шириной шагаd
).#
это возведение в степень (среди прочего).,
превращает числа в диапазоны (от0
доn-1
) и возвращает длину массива.Хорошо, это с дороги ...
Было совершенно очевидно, что нам нужно
,
было превратить число в диапазон, потому что единственный другой способ получить массив - это построить большее число и превратить его в массив символов с помощьюs
- но тогда мы не смогли бы ничего сделать дальнейшая арифметика на нем. И нам нужен массив, чтобы сделать что-то сf
s.Сначала я предположил, что
f
s использовались с#
и%
, но это означало бы, что нам понадобится число около 90, чтобы получить правильное количество цифр в конце. А также, это не объясняло, что делать с этимs
, и, поскольку ответ выглядел очень по-гольфистски, я сомневался, что user23013 только что добавилs
в качестве эффективного где-то, чтобы отбросить людей.Так что я подумал, может быть, он даже не держит маленькие числа с
%
, но вместо этого он строит массив из огромных чисел, объединяет их строковое представление сs
, но затем только выбирает из них какой-то странный фрагмент%
. Поэтому я немного поигрался со следующей структурой:(Вы не можете сделать
_f/
сначала, потому что это даст ноль по крайней мере для первых 12 элементов.)Где
_
некоторые перестановки переменных. Я не пробовал их все до того, как мне стало скучно, и главная проблема с этим заключалась в том, что результирующая последовательность цифр как всегда слишком длинная.В какой-то момент мне пришло в голову, что нам не нужен такой большой диапазон (то есть произведение двух чисел), если бы вместо этого мы использовали
*
для повторения полученную строку. Из-за несоответствия параметров*
и%
это не приведет к повторению в результате:Это дало результаты длины, очень близкой к тому, что я искал. Я бы на самом деле попробовал все 240 из них, но довольно быстро (с третьей или четвертой попытки) я наткнулся на
который дает
И я подумал, что совпадение первых шести цифр не будет совпадением. Таким образом, вопрос заключался в том, как переставить его, не нарушая фактические вычисления:
K
потому что это выделило бы разные цифры.C
илиI
потому что это изменило бы числа, полученные в результате двух операций с картой.G
это, это только изменило бы количество повторений, которое не сделало бы ничего, кроме изменения длины результата. (И это хорошо.)E
это, это изменило бы диапазон массива, но диапазон все еще начинался бы с[0 1 2 3 ...]
, таким образом, это не повлияло бы на вычисление. Это будет влиять на длину базовой строки , возвращаемойs
, что также означало бы , чтоK%
бы выбрать различные цифры от дополнительных повторений.Так что я просто попытался обменяться
E
иG
и вуаля:Итак, вот что делает код:
источник
APL, размер 17, user23013
Я провел далеко слишком долго пытаюсь взломать это. Вероятно, все прошло бы быстрее, если бы я знал, что APL входит.
Попробуй здесь
источник
Pyth, размер 11, от isaacg
Это какая-то грубая ошибка прямо здесь. Это компилируется в:
Соответствующая ошибка заключается в том, что вместо этого
\\
компилируется , что позволяет вам компилировать Pyth в строку."\"
"\\"
источник
Pprint
бытьprint
или хотя быpprint
?Питон, размер 69, Sp3000
Это было сложно ...
источник
print(sum(map(ord,str((dict(list(((str(),str(dict())),))),list())))))
, но, очевидно, много разных комбинаций ключевых слов будет работать.Python 3, 37 байт, Sp3000
Смущающе, безусловно, самая сложная часть была в том, чтобы преобразовать строку в байты. Я должен был спать на нем, и ночью понял: "Да, это буквальный байтов!"
источник
PHP, 53, от PleaseStand
Взломали это наконец:
Решение пришло довольно быстро, когда я заметил, что последовательность состоит из чередующихся десятичных и восьмеричных чисел:
Кроме того, интервалы между каждым набором чисел росли со скоростью, равной возвращаемому значению
printf()
(то есть количеству написанных символов).источник
Python 2, размер 132, автор Vi.
Спасибо за все обратные слеши и кавычки :)
Редактировать: обновленная версия с 96 символами:
Это полностью взято из решения Алекса в https://codegolf.stackexchange.com/a/41451/32353
источник
fgiillmmooprrsstt
или,,,\016:::S[]____tuuvyy
.exec
? Мой код должен быть короче ... Я эмулировал его сcompile
+,eval
потому что я забыл оexec
...CJam, размер 15, Ypnypn
По заданным персонажам я догадался, что это должна быть одна из трех следующих форм:
который создает двузначный диапазон, затем отображает операцию сложения и по модулю (в любом порядке) на диапазон, прежде чем его суммировать. Так что я только начал с первого, и систематически пробовал перестановки
6789
в пробелах.источник
PHP, размер 52, от PleaseStand
В конце концов это оказалось довольно легко. Результат выглядит очень случайным, и символы
m
,t
,_
,r
,a
,n
иd
все оказалось в два раза ...источник
Python 2, размер 61, автор FryAmTheEggman
Я был бы очень удивлен, если это соответствует оригиналу.
источник
print''.__doc__[::2][::3].split()[1].split('.')[0][:-~-~True]
dir()
чтобы найти «получить». И да, было бы очень сложно без кавычек.Python 3, Sp3000, размер 44
Python 3 помог мне здесь, так как я смог вызвать ошибку (сдвиг влево
None
на что-то) после печати ответа.источник
print(~(~(()<())<<((()<((),))<<(()<((),)))))
изначально.PHP, размер 52, от kenorb
(Боже, как долго мне
_r
приходилось думать, что делать с оставшимся суффиксом. Пока я не заметил, что это не такprint
, ноprint_r
...)источник
_:print_r(chr(3*pow(2,5)+@++$i));if(@$i<4<<1)goto _;
.echo
невозможно;print
остались; б) вам нужен какой-то цикл, но дляfor
цикла не хватило точек с запятой, и, ну, в общем, есть двоеточие ... так что, вероятно, есть метка в сочетании с goto; в) тогда нужно прервать цикл goto. Имея сейчасX:print($Y);if($Y)goto X;
(X и Y являются заполнителями); г) есть++
, но нет=
, поэтому, вероятно,++$Z
от 1 до 8; д) чтобы получить буквы из целого числа, нам нужноchr()
(обычно) - оно было там; е) теперь мне просто нужно было найти номера 96 и 8 для chr и if. Затем заполните заполнители и volià.PHP, размер 54, Стив Роббинс
Не оригинальное решение, я думаю.
источник
echo
и»while
, но потом не смог найти петлю, которая выдает 42.while
в моем оригинале.C, es1024, длина 70
Сложнее всего было отследить всех ненужных персонажей ... серьезно ... мне пришлось переделывать их примерно 10 раз. Единственное, что меня беспокоило, так это
.
то, что я как-то застрял в серединеprintf
строки формата, и он стал невидимым!источник
Python 3, размер 110, Sp3000
Это было весело :)
источник
Haskell, размер 34, Петр Пудлак
Обратите внимание, что эта программа должна быть запущена на 32-битной машине. Если вы хотите проверить, что это правильная программа, и у вас есть 64-битный компьютер, вы можете использовать вместо этого:
Было довольно легко угадать «рамку» программы
main=print(0x<hex digits>^0x<hex digits>::Int)
. Вся магия заключалась в поиске правильного способа разбить и упорядочить цифры. Я не очень умный здесь, просто поиск грубой силы ... хотя я позаботился о том, чтобы злоупотреблять тем фактом, что некоторые цифры были дублированы, вероятно, было примерно равное количество цифр в базовой и экспоненте, и последняя цифра базы почти наверняка не была четной. Полный код поиска приведен ниже; он использует пакет multiset-comb . Полный поиск занимает около 10:33 на моей машине (и, конечно, дает только один правильный ответ).источник
Javascript, 82, от TrungDQ
Взял навсегда, чтобы получить правильные индексы.
источник