В популярной (и обязательной) книге по информатике Питера Линца « Введение в формальные языки и автоматы » часто упоминается следующий формальный язык:
главным образом потому, что этот язык не может быть обработан с помощью конечных автоматов. Это выражение означает «Язык L состоит из всех строк« a », за которыми следуют« b », в которых число« a »и« b »равно и не равно нулю».
Вызов
Напишите работающую программу / функцию, которая получает строку, содержащую только «a» и «b» , в качестве входных данных и возвращает / выводит значение истинности , говоря, является ли эта строка допустимой для формального языка L.
Ваша программа не может использовать какие-либо внешние вычислительные инструменты, включая сеть, внешние программы и т. Д. Оболочки являются исключением из этого правила; Bash, например, может использовать утилиты командной строки.
Ваша программа должна возвращать / выводить результат «логическим» способом, например: возвращать 10 вместо 0, «звуковой сигнал», выводить на стандартный вывод и т. Д. Подробнее здесь.
Применяются стандартные правила игры в гольф.
Это код-гольф . Самый короткий код в байтах побеждает. Удачи!
Правдивые тесты
"ab"
"aabb"
"aaabbb"
"aaaabbbb"
"aaaaabbbbb"
"aaaaaabbbbbb"
Ложные тесты
""
"a"
"b"
"aa"
"ba"
"bb"
"aaa"
"aab"
"aba"
"abb"
"baa"
"bab"
"bba"
"bbb"
"aaaa"
"aaab"
"aaba"
"abaa"
"abab"
"abba"
"abbb"
"baaa"
"baab"
"baba"
"babb"
"bbaa"
"bbab"
"bbba"
"bbbb"
empty string == truthy
и non-empty string == falsy
приемлемо?
a^n b^n
или подобное, а не просто число a
s, равное количеству b
s)