Dans le livre d'informatique populaire (et essentiel), Une introduction aux langages formels et aux automates de Peter Linz, le langage formel suivant est fréquemment mentionné:
principalement parce que ce langage ne peut pas être traité avec des automates à états finis. Cette expression signifie "La langue L consiste en toutes les chaînes de 'a suivies de' b's, dans lesquelles le nombre de 'a et de b est égal et non nul".
Défi
Ecrivez un programme / fonction de travail qui obtient une chaîne contenant uniquement "a" s et "b" s , puis renvoie / renvoie une valeur de vérité , en indiquant si cette chaîne est valide le langage formel L.
Votre programme ne peut utiliser aucun outil de calcul externe, y compris réseau, programmes externes, etc. Les shells sont une exception à cette règle; Bash, par exemple, peut utiliser des utilitaires de ligne de commande.
Votre programme doit renvoyer / afficher le résultat de manière "logique", par exemple: renvoyer 10 au lieu de 0, "bip", émettre vers stdout, etc. Pour plus d'informations, cliquez ici.
Les règles de golf standard sont appliquées.
Ceci est un code-golf . Le code le plus court en octets gagne. Bonne chance!
Cas de test de vérité
"ab"
"aabb"
"aaabbb"
"aaaabbbb"
"aaaaabbbbb"
"aaaaaabbbbbb"
Cas de tests de fausseté
""
"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
et non-empty string == falsy
serait acceptable?
a^n b^n
ou similaire, plutôt que juste le nombre de a
s égal au nombre de b
s)