Напишите регулярное выражение, которое соответствует заданной строке, состоящей из трех неотрицательных целых чисел, разделенных пробелом, тогда и только тогда, когда последнее целое число является суммой двух предыдущих. Ответы могут быть для целых чисел любой системы счисления с основанием от 2 до 10.
Контрольные примеры
Они должны потерпеть неудачу:
0 1 2
10 20 1000
Они должны соответствовать:
10 20 30
28657 46368 75025
0 0 0
правила
Ваш ответ должен состоять из одного регулярного выражения, без какого-либо дополнительного кода (за исключением, необязательно, списка модификаторов регулярного выражения, необходимых для работы вашего решения). Вы не должны использовать функции своего языка regex, которые позволяют вам вызывать код на языке хостинга (например, модификатор Perl's e).
Пожалуйста, укажите свой вкус в своем ответе.
Это рег-гольф, поэтому выигрывает самое короткое в байтах. Если вашему языку требуются разделители (обычно /.../) для обозначения регулярных выражений, не считайте сами разделители. Если вашему решению требуются модификаторы, добавьте один байт на каждый модификатор.
Кредиты Мартину Эндеру и Джейтее за правила игры в рег -гольф.
У меня есть основания полагать, что это возможно на основе решения Мартина Эндера для нахождения и приращения целых чисел с помощью регулярного выражения .
/e
Модификатор Perl 5 применяется только к заменам и не является единственным способом запуска внешнего кода. Также это полностью дисквалифицирует Perl 6, поскольку регулярное выражение является просто методом с дополнительным синтаксисом. (Причина в том, что это облегчает чтение и запись регулярных выражений) В результате все функции, необходимые в архаичных регулярных выражениях, не нужны (или не включены), как вы только что добавили в код Perl 6. (имеется в виду, что, вероятно, невозможно выполнить эту задачу, если вы просто ограничитесь регулярным выражением определенного кода) /^(\d+)**3%' '$ <?{$0[2]==[+] $0[0,1]}>/
или /^(\d+)' '(\d+)' '(\d+)$ <?{$2==$0+$1}>/
или/^(\d+)' '(\d+){}" {$0+$1}"$/