Соревнование
Я представляю вам еще один вызов шпион против шпиона, противопоставляя обфускаторы против крекеров. В этом случае, однако, защищаемая база данных является не входом, а выходом .
Правила вызова просты. Напишите процедуру со следующими характеристиками:
- Процедура может быть написана на любом языке, но не может превышать 320 байт.
- Процедура должна принимать три 32-битных целых числа со знаком в качестве входных данных. Он может принимать форму функции, которая принимает 3 аргумента, функции, которая принимает один массив из 3 элементов, или полной программы, которая читает 3 целых числа из любого стандартного ввода.
- Подпрограмма должна вывести одно 32-разрядное целое число со знаком.
- Для всех возможных входов подпрограмма должна выводить от 2 до 1000 (включительно) уникальных значений. Число уникальных значений, которые может выдать подпрограмма, называется ее ключом .
Как пример, программа на C
int foo( int i1, int i2, int i3 ) {
return 20 + (i1^i2^i3) %5;
}
имеет ключ 9, так как он (надеюсь) может выводить только девять значений 16
, 17
, 18
, 19
, 20
, 21
, 22
, 23
, и 24
.
Некоторые дополнительные ограничения заключаются в следующем:
- Процедура должна быть полностью детерминированной и не зависящей от времени, возвращая идентичные выходные данные для идентичных входных данных. Подпрограмма не должна вызывать генераторы псевдослучайных чисел.
- Процедура может не полагаться на «скрытые переменные», такие как данные в файлах, системные переменные или функции эзотерического языка. Например, процедуры обычно не должны ссылаться на константы, если только константы не определены четко в самом коде. Подпрограммы, которые основаны на причудах компилятора, выходах из математически неопределенных операций, арифметических ошибках и т. Д., Также настоятельно не рекомендуется. Если есть сомнения, пожалуйста, спросите.
- Вы (кодер) должны точно знать, сколько уникальных выходов может произвести подпрограмма, и должны быть в состоянии предоставить хотя бы одну входную последовательность, которая производит каждый выход. (Поскольку потенциально могут быть сотни уникальных выходных данных, этот набор будет запрашиваться только в том случае, если ваш ключ оспорен.)
Поскольку эта проблема намного меньше похожа на классическое шифрование, чем предыдущая, я ожидаю, что она будет доступна для более широкой аудитории.
Чем креативнее, тем лучше.
Скоринг
Самые короткие не взломанные данные на счетчик байтов будут объявлены победителями.
Если есть путаница, пожалуйста, не стесняйтесь спрашивать или комментировать.
Встречный вызов
Всем читателям, включая тех, кто представил свои собственные процедуры, предлагается «взломать» материалы. Отправка взламывается, когда ее ключ публикуется в соответствующем разделе комментариев. Если представление сохраняется в течение 72 часов без изменения или взлома, оно считается «безопасным» и любой последующий успех в взломе будет проигнорирован ради контеста.
Допускается только одна попытка взлома на каждое представление на читателя. Например, если я отправляю пользователю X: «ваш ключ - 20», и я ошибаюсь, пользователь X откажется от моей догадки как от неправильной, и я больше не смогу отправлять дополнительные предположения для этой отправки.
Взломанные материалы исключаются из спора (при условии, что они не «безопасны»). Они не должны редактироваться. Если читатель хочет представить новую рутину, он должен сделать это в отдельном ответе.
Оценка взломщика - это количество представлений (соответствующих или нет), которые он взламывает. Для взломщиков с одинаковыми подсчетами ранжирование определяется по общему количеству байтов во всех взломанных отправках (чем выше, тем лучше).
Взломщик (-и) с наибольшим количеством баллов будут объявлены победителями вместе с разработчиками процедур-победителей.
Пожалуйста, не взламывайте ваши собственные представления.
Удачи. :)
Leaderboard
Последнее обновление 2 сентября, 10:45 EST
Неподвижные барьеры (не взломанные материалы):
- CJam, 105 [Денис]
Непреодолимые силы (взломщики):
- Деннис [ Ява, 269 ; С 58 ; Mathematica, 29 ]
- Мартин Бюттнер [ Ява, 245 ]
return
и т.д ...