Нить полицейских можно найти здесь: Mystery String Printer (Cops)
Ваш вызов
счет
Скоринг работает аналогично для грабителей, но немного отличается:
- Взлом любой программы ≤8 байт дает 1 балл.
- Взлом программы ≤16 байт дает 2 балла. ≤32 байта дает 4 балла и так далее.
- Каждая дополнительная подача, независимо от длины, приносит +5 баллов
- Представление каждого полицейского может быть взломано только один раз - только первый человек, взломавший каждое представление, получает очки.
Материалы
Каждый ответ должен включать
- Ссылка на представление полицейского.
- Ваша программа и язык программирования.
- Также имейте длину программы полицейского (как степень 2) в качестве последнего числа в вашем заголовке.
Кроме того, пожалуйста, прокомментируйте представление полицейского со ссылкой на ваш ответ.
Вот фрагмент стека для создания списков лидеров. Пожалуйста, оставьте комментарий, если есть проблема с фрагментом. Если вы хотели бы видеть все представления открытых полицейских, посмотрите фрагмент в вызове полицейских.
/* Configuration */
var QUESTION_ID = 60329; // Obtain this from the url
// It will be like http://XYZ.stackexchange.com/questions/QUESTION_ID/... on any question page
var ANSWER_FILTER = "!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe";
var COMMENT_FILTER = "!)Q2B_A2kjfAiU78X(md6BoYk";
/* App */
var answers = [],
answers_hash, answer_ids, answer_page = 1,
more_answers = true,
comment_page;
function answersUrl(index) {
return "//api.stackexchange.com/2.2/questions/" + QUESTION_ID + "/answers?page=" + index + "&pagesize=100&order=desc&sort=creation&site=codegolf&filter=" + ANSWER_FILTER;
}
function commentUrl(index, answers) {
return "//api.stackexchange.com/2.2/answers/" + answers.join(';') + "/comments?page=" + index + "&pagesize=100&order=desc&sort=creation&site=codegolf&filter=" + COMMENT_FILTER;
}
function getAnswers() {
jQuery.ajax({
url: answersUrl(answer_page++),
method: "get",
dataType: "jsonp",
crossDomain: true,
success: function(data) {
answers.push.apply(answers, data.items);
answers_hash = [];
answer_ids = [];
data.items.forEach(function(a) {
a.comments = [];
var id = +a.share_link.match(/\d+/);
answer_ids.push(id);
answers_hash[id] = a;
});
if (!data.has_more) more_answers = false;
comment_page = 1;
getComments();
}
});
}
function getComments() {
jQuery.ajax({
url: commentUrl(comment_page++, answer_ids),
method: "get",
dataType: "jsonp",
crossDomain: true,
success: function(data) {
data.items.forEach(function(c) {
answers_hash[c.post_id].comments.push(c);
});
if (data.has_more) getComments();
else if (more_answers) getAnswers();
else process();
}
});
}
getAnswers();
var POINTS_REG = /(?:<=|≤|<=)\s?(?:<\/?strong>)?\s?(\d+)/
var POINTS_REG_ALT = /<h\d>.*?(\d+)(?=[^\n\d<>]*(?:<(?:s>[^\n<>]*<\/s>|[^\n<>]+>)[^\n\d<>]*)*<\/h\d>)/;
function getAuthorName(a) {
return a.owner.display_name;
}
function process() {
var valid = [];
var open = [];
answers.forEach(function(a) {
var body = a.body;
var cracked = false;
var points = body.match(POINTS_REG);
if (!points) points = body.match(POINTS_REG_ALT);
if (points) {
var length = parseInt(points[1]);
var crackedpoints = 0;
if (length > 64) crackedpoints = 16;
else if (length > 32) crackedpoints = 8;
else if (length > 16) crackedpoints = 4;
else if (length > 8) crackedpoints = 2;
else crackedpoints = 1;
valid.push({
user: getAuthorName(a),
numberOfSubmissions: 1,
points: crackedpoints
});
}
});
var pointTotals = [];
valid.forEach(function(a) {
var index = -1;
var author = a.user;
pointTotals.forEach(function(p) {
if (p.user == author) index = pointTotals.indexOf(p);
});
if (index == -1) pointTotals.push(a);
else {
pointTotals[index].points += a.points;
pointTotals[index].numberOfSubmissions++;
}
});
pointTotals.forEach(function(a) {
a.points += +((a.numberOfSubmissions - 1) * 5);
});
pointTotals.sort(function(a, b) {
var aB = a.points,
bB = b.points;
return (bB - aB != 0) ? bB - aB : b.numberOfSubmissions - a.numberOfSubmissions;
});
pointTotals.forEach(function(a) {
var answer = jQuery("#answer-template").html();
answer = answer
.replace("{{NAME}}", a.user)
.replace("{{SUBMISSIONS}}", a.numberOfSubmissions)
.replace("{{POINTS}}", a.points);
answer = jQuery(answer);
jQuery("#answers").append(answer);
});
}
body {
text-align: left !important
}
#answer-list {
padding: 20px;
width: 240px;
float: left;
}
#open-list {
padding: 20px;
width: 450px;
float: left;
}
table thead {
font-weight: bold;
vertical-align: top;
}
table td {
padding: 5px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<link rel="stylesheet" type="text/css" href="//cdn.sstatic.net/codegolf/all.css?v=83c949450c8b">
<div id="answer-list">
<h2>Robber's Leaderboard</h2>
<table class="answer-list">
<thead>
<tr>
<td>Author</td>
<td>Submissions</td>
<td>Score</td>
</tr>
</thead>
<tbody id="answers">
</tbody>
</table>
</div>
<table style="display: none">
<tbody id="answer-template">
<tr>
<td>{{NAME}}</td>
<td>{{SUBMISSIONS}}</td>
<td>{{POINTS}}</td>
</tr>
</tbody>
</table>
Этот конкурс сейчас закрыт.
Общий победитель: kennytm
Большинство представлений: Sp3000
(Обратите внимание, что количество заявок не переводится точно в баллы, так как длина взломанной программы учитывается при подсчете очков).
Ответы:
Пиф, Деннис, ≤ 8
Чёрт, это было весело - самая сложная часть - выяснить, как сделать это достаточно коротко в Pyth.
Анализ
В
1234
начале намекает, что мы, вероятно, имеем дело со списком чисел, напечатанным без разделителя. Давайте попробуем разделить числа так, чтобы это имело смысл:Есть несколько подсказок, что мы на правильном пути:
Однако есть несколько особенностей. Число в индексе 23 равно 24, и это единственный случай, когда число в индексе больше, чем сам индекс. Тем не менее, большая подсказка в том, что некоторые числа явно меньше, чем у их соседей, особенно 7 в индексе 15, 8 в индексе 22 и 9 в индексе 30.
Отмечая, что это формирует шаблон 7-8-9, мы также можем видеть, что последнее число - 10 по индексу 42. Учитывая недавний вопрос @Dennis об абелевых группах , быстрая проверка OEIS показывает, что
15, 22, 30, 42
это подпоследовательность раздела номера . Pyth имеет встроенную функцию для разделов, которая дает нам два из восьми символов:./
Но обратите внимание, что последнее число - 10, что является подозрительным, потому что 10 является преинициализированной переменной в Pyth, as
T
../T
дает полный список из 42 разделов из числа 10, что может пригодиться.Теперь печать выполняется без разделителя, поэтому намекает на использование
p
. Возможно, мы перебираем каждый раздел, что-то с ним делаем, а затем печатаемp
? Это дает нам следующий шаблон:где
V
цикл for, который циклически повторяется, сохраняя каждый элемент в переменнойN
.Беглый взгляд на второй последний раздел
(5, 5)
должен показать, что мы хотим взять продукт. Наивный способ уменьшить список путем умножениягде
d
список в вопросе. Однако это слишком долго.К сожалению, именно здесь мне пришлось вытащить грубую силу. Я не поспевал за Pyth какое-то время, поэтому я не знал многих новых функций. Осталось только два персонажа, что выглядело вполне выполнимо.
Брутфорсер затем вернулся:
где
*F
складывается*
(умножение). Неудивительно, что я не нашел его в своем поиске - я искал ключевое слово «уменьшить», а не «свернуть»!источник
jk*M./T
<= 7
я был бы обречен. Конечно, прошло много времени с тех пор, как я проверил язык.Mathematica, альфальфа, ≤ 32
Ненавижу это говорить, но я сразу узнала номер.
источник
31!10!27079205916672
> <>, VTCAKAVSMoACE, ≤ 64
По иронии судьбы, он не только намного ниже предела диапазона, но и переносим и работает с онлайн-переводчиком .
Анализ
Давайте начнем с целевой строки:
> <> помещает символы в стек с помощью
'
или"
в строковом режиме, но с 63 символами для печати и только 64 байтами для работы, наличие заглавных букв (недопустимые инструкции в> <> для стандартного трюка с циклическим циклом) делает прямую печать невозможно. Следовательно, мы должны что-то делать с кодами.Преобразование в кодовые точки дает (я использую Python здесь):
Обратите внимание, что последние три числа совпадают с первыми тремя. Это намекает на возможный цикл по модулю.
Давайте посмотрим, сколько у нас разных элементов:
У нас есть 63 элемента
L
, первые три из которых совпадают с последними тремя. Это означает, что, кроме этого столкновения, все остальные элементы являются уникальными. Теперь это намекает на что-то вроде взятия степеней по модулю простого числа. Действительно,60 + 1 = 61
простое, что является хорошим знаком.Давайте попробуем найти самый маленький элемент
и используйте это, чтобы уменьшить все элементы так, чтобы минимальный элемент был 1:
Обратите внимание , как элемент после
1
есть51
. Если происходит что-то вроде умножения / умножения, это хорошая догадка для нашего множителя.Давайте попробуем:
Бинго! Теперь мы можем вернуться, дав следующий код:
который затем был переведен на> <>
источник
Pyth, Maltysen, ≤4
Грубая сила заняла так много времени, что я сделал это быстрее, вручную.
Анализ
C
(преобразовать строку в основание 256 int) - это самый простой способ создать большое число в Pyth, так что это, вероятно, первый символ. Если мы конвертируем из базы 256, мы получим:Хм ... не очень освещает.
Теперь
G
это алфавитная строка"abc...z"
, которая выглядит как источник длинной строки для вводаC
. Просматривая документы, я нахожу:Если мы имеем дело со сжатием здесь, было бы не удивительно получить все виды расширенных символов ASCII. Попытка
C.ZG
затем дала ответ.источник
Фурье, бета-распад, ≤ 32
Или, в качестве альтернативы, в CJam:
Анализ
В начале мы можем видеть много сил 2:
Если мы возьмем лог-базу 2 этих чисел, мы получим:
который является серией Фибоначчи, начиная с
1, 0
.источник
Улитки, feersum, ≤2 байта
На самом деле это 2 байта; символ,
z
за которым следует символ новой строки\n
.Я понятия не имею, как это работает или что делает, но после тестирования всех возможных входных данных, кроме
~+
и~,
, это была единственная 2-байтовая программа, которая8
выводилась как выходная.И он взял возрасты , чтобы получить этот результат. Не зря это называется "Улитки" :-D
Примечание для себя: в следующий раз, когда вы запустите тестирование неизвестного программного обеспечения, сделайте это внутри виртуальной машины.
источник
Руст, Лиам Норонья, ≤128 байт
Простая дословная печать строки составляет 120 байт ...
источник
Макароны 0.0.2, дверная ручка, ≤64
источник
Python 2, четкий вопрос с примерами, <= 64
Одно из возможных решений:
(
9**2139
,27**1426
А729**713
также дают тот же результат)источник
CoffeeScript, user2428118, ≤64
(работает только на Chrome 46.0.2490.71, как описано коп.)
Вывод - это, очевидно, конкатенация коротких строк в кодировке base64 из-за всех "=". После их декодирования мы находим список 2-символьных строк, таких как
что, кажется, не имеет смысла. Но я нахожу в нем несколько странных вещей, как
nX
иtY
. После фильтрации мы получаемЭти X и Y, кажется, указывают на исходный исходный код, используемый свойства позиции, как
offsetX/Y
. Особенно интересным являетсяnZ
предмет. Чтобы проверить мое предположение, я искал все свойства, которые заканчиваются на «Z»:который показывает тонны
CSSStyleDeclaration, "webkitTransformOriginZ"
. Отсюда мы имеем четкое указание на то, что список состоит из последних 2 символов всех ключейstyle
объекта, что, как показывает приведенный выше тест, действительно является правильным.источник
Луа <= 4, Егор Скриптунов
Многие пользователи были взволнованы этим ответом в чате, поэтому я должен избавить их от страданий. Я не знаю Луа и не смог проверить это, но я был бы очень удивлен, если бы это не сработало.
Это было бы довольно очевидно, но, вероятно, никто не получил его, потому что побитовые операторы были добавлены только в версии 5.3; ideone.com имеет только версию 5.2.
источник
Питон 2, гистократ, ≤16
Самым большим намеком является обещание, что оно не будет работать в Python 3. Что изменилось в Python 3 ? Самым большим подозрением является то, что оператор деления возвращает
float
в Python 3.Поэтому я предполагаю, что решение имеет вид ⌊α β / n⌋ = c = 22111101102001, так как возведение в степень - единственный короткий способ создания огромных чисел.
Если {α, β, n} действительно образует решение, то (cn) 1 / β ≈ α должно быть очень близко к целому числу. Поэтому я использую следующее, чтобы попытаться перебором {α, β} для каждого n:
Фактический результат быстро получается, когда n = 6.
источник
MATLAB, StewieGriffin, ≤ 16
Печать:
источник
5*'$W'.'*' |'
..73
вместо 5, сделай+5
или сделай3x3
матрицу, но подумал, что это было веселее. Мог бы многое сделать с тремя оставшимися байтами..'
, но имеет полный смысл - интересовался, как переставить строку, не прибегая к скобкам.Матлаб, Луис Мендо, ≤16
Я нашел это, ура!
Я не знал, что Октава тоже может это сделать.
источник
peaks()
?peaks
.Mathematica, LegionMammal978, ≤64
источник
Питон, космонавт, ≤ 64
Славный обратный символьный калькулятор. Не очень хорошо, но эй это подходит.
Редактировать: я играл в гольф.
источник
JavaScript ES6, Cᴏɴᴏʀ O'Bʀɪᴇɴ, ≤128 байт
Я сомневаюсь, что это совершенно верно, поскольку мне не нужно было где-то около 128 байтов, но найти повторяющуюся последовательность было забавным испытанием.
источник
Чт, ppperry, <= 64
По существу, декомпозирует 2016 год на основные факторы. 62 символа, так что я думаю, это похоже на то, что вы собирались.
источник
Python, DLosc, ≤32
(Это решение использует Python 2)
источник
> <>, Sp3000, <= 8
Указатель инструкций оборачивается и выполняются следующие шаги:
'l(?; o>'
помещает значения ASCIIl(?; o>
в стекl
толкает размер стека в стеке(
сравните два верхних элемента стека:size of stack
иord('>')
?;
останавливает программу, если размер стека был большеo
вывести верхний элемент стека как символ (это будет всегдаo
)>
задает направление IP, здесь он не работаетВыход есть
oooooooooooo
.Мы можем получить много разных выходных данных, изменив
[space]
что-то, что помещает или выталкивает в стек, и вместо него использует другой допустимый символ>
, который также может выдвигать или выдвигать.источник
'l=?;o*
JavaScript, ev3commander, ≤ 32
ОК, это было легко.
источник
CJam, Рето Коради, ≤ 4
Толкает 17 , затем 19 20 = 37589973457545958193355601 .
Попробуйте онлайн.
Есть только так много вещей, которые вы можете сделать в четырех байтах. Это целое число должно было каким-то образом включать степени или факториалы, а у факториала были бы конечные нули.
источник
Пиф <= 4, Деннис
Это длина соединения на новых строках всех подмножеств алфавита.
Тестовый забег:
Я выяснил, что число
2^27 * 7 - 1
является сильным намеком, на котором оно основаноyG
, которое состоит из2^26
элементов long. Я тогда предположил, что это должно было быть преобразовано в строку, и ее длина напечатана. Однако единственный способ сделать это, о котором я мог думать некоторое время, был ``, repr. Тогда я подумалj
, что подходит идеально.источник
C, Tucuxi, ≤64
Все выходные значения равны 0 и 1, но C не может печатать двоичные данные напрямую, поэтому весьма вероятно, что это булевы результаты.
Здесь больше 1, чем 0, поэтому я записал позиции 0s (
3, 9, 13, 19, …
), что оказывается OEIS A075318 . Это не полезно, хотя, нет простой формулы, чтобы определить, где число находится в этой последовательности.Но мы отмечаем, что есть все нечетные числа, поэтому, возможно,
(x-1)/2 = {1, 4, 6, 9, 12, …}
есть более полезная информация. И это A003622 .A003622 можно определить как «позиции 1 в A003849 », и это именно то, что нам нужно взломать здесь. А A003849 определяется как « A003714 mod 2», где A003714 - это просто целые числа
x & (2*x) == 0
. Таким образом, мы получили решение.OEIS rox.
источник
Дьялог АПЛ, Деннис, №4
Вычисляет ln (8) ^ ln (8). StackExchange перестанет конвертировать мои ответы? Я напишу кучу вещей здесь, чтобы они не превратились в комментарий.
источник
8*⍟⍟8
но не знал о⍨
. Хорошая работа :)Застрял, @quartata, ≤8
Следующая программа Pyth :
производит желаемый результат
Метод взлома: искал в Google номер.
источник
Pyth, xnor, ≤ 4
CG
(преобразовать строку алфавита"abc...z"
из базы 256) - это типичный способ Pyth для генерации действительно большого числа. После этого он просто преобразуется в строку и снова конвертируется из базы.источник
Python 3, Mego, ≤128
(Использование Python 3.5.0, не тестировалось в предыдущих версиях.
10598 байт.)источник
Рубин, дверная ручка, ≤64
источник
Matlab / Octave, Wauzl, ≤16
Используя ту же идею, что и ответ Тома Карпентера
(Если это не сработало, попробуйте это :)
источник
(1*'234')'*'567'
в виду, потому что ваш первый ответ не работает в Matlab.