En el popular (y esencial) libro de ciencias de la computación, Introducción a los lenguajes formales y autómatas de Peter Linz, se menciona con frecuencia el siguiente lenguaje formal:
principalmente porque este lenguaje no se puede procesar con autómatas de estado finito. Esta expresión significa "El lenguaje L consiste en todas las cadenas de 'a' seguidas de 'b', en las cuales el número de 'a' y 'b' son iguales y distintos de cero '.
Desafío
Escriba un programa / función de trabajo que obtenga una cadena, que contenga "a" sy "b" solo , como entrada y devuelva / salga un valor de verdad , indicando si esta cadena es válida el lenguaje formal L.
Su programa no puede usar ninguna herramienta de computación externa, incluida la red, programas externos, etc. Los shells son una excepción a esta regla; Bash, por ejemplo, puede usar utilidades de línea de comandos.
Su programa debe devolver / emitir el resultado de una manera "lógica", por ejemplo: devolver 10 en lugar de 0, "pitido", emitir a stdout, etc. Más información aquí.
Se aplican reglas estándar de golf de código.
Este es un código de golf . El código más corto en bytes gana. ¡Buena suerte!
Casos de prueba de verdad
"ab"
"aabb"
"aaabbb"
"aaaabbbb"
"aaaaabbbbb"
"aaaaaabbbbbb"
Casos de prueba de falsa
""
"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
y non-empty string == falsy
sería aceptable?
a^n b^n
o similar, en lugar de solo el número de a
s igual al número de b
s)