No popular (e essencial) livro de ciência da computação, Uma Introdução às Línguas Formais e Autômatos, de Peter Linz, a seguinte linguagem formal é freqüentemente declarada:
principalmente porque esse idioma não pode ser processado com autômatos de estado finito. Essa expressão significa "A linguagem L consiste em todas as cadeias de 'a's seguidas de' b's, nas quais o número de 'a's e' b's é igual e diferente de zero".
Desafio
Escreva um programa / função de trabalho que obtenha uma string, contendo apenas "a" se "b" s , como entrada e retorna / gera um valor verdade , dizendo se essa string é válida na linguagem formal L.
Seu programa não pode usar nenhuma ferramenta de computação externa, incluindo rede, programas externos, etc. Os shells são uma exceção a esta regra; O Bash, por exemplo, pode usar utilitários de linha de comando.
Seu programa deve retornar / produzir o resultado de uma maneira "lógica", por exemplo: retornando 10 em vez de 0, som de "bipe", saída para stdout etc. Mais informações aqui.
Aplicam-se regras de código padrão de golfe.
Este é um código de golfe . O menor código em bytes vence. Boa sorte!
Casos de teste de verdade
"ab"
"aabb"
"aaabbb"
"aaaabbbb"
"aaaaabbbbb"
"aaaaaabbbbbb"
Casos de teste de falsidade
""
"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
e non-empty string == falsy
seria aceitável?
a^n b^n
ou similar, ao invés de apenas o número de a
s igualando o número de b
s)