Примітка: Наслідуючи попит населення, я трохи послабив правила:
- Максимальний розмір регулярного вираження зростає на 1 байт кожні 5 відповідей . Відповідь N може використовувати до 29 + ⌈N / 5⌉ байт.
- Оцінка кожної відповіді буде (M / (30 + N / 5)) N
У регекс-гольфі вам надають два набори рядків, і вам пропонується створити найкоротший регулярний вираз, який відповідає всім рядкам у першому наборі, але не відповідає всім рядкам у другому наборі.
Це ми будемо робити, але щоразу, коли хтось відповість, сам їх регулярний вираз буде доданий до одного з двох наборів рядків (за власним вибором). Тому існує чіткий порядок відповідей у цьому виклику.
Переглянемо приклад:
- Скажіть, я починаю це з
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
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, тому ви можете покращити загальний бал, надавши нову відповідь. Однак чим коротше кожне ваше подання, тим ефективніше ви можете знизити свою оцінку. Крім того, пізніші відповіді дозволяють досягти нижчого балу, хоча і довше, через зростання показника.
Панель приладів
Я написав невеликий інструмент панелі інструментів, використовуючи фрагменти стека, засновані на роботі оптимізатора тут . Я сподіваюся, що це допоможе нам налагодити певний порядок у вирішенні проблем, що залежать від відповіді.
Це відобразить поточний стан виклику - зокрема, якщо є суперечливі відповіді, якщо відповідь потрібно перевірити, або якщо наступну відповідь можна опублікувати.
Він також створює список усіх відповідей з оцінками, а також таблицю лідерів усіх користувачів. Будь ласка, дотримуйтесь формату виклику вище, щоб на інформаційній панелі можна було прочитати відповідні рядки з ваших відповідей. Інакше ви не можете бути включені до таблиці лідерів.
Будь ласка, дайте мені знати (в ідеалі в чаті ), якщо ви помітили будь-які помилки або маєте якісь ідеї, як можна покращити корисність інструменту.