Обратите внимание: следуя популярному требованию, я немного смягчил правила:
- Максимальный размер регулярного выражения увеличивается на 1 байт каждые 5 ответов . Ответ N может использовать до 29 + ⌈N / 5⌉ байтов.
- Оценка каждого ответа будет (M / (30 + N / 5)) N
В regex golf вам дается два набора строк, и вас просят создать самое короткое регулярное выражение, которое соответствует всем строкам в первом наборе, но завершается неудачей на всех строках во втором наборе.
Это то, что мы собираемся сделать, но каждый раз, когда кто-то отвечает, его регулярное выражение будет добавляться к одному из двух наборов строк (по своему выбору). Поэтому в этом вызове существует строгий порядок ответов.
Давайте рассмотрим пример:
- Скажем, я начинаю это с
abc
(что я не буду), и помещаю это в набор совпадений . - Тогда правильным будет второй ответ
a
, так как он соответствует приведенному выше (и пока нет строк, которые должны завершиться с ошибкой). Скажите, что этот ответ идет в наборе ошибок . - Теперь третий ответ должен совпадать,
abc
но потерпеть неудачуa
. Возможный третий ответ поэтомуb
. Давайте поместим это в набор совпадений . - Четвертый ответ теперь должен совпадать
abc
иb
, но провалитьсяa
. Мы будем запрещать повторяющиеся ответы, поэтому действительное регулярное выражение будетc|b
.
Важно то, что ваш ответ должен быть максимально коротким. Это может быть тривиально для первых нескольких ответов, но как только мы получим несколько ответов, будет все труднее и сложнее получить желаемое совпадение в минимально возможном количестве символов.
Для реальной задачи изначально набор совпадений содержит, PPCG
а набор неудач содержит [PPCG]
, и я уже предоставил первый ответ.
Ответ
Главное, что нужно понять в этой задаче, - это то, что только один человек может ответить одновременно, и каждый ответ зависит от предыдущего .
Никогда не должно быть двух ответов с одинаковыми N
. Если два человека одновременно отвечают за N
кого- то , тот, кто ответил позже (даже если разница в несколько секунд), должен любезно удалить свой ответ.
Чтобы сделать это немного более плавным, попробуйте придерживаться следующих шагов при публикации вашего ответа:
- Убедитесь, что кто-то самостоятельно проверил правильность предыдущего ответа (и оставил соответствующий комментарий).
- Возьмите два набора тестов, найденных в предыдущем ответе, и напишите регулярное выражение, которое соответствует всем строкам в одном наборе и ни одной в другом.
Опубликуйте свой ответ в следующем формате:
# N. [regex flavour] - [regex size in bytes] [regex] [link to online regex tester] [notes, explanation, observations, whatever] ### The next answer has to match the following strings: [match set] ### And fail on these strings: [fail set]
где
N
номер вашего ответа. Пожалуйста, скопируйте[match set]
и[fail set]
из предыдущего ответа и добавьте свое регулярное выражение к одному из них.Это абсолютно необходимо для вызова! Я предоставил инструментальную панель для решения этой задачи, чтобы помочь с бухгалтерией, и он опирается на вышеупомянутый шаблон. (См. Нижнюю часть поста.)
- Теперь другой пользователь должен просмотреть вашу заявку и оставить комментарий «Проверена правильность», если ваш ответ соответствует всем правилам (см. Ниже). Если это не так, они должны оставить комментарий, указывая на любые недостатки. У вас есть 15 минут, чтобы решить эти проблемы. Если вы этого не сделаете, ваш ответ будет считаться недействительным, должен быть удален, и кто-то другой может опубликовать последующий ответ на предыдущий. (Если это произойдет, вы можете в любое время отправить новый ответ.)
Эти правила могут показаться довольно строгими, но они необходимы, чтобы избежать неправильных ответов где-нибудь в цепочке.
правила
- Пользователь может отправить только один ответ за 4 часа. (Это сделано для того, чтобы пользователи не могли постоянно следить за вопросом и отвечать на него как можно больше.)
- Пользователь не может отправить два ответа подряд. (например, так как я отправил ответ 1, я не могу сделать ответ 2, но я мог сделать 3.)
- Не редактируйте ответы, которые были проверены. (Даже если вы найдете способ сократить его!)
- Если в цепочке будет обнаружена ошибка ранее (т. Е. После того, как будут опубликованы последующие ответы), ошибочный ответ должен быть удален и будет удален из набора строк, в которых новые представления не будут выполнены. Тем не менее , все ответы, которые были опубликованы с тех пор, не должны быть изменены, чтобы отражать.
- Четко укажите один аромат, в котором действует ваше регулярное выражение. Вы можете выбрать любой аромат, который можно свободно протестировать в Интернете. На StackOverflow есть хороший список онлайн-тестеров . В частности, Regex101 и RegexPlanet должны быть полезны, так как они поддерживают широкий спектр вкусов. Пожалуйста, включите ссылку на тестера, которого вы выбрали в своем ответе. Включив в
g
тестереm
модификаторы lobal и ultiline, вы можете протестировать все строки сразу, по одной в каждой строке (эти модификаторы не учитываются в размере вашего регулярного выражения, поскольку они не нужны для какой-либо отдельной строки). - Ваше регулярное выражение не должно быть пустым.
- Ваше регулярное выражение для ответа N не должно быть длиннее 29 + ⌈N / 5⌉ байтов. Т.е. ответы с 1 по 5 могут использовать до 30 байтов (включительно), ответы с 6 по 10 могут использовать до 31 байта ... ответы с 31 по 35 могут использовать до 36 байтов. Проверьте панель инструментов, чтобы увидеть, сколько символов может использовать следующий ответ.
- Ваше регулярное выражение не должно быть идентичным какой-либо строке в любом наборе тестов.
- Не включайте разделители в ваше представление или количество байтов, даже если их использует соответствующий язык хоста. Если ваше регулярное выражение использует модификаторы, добавьте один байт на каждый модификатор к размеру регулярного выражения. Например
/foo/i
, будет 4 байта.
счет
Оценка каждого ответа рассчитывается как (M / (30 + N / 5)) N , где M - размер регулярного выражения в байтах, а N - его число. Оценка каждого пользователя является продуктом всех их ответов. Пользователь с самым низким общим счетом выигрывает. В маловероятном случае ничьей побеждает пользователь с последней отправкой. Я приму последний ответ этого пользователя.
Если вы предпочитаете суммировать баллы, вы можете рассчитать баллы каждого ответа как N * (log (M) - log (30)) и суммировать их по всем ответам. Это даст тот же порядок в таблице лидеров.
Там нет необходимости включать оценку ответа в в ответ, просто сообщить M . Панель задач в нижней части вопроса подсчитает баллы, и в случае двух очень близких баллов я дважды проверю результаты, используя типы произвольной точности.
Обратите внимание, что оценка каждого ответа меньше 1, поэтому вы можете улучшить свой общий балл, предоставив новый ответ. Однако чем короче каждое из ваших представлений, тем эффективнее вы можете снизить свой балл. Кроме того, более поздние ответы могут получить более низкий балл, хотя и являются более длинными, из-за возрастающей степени.
Панель приборов
Я написал небольшой инструмент Dashboard, использующий фрагменты стека, на основе работы оптимизатора здесь . Я надеюсь, что это поможет нам навести порядок в этих зависимых от ответа задачах.
Это отобразит текущий статус запроса - в частности, если есть противоречивые ответы, если ответ необходимо проверить, или если следующий ответ может быть опубликован.
Он также создает список всех ответов с оценками, а также список лидеров всех пользователей. Пожалуйста, придерживайтесь формата запроса выше, чтобы приборная панель могла считывать соответствующие строки из ваших ответов. В противном случае вы не можете быть включены в таблицу лидеров.
Пожалуйста, дайте мне знать (в идеале в чате ), если вы обнаружите какие-либо ошибки или у вас есть идеи, как можно повысить полезность инструмента.