Это нить полицейских. Для нити грабителей, иди сюда .
Вступление
Для этой задачи «Копы / Грабители» полицейские напишут программы, производящие результаты, и переплетут их вместе. Работа грабителя состоит в том, чтобы разбирать программы полицейских для получения желаемых результатов.
Полицейские правила
Полицейские могут использовать до 256 байт для записи от 2 до 8 (включительно) программ, каждая из которых должна производить вывод. Все написанные программы должны быть на одном языке. Полицейские будут «переплетать» свои программы вместе, чтобы грабителям было сложнее понять, что это за программы.
Теперь для описания переплетения. Рассмотрим строки, представляющие разные программы. Процесс переплетения - это повторное извлечение первого символа любой из программ и конкатенация его до конца новой строки до тех пор, пока ни в одной из программ не останется ни одного символа. Например, если две программы lion
и TIGER
, возможное переплетение TIliGoEnR
. Тем не менее, программы не могут быть зашифрованы каким-либо образом, поэтому RoITEnlGi
не является приемлемым.
Следует отметить, что когда символы всех программ, кроме одной, удаляются из результатов переплетения, оставшаяся программа будет отображаться без изменений. Удаление писем TIGER
из TIliGoEnR
результатов в lion
.
Все программы и выходы полицейских должны содержать только печатные символы ASCII (20-7E) и переводы строк. Программы не должны содержать ошибок и должны запускаться за 10 секунд на подходящей машине. Для любого представления, где-то должен быть свободный переводчик языка. Не допускается добавление комментариев в представленные материалы, а также хеширование и другие виды криптографии. Пустые программы не допускаются (извините, застрял ).
Полицейский опубликует переплетенный код, язык, количество используемых программ и выходные данные для каждой программы. Большое спасибо Мартину за написание этого скрипта CJam для автоматического переплетения ваших программ.
Программы считаются безопасными по истечении одной недели с момента публикации. В этот момент полицейские должны опубликовать отдельные программы, чтобы получить очки.
счет
Есть два компонента, которые добавляются вместе при оценке безопасного представления.
- 256 делится на количество 2, возведенное в степень количества используемых программ.
- Округлите число байтов в переплетении до ближайшей степени 2 и разделите его на 256.
Например, если запись TIliGoEnR
(9 байтов) безопасна, она получит 256/2 ^ 2 + 256/16 = 80 баллов.
Когда представление копа взломано, он теряет 16 очков. Полицейский должен указать, что их представление было взломано.
Победителем соревнования полицейских станет человек, набравший наибольшее количество очков по прошествии достаточного периода времени для участия людей.
Leaderboard
Это незавершенная работа, которая была адаптирована intrepidcoder из этого вопроса .
Чтобы убедиться, что ваш ответ обнаружен, начните его с заголовка, используя точный шаблон уценки:
# Language Name, N programs, M bytes; Score ###/### (if safe/cracked)
Все, что находится после точки с запятой, будет игнорироваться, поэтому вы можете поставить свой счет там.
Если ваша заявка безопасна, поместите заголовок так:
# Language Name, safe, N programs, M bytes; Score ###
Если он взломан, поместите заголовок так:
# Language Name, [cracked](link-to-crack), N programs, M bytes; Score -16
/* Configuration */
var QUESTION_ID = 64520; // 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";
var OVERRIDE_USER = 43444; // This should be the user ID of the challenge author.
var SECONDSINDAY = 86400;
var SAFECUTOFFDAYS = 7;
var SORTBYTIME = true;
var SUBTRACTCRACKEDPOINTS = true;
var EXPIREDTIME = 1448232502000;
/* App */
var SAFE_REG = /<h\d>.*?[sS][aA][fF][eE].*<\/\h\d>/;
var POINTS_REG = /<h\d>.*(\d+)\s*program.*<\/h\d>/i; // /(?:<=|≤|<=)\s?(?:<\/?strong>)?\s?(\d+)/
// var POINTS_REG_ALT = /<h\d>.*?(\d+)(?=[^\n\d<>]*(?:<(?:s>[^\n<>]*<\/s>|[^\n<>]+>)[^\n\d<>]*)*<\/h\d>)/;
var LENGTH_REG = /<h\d>.*?((\d+)\s*byte).*<\/h\d>/i;
var CRACKED_HEADER_REG = /<h\d>.*[Cc][Rr][Aa][Cc][Kk][Ee][Dd].*<\/h\d>/;
var CRACKED_COMMENT_REG = /(.*[Cc][Rr][Aa][Cc][Kk][Ee][Dd].*<a href=.*)|(.*<a href=.*[Cc][Rr][Aa][Cc][Kk][Ee][Dd].*)/
var OVERRIDE_REG = /^Override\s*header:\s*/i;
var LANGUAGE_REG = /<h\d>\s*(.+?),.*<\/h\d>/;
var LANGUAGE_REG_ALT = /<h\d>\s*(<a href=.+<\/a>).*<\/h\d>/
var LANGUAGE_REG_ALT_2 = /<h\d>\s*(.+?)\s.*<\/h\d>/;
var LANGUAGE_REG_ALT_3 = /<h\d>(.+?)<\/h\d>/;
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();
function getAuthorName(a) {
return a.owner.display_name;
}
function process() {
var valid = [];
var open = [];
answers.forEach(function(a) {
var body = a.body.replace(/(<h\d>.*);.*(<\/h\d>)/,"$1$2"); // Ignore all text after a semicolon.
var cracked = false;
a.comments.forEach(function(c) {
var was_safe = (c.creation_date + (SECONDSINDAY * SAFECUTOFFDAYS) > a.creation_date);
if (CRACKED_COMMENT_REG.test(c.body) && !was_safe)
cracked = true;
});
if (CRACKED_HEADER_REG.test(body)) cracked = true;
// if (SUBTRACTCRACKEDPOINTS||!cracked) {
var createDate = a.creation_date;
var currentDate = Date.now() / 1000;
var timeToSafe = (createDate + (SECONDSINDAY * SAFECUTOFFDAYS) - currentDate) / SECONDSINDAY;
var SafeTimeStr = (timeToSafe > 2) ? (Math.floor(timeToSafe) + " Days") :
(timeToSafe > 1) ? ("1 Day") :
(timeToSafe > (2 / 24)) ? (Math.floor(timeToSafe * 24) + " Hours") :
(timeToSafe > (1 / 24)) ? ("1 Hour") :
"<1 Hour";
var expired = createDate > (EXPIREDTIME);
var safe = timeToSafe < 0;
var programs = body.match(POINTS_REG);
var length = body.match(LENGTH_REG);
safe = safe && !cracked
isOpen = !(cracked || safe);
if (programs && length) {
var safepoints = (256/Math.pow(2,parseInt(programs[1],10)) +
256/Math.pow(2,Math.ceil(Math.log2(parseInt(length[1],10)))));
var crackedpoints = Math.pow(2, parseInt(programs[1],10),2) +
Math.pow(2,Math.floor(Math.log2(parseInt(length[1],10))));
valid.push({
user: getAuthorName(a),
numberOfSubmissions: (safe && !expired) ? 1 : 0,
points: (safe && !expired) ? safepoints : 0,
open: (isOpen && !expired) ? 1 : 0,
cracked: (cracked && !expired) ? 1 : 0,
expired: (expired) ? 1 : 0
});
}
if ((isOpen || expired) && programs) {
var language = body.match(LANGUAGE_REG);
if (!language) language = body.match(LANGUAGE_REG_ALT);
if (!language) language = body.match(LANGUAGE_REG_ALT_2);
if (!language) language = body.match(LANGUAGE_REG_ALT_3);
open.push({
user: getAuthorName(a),
safePts: programs ? safepoints : "???",
crackedPts: programs ? crackedpoints : "???",
language: language ? language[1] : "???",
link: a.share_link,
timeToSafe: timeToSafe,
timeStr: (expired) ? "Challenge closed" : SafeTimeStr
});
}
// }
});
if (SORTBYTIME) {
open.sort(function(a, b) {
return a.timeToSafe - b.timeToSafe;
});
} else {
open.sort(function(a, b) {
var r1 = parseInt(a.length);
var r2 = parseInt(b.length);
if (r1 && r2) return r1 - r2;
else if (r1) return r2;
else if (r2) return r1;
else return 0;
});
}
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) {
if (SUBTRACTCRACKEDPOINTS && a.cracked) a.points -= 16;
pointTotals.push(a);
}
else {
pointTotals[index].points += a.points;
pointTotals[index].numberOfSubmissions += a.numberOfSubmissions;
pointTotals[index].cracked += a.cracked;
pointTotals[index].expired += a.expired;
pointTotals[index].open += a.open;
if (SUBTRACTCRACKEDPOINTS && a.cracked) pointTotals[index].points -= 16;
}
});
pointTotals.sort(function(a, b) {
if (a.points != b.points)
return b.points - a.points;
else if (a.numberOfSubmissions != b.numberOfSubmissions)
return b.numberOfSubmissions - a.numberOfSubmissions;
else if (a.open != b.open)
return b.open - a.open;
else if (a.cracked != b.cracked)
return a.cracked - b.cracked;
else return 0;
});
pointTotals.forEach(function(a) {
var answer = jQuery("#answer-template").html();
answer = answer
.replace("{{NAME}}", a.user)
.replace("{{SAFE}}", a.numberOfSubmissions)
.replace("{{OPEN}}", a.open)
.replace("{{CLOSED}}", a.expired)
.replace("{{CRACKED}}", a.cracked)
.replace("{{POINTS}}", a.points);
answer = jQuery(answer);
jQuery("#answers").append(answer);
});
open.forEach(function(a) {
var answer = jQuery("#open-template").html();
answer = answer
.replace("{{NAME}}", a.user)
.replace("{{SAFE}}", a.safePts)
.replace("{{CRACKED}}", a.crackedPts)
.replace("{{LANGUAGE}}", a.language)
.replace("{{TIME}}", a.timeStr)
.replace("{{LINK}}", a.link);
answer = jQuery(answer);
jQuery("#opensubs").append(answer);
});
}
body {
text-align: left !important
}
#answer-list {
padding: 10px;
width: 350px;
float: left;
}
#open-list {
padding: 10px;
width: 470px;
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>Leaderboard</h2>
<table class="answer-list">
<thead>
<tr>
<td>Author</td>
<td>Safe</td>
<td>Open</td>
<td>Cracked</td>
<td>Late Entry</td>
<td>Score</td>
</tr>
</thead>
<tbody id="answers">
</tbody>
</table>
</div>
<div id="open-list">
<h2>Open submissions</h2>
<table class="open-list">
<thead>
<tr>
<td>Author</td>
<td>Points if Safe</td>
<td>Points if Cracked</td>
<td>Language</td>
<td>Time Remaining</td>
<td>Link</td>
</tr>
</thead>
<tbody id="opensubs">
</tbody>
</table>
</div>
<table style="display: none">
<tbody id="answer-template">
<tr>
<td>{{NAME}}</td>
<td>{{SAFE}}</td>
<td>{{OPEN}}</td>
<td>{{CRACKED}}</td>
<td>{{CLOSED}}</td>
<td>{{POINTS}}</td>
</tr>
</tbody>
</table>
<table style="display: none">
<tbody id="open-template">
<tr>
<td>{{NAME}}</td>
<td>{{SAFE}}</td>
<td>{{CRACKED}}</td>
<td>{{LANGUAGE}}</td>
<td>{{TIME}}</td>
<td><a target="_parent" href="{{LINK}}">Link</a>
</td>
</tr>
</tbody>
</table>
|||
скажем), а затем заменитьN
в коде строку, содержащую ваш разделитель, например"|||"
. (@Eridan не стесняйтесь включать это в испытание.)Ответы:
Гексагония , 6 программ, 53 байта; Оценка 8/96 (если безопасно / взломана)
Даже если это будет безопасно, для меня будет очень мало очков, но я подумал, что я бы предоставил грабителям хорошую головоломку, чтобы набрать очки. :) Я понятия не имею, насколько это легко или сложно.
Вот результаты:
источник
[
переключатели управляют указателем инструкций, который начинается@
в левом углу.JavaScript, взломанный , 2 программы, 110 байт; Оценка -16
😈 удачи с этим.
Примечание: я рекомендую работать в современном браузере (в основном не в IE)
Выход, первая программа:
Выход, вторая программа:
источник
BitShift , взломанный , 2 программы, 110 байт; Оценка -16
Переплетенные программы
Выход, первая программа
Выход, вторая программа
Мне очень жаль
источник
Вицы , взломанные , 2 программы, 15 байт; Оценка -16
Переплетенные программы
Витси такая красивая, такая чистая. Загляни в его источник и будь благоговейным.
Выход, первая программа
Выход, вторая программа
Это 121 новая строка.
источник
Java, взломанный , 2 программы, 155 байт; Оценка -16
Чередованные программы
Выход, первая программа
И завершающий перевод строки.
Выход, вторая программа
И завершающий перевод строки.
Оригинальные программы
Первый
второй
источник
interface
вместо,class
пока я не увидел ваш ответ на Hello, World! вызов. Я постараюсь взломать это во время моего обеда.Pyth, safe, 2 программы, 63 байта; Оценка 68
Переплетенные программы
Первая программа
Выход:
Программа:
Вторая программа
Выход
Программа:
источник
# Pyth, safe, 2 programs, 63 bytes; Score 68
CJam, safe, 2 программы, 250 байт; Оценка 65
Переплетенные программы
Выход, первая программа
Выход, вторая программа
Решение
Первая программа
Попробуйте онлайн!
Вторая программа
Попробуйте онлайн!
Как это устроено
Обе программы имеют этот формат:
Удаление плетения из программ должно потребовать либо грубой силы, либо факторинга полупростых чисел.
источник
Befunge, Safe, 2 программы, 228 байт; Оценка 65
Переплетенные программы
Выход, первая программа
Выход, вторая программа
Я сомневаюсь, что это будет легко взломать. На самом деле вы должны просто сдаться сейчас. Кому нужно 132 балла?
Ответ
Программа 1:
Программа 2:
источник
PHP, взломанный , 2 программы, 71 байт; Оценка -16
Interleaved
Выход
1-я программа
2-я программа
Примечание :
Notices
должно быть подавлено.источник
JavaScript ES6, взломанный , 2 программы, 255 байт; Оценка -16
Хорошая работа @Bas! GG.
Выход 1:
Выход 2:
источник
JavaScript (ES6), безопасный, 2 программы, 255 байт; Оценка 65
Чередованные программы
Выход первой программы
Выход второй программы
Я пытался использовать символы
(l)+=<>
максимально . Остальное - просто преобразование типов.Первая программа
Вторая программа
источник
Ruby, взломанный , 2 программы, 64 байта; Оценка -16
Interleaved
Выход
1-я программа
2-я программа
Оба выхода имеют завершающие символы новой строки.
источник
Perl, safe, 2 программы, 102 байта; Оценка 66
Первый вывод
Второй выход
Решение
Первая программа:
Вторая программа:
источник
Pyth, 2 программы, 61 байт; Оценка 68/36 (если безопасно / взломана)
Чередованные программы
Выход, первая программа
Выход, вторая программа
Не должно быть слишком сложно.
источник
PHP, взломан , 3 программы, 31 байт; Оценка -16
Это должно быть легко, используя 3 программы.
Interleaved
Выход
1-я программа
2-я программа
3-я программа
Примечание :
Notices
должно быть подавлено.источник
JavaScript ES6, 2 программы, 225 байт; Оценка 65/132 (если безопасно / взломана)
переплетены:
Первый вывод:
Второй выход:
источник
Brainfuck, 4 программы, 251 байт; 17/144 (если безопасно / треснуло)
Переплетенные программы
Выход, первая программа
Eridan
Выход, вторая программа
Ampora
Выход, третья программа
PPCG
Выход, четвертая программа
Code Golf
источник
Microscript II , безопасный, 2 программы, 44 байта; оценка 68
Чередующиеся источники:
Выход, первая программа:
Выход, вторая программа:
И вот ответ:
Программа 1:
Программа 2:
источник
Malbolge, 2 программы, 194 байта; Оценка 65
переплетены
Выход 1
Выход 2
Это было только вопросом времени.
программы
O1
O2
источник
Javascript, safe, 2 программы, 106 байт; Оценка 66
Выход 1
Выход 2
Решение
Программа 1
Программа 2
источник
Japt , сейф, 3 программы, 63 байта; Оценка 36
Версию интерпретатора, для которой он был построен, можно найти здесь . К сожалению, я потерял оригиналы, поэтому мне придется посмотреть, смогу ли я взломать его сам ...
Переплетенные программы
Выход 1
Это 222 цифры, на случай, если вам интересно.
Выход 2
Выход 3
источник
JavaScript, 2 программы, 255 байт; Оценка 65/132 (если безопасно / взломана)
Первый вывод программы:
Второй выход программы:
Вторая программа выводит текст, а не JavaScript:
null
Это должно быть легко для грабителей.
источник
Vitsy , 4 программы, 228 байт; Оценка 17
(Использует более старую версию, которая связана)
Heeeyyyy @VoteToClose. Я не ожидаю, что этот будет долго, но вы никогда не знаете ... Мне нравится ваш язык, теперь, когда я его часто использую!
Переплетенная программа
Выход 1
Выход 2
Выход 3
Выход 4
Удачи! Я использовал онлайн переводчик, но он должен работать в безопасной банке.
программы
O1
O2
O3
O4
источник
Candy, safe, 2 программы, 85 байт; Оценка 66
См .: конфеты
Выходы:
51450000
1609944
Обновление: это две программы с последующим их чередованием:
источник
Foo , 6 программ, 197 байт; Оценка 5/192 (если безопасно / взломана)
Переплетенный код:
Выход из 1-й программы:
Обратите внимание на вкладку в первой строке и завершающий пробел во второй строке
Выход из 2-й программы:
Обратите внимание, что первая строка пуста
Выход из 3-й программы:
Выход из 4-й программы:
Выход из 5-й программы:
Выход из 6-й программы:
Я знаю только одного переводчика для Foo, вы можете найти его здесь
источник
@wizzwizz4
в свой комментарий.Python 2, 8 программ, 92 байта; Оценка: -16
Еще один легкий:
8 выходов:
источник
print
Python 2.JavaScript, 8 программ, 233 байта; Счет 2/384 (если безопасно / взломан)
ОК, теперь я злая
1-й выход:
2-й выход:
3-й выход:
4-й выход:
5-й выход:
6-й выход:
7-й выход:
Восьмой выход:
источник
Python 2, безопасные 2 программы, 148 байт; Оценка 65
Выход 1:
Выход 2:
Программа 1:
Программа 2:
источник