В чате с несколькими людьми между мной и ними возникла тема о том, сколько возможных строк может соответствовать регулярное выражение.
Ваша задача - создать программу, которая сможет ответить на этот вопрос.
Ваша программа примет в качестве входных данных любое регулярное выражение, определенное в этом документе, как «расширенное регулярное выражение», например:
^[A-Za-z0-9]{8}$
и вывести общее количество возможных строк, соответствующих этому выражению, и вывести их, infinity
если их бесконечно много:
218340105584896
Ваша программа может также выводить, too many
если существует более 2 63 -1 возможных строк, соответствующих регулярному выражению; однако, он не должен выводить, infinity
если на самом деле не существует бесконечно много строк.
Самая короткая программа для вышеперечисленных побед.
^[A-Za-z0-9]{8}$
? В противном случае ответ будетinfinity
.Ответы:
Python 3370
Я сделал это настолько функциональным, насколько мог, и даже получил чередование работы (с правильной проверкой двойного счета!). Насколько я знаю, это работает для всего, кроме внешнего вида (потому что это было бы сумасшествием).
Для тех, кто пишет свое собственное решение, не стесняйтесь использовать / улучшать мои методы так, как вам нравится.
Код:
Ungolfed:
Вот несколько соответствующих тестовых случаев, которые я подтвердил:
* Это на самом деле отличается в гольфе и не в гольф из-за разницы в один символ в том, что определяется как действительный ASCII. Я считаю, что гольф является более правильным.
Чтобы подтвердить его точность, можно провести дополнительные тесты, пожалуйста, сообщите мне о любых ошибках (я, честно говоря, не удивлюсь, если их будет довольно много).
источник
<!-- language: lang-code -->
(для одного фрагмента кода) или<!-- language-all: lang-code -->
(для всех кодов в одном посте), гдеlang-code
это код языка вашего языка. Убедитесь, что формат точно такой же (с пробелами и т. Д.). Список кодов языков можно найти здесь . (Вы должны немного прокрутить вниз.) Я не уверен, сработает ли использование тегов, поэтому просто придерживайтесь языковых кодов. :)