Вступ
Я не бачу тут багатьох проблем з регулярними виразками, тому я хотів би запропонувати цей оманливо простий, який можна зробити різними способами, використовуючи ряд ароматів регулярних виразів. Я сподіваюся, що це забезпечує любителів регулярного генексу весело провести час у гольф.
Виклик
Завдання полягає в тому, щоб відповідати тому, що я дуже вільно назвав "егалітарною" серією: серією рівної кількості різних персонажів. Це найкраще описано на прикладах.
Матч:
aaabbbccc
xyz
iillppddff
ggggggoooooollllllffffff
abc
banana
Не відповідають:
aabc
xxxyyzzz
iilllpppddff
ggggggoooooollllllfff
aaaaaabbbccc
aaabbbc
abbaa
aabbbc
Узагальнювати, ми хочемо , щоб відповідати темі форми ( для будь-якого списку символів в , де для всіхc1)n(c2)n(c3)n...(ck)n
c1
ck
ci != ci+1
i, k > 1, and n > 0.
Роз'яснення:
Введення не буде порожнім.
Символ може повторитися пізніше в рядку (наприклад, "банан")
k > 1
, тож у рядку завжди буде щонайменше 2 різних символи.Ви можете припустити, що лише символи ASCII будуть передані як вхідні дані, а жоден символ не буде лінійним термінатором.
Правила
(Дякую Мартіну Ендеру за цей чудово викладений блок правил)
Ваша відповідь повинна складатися з одного регулярного вираження без будь-якого додаткового коду (крім, необов'язково, списку модифікаторів регулярних виразів, необхідних для роботи вашого рішення). Ви не повинні використовувати функції смаку регулярних виразів вашої мови, які дозволяють викликати код на мові хостингу (наприклад, e
модифікатор Perl ).
Ви можете використовувати будь-який аромат регексу, який існував до цього виклику, але, будь ласка, вкажіть аромат.
Не вважайте, що регулярний вирівнювання закріплено неявно, наприклад, якщо ви використовуєте Python, припустіть, що ваш регулярний вираз використовується з re.search, а не з re.match. Ваш регулярний вираз повинен відповідати всій рядку для дійсних егалітарних рядків і не відповідати недійсним рядкам. Ви можете використовувати стільки груп захоплення, скільки бажаєте.
Ви можете припустити, що вхід завжди буде рядком з двох або більше символів ASCII, що не містять жодних рядкових термінаторів.
Це гольф-реджекс, тому виграє найкоротший регулярний вираз у байтах. Якщо ваша мова вимагає роздільників (як правило /.../
) для позначення регулярних виразів, не рахуйте самих роздільників. Якщо для вашого рішення потрібні модифікатори, додайте один байт на модифікатор.
Критерії
Це хороший гольф, так що забудьте про ефективність і просто намагайтеся зробити свій регекс якомога меншим.
Будь ласка, зазначте, який аромат регексу ви використовували, і, якщо можливо, включіть посилання, що показує онлайн-демонстрацію вашого вираження в дії.
banana
є егалітарним.