Обратите внимание: следуя популярному требованию, я немного смягчил правила:
- Максимальный размер регулярного выражения увеличивается на 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, использующий фрагменты стека, на основе работы оптимизатора здесь . Я надеюсь, что это поможет нам навести порядок в этих зависимых от ответа задачах.
Это отобразит текущий статус запроса - в частности, если есть противоречивые ответы, если ответ необходимо проверить, или если следующий ответ может быть опубликован.
Он также создает список всех ответов с оценками, а также список лидеров всех пользователей. Пожалуйста, придерживайтесь формата запроса выше, чтобы приборная панель могла считывать соответствующие строки из ваших ответов. В противном случае вы не можете быть включены в таблицу лидеров.
Пожалуйста, дайте мне знать (в идеале в чате ), если вы обнаружите какие-либо ошибки или у вас есть идеи, как можно повысить полезность инструмента.
источник
Ответы:
42. Вкус Python - 38
Проверено на Regex101
Отсутствие энтропии в последних нескольких ответах дошло до меня ... (следовало бы сделать это раньше)
Следующий ответ должен соответствовать следующим строкам:
И потерпите неудачу на этих строках:
источник
28. Питон вкус - 29
Проверено на Regex101
Было сделано много поворотов - # 4 в наборе проходов, вероятно, самая большая боль, так как это подстрока регулярного выражения в наборе сбоев, а также разделяет суффикс с другим регулярным выражением в наборе сбоев.
Следующий ответ должен соответствовать следующим строкам:
И потерпите неудачу на этих строках:
источник
24 - вкус питона - 29
Проверено здесь
Следующий ответ должен соответствовать следующим строкам:
И потерпите неудачу на этих строках:
источник
10. Питон вкус - 19
Проверено на Regex101 .
Следующий ответ должен соответствовать следующим строкам:
И потерпите неудачу на этих строках:
источник
8. Емкость ECMAScript - 14 байт
демонстрация
Следующий ответ должен соответствовать следующим строкам:
И потерпите неудачу на этих строках:
источник
2. Емкость ECMAScript - 6 байт
Проверьте это здесь
Следующий ответ должен соответствовать следующим строкам:
И потерпите неудачу на этих строках:
источник
9. Вкус Python - 28
Проверено на Regex101
Следующий ответ должен соответствовать следующим строкам:
И потерпите неудачу на этих строках:
источник
23. PCRE ароматизатор - 28
Проверено на Regex101.
Следующий ответ должен соответствовать следующим строкам:
И потерпите неудачу на этих строках:
источник
[^]
?]
как первый элемент класса символов (после необязательного отрицания), является просто]
внутри класса символов и не закрывается (потому что пустые классы символов немного бессмысленны). Так что[^]]
соответствует что угодно, но]
. Заметным исключением является ECMAScript, который допускает пустые классы символов. В этом случае[]
ничего не совпадает, он действует как(?!)
и[^]
совпадает с любым символом, что удобно, потому что ECMAScript не имеетs
модификатора и[\s\S]
является трудной для ввода чтения.11. Питон - 29
► Тест на RegexPlanet
Почти все неверные ответы имеют разную длину, чем все действительные. Это регулярное выражение использует это.
Следующий ответ должен соответствовать следующим строкам:
И потерпите неудачу на этих строках:
источник
29. PCRE ароматизатор - 28
Проверено на Regex101
Этот ответ все еще работает ...
Следующий ответ должен соответствовать следующим строкам:
И потерпите неудачу на этих строках:
источник
31. Вкус Perl - 29
[?[CP(].[-<)|w]|^P|^[^C|\\]*$
Я не знаю, как это работает, это было произведено моим первым набегом в генетические алгоритмы . Есть программный вывод, в котором упоминается ответ.
Следующий ответ должен соответствовать:
и потерпеть неудачу:
источник
29
? Таким образом, это не скоро закончится ... Хотя главная задача - найти последнее, окончательное регулярное выражение.32. PCRE - 30 байт
Проверено на Regex101
Следующий ответ должен соответствовать следующим строкам :
И потерпите неудачу на этих строках :
источник
1. Емкость ECMAScript - 2 байта
Проверьте это на Regex101.
Начальный совпадающий набор
PPCG
и неудачный набор[PPCG]
. Таким образом, это регулярное выражение просто проверяет , что строка начинается сP
.Следующий ответ должен соответствовать следующим строкам:
И потерпите неудачу на этих строках:
источник
3. Емкость ECMAScript - 6 байт
Проверьте это здесь
Следующий ответ должен соответствовать следующим строкам:
И потерпите неудачу на этих строках:
источник
7. Питон вкус - 16
Проверено на Regex101
Нужно добавить \ в список матчей :)
Следующий ответ должен соответствовать следующим строкам:
И потерпите неудачу на этих строках:
источник
12. Вкус ECMAScript - 17
Проверьте это здесь .
Следующий ответ должен соответствовать следующим строкам:
И потерпите неудачу на этих строках:
источник
22. PCRE Flavor - 29 байт
Поскольку исходный № 22 не изменяется в течение 1 часа, я предполагаю, что он стал недействительным.
демонстрация
Следующий ответ должен соответствовать следующим строкам:
И потерпите неудачу на этих строках:
источник
26. Питон вкус - 28
Тест на Regex101
Следующий ответ должен соответствовать следующим строкам:
И потерпите неудачу на этих строках:
источник
30. Питон вкус - 28
Проверено на Regex101
Когда есть желание ...
Следующий ответ должен соответствовать следующим строкам:
И потерпите неудачу на этих строках:
источник
37. Вкус Perl - 30
Представление на Regex101 .
Решение было получено по той же программе, что и раньше. Программа также напечатала 29-символьное решение
\?[^$w]*\$|[]^C]\w)$|w.]|\w.\
, я не знаю почему, так как это выглядит как искаженное регулярное выражение ...Следующий ответ должен соответствовать следующим строкам:
И потерпите неудачу на этих строках:
источник
40. PCRE - 33 байта
Проверено на Regex101
Следующий ответ должен соответствовать следующим строкам :
И потерпите неудачу на этих строках :
источник
4. Емкость ECMAScript - 5 байт
Проверьте это здесь .
Следующий ответ должен соответствовать следующим строкам:
И потерпите неудачу на этих строках:
источник
5. Емкость ECMAScript - 6 байт
Проверено на Regex101 .
Время немного оживить обстановку успеха.
Следующий ответ должен соответствовать следующим строкам:
И потерпите неудачу на этих строках:
источник
6. Емкость ECMAScript - 9 байт
Проверено на Regex101 .
Следующий ответ должен соответствовать следующим строкам:
И потерпите неудачу на этих строках:
источник
14. PCRE ароматизатор - 25
Проверено на Regex101
Это становится довольно сложно.
Следующий ответ должен соответствовать следующим строкам:
И потерпите неудачу на этих строках:
источник
15. PCRE ароматизатор - 26
Проверено на Regex101
Следующий ответ должен соответствовать следующим строкам:
И потерпите неудачу на этих строках:
источник
16. PCRE ароматизатор - 21
Проверено на Regex 101 .
Следующий ответ должен соответствовать следующим строкам:
И потерпите неудачу на этих строках:
источник
PPCG
.25. PCRE ароматизатор - 29
Проверено здесь. (Тестовое регулярное выражение содержит дополнительное,
\n
чтобы убедиться, что ни одно совпадение не занимает несколько строк. Это не обязательно для сопоставления каждой отдельной строки.)Это был низко висящий фрукт! :) Я должен поздравить plannapus, хотя это регулярное выражение удивительно элегантно для текущих тестовых наборов. Если вы хотите отозвать этот ответ, убедитесь, что вы также проголосовали за предыдущий!
Следующий ответ должен соответствовать следующим строкам:
И потерпите неудачу на этих строках:
источник
35. PCRE - 35 байт
Проверено на Regex101
Следующий ответ должен соответствовать следующим строкам :
И потерпите неудачу на этих строках :
источник
36. Вкус Python - 32
Проверено на Regex101
У меня было три готовых 32-байтовых регулярных выражения, и, к счастью, один из них все еще работает: D
Следующий ответ должен соответствовать следующим строкам:
И потерпите неудачу на этих строках:
источник