In dem populären (und essentiellen) Informatikbuch Eine Einführung in formale Sprachen und Automaten von Peter Linz wird häufig die folgende formale Sprache angegeben:
hauptsächlich, weil diese Sprache nicht mit endlichen Automaten verarbeitet werden kann. Dieser Ausdruck bedeutet "Sprache L besteht aus allen Folgen von 'a', gefolgt von 'b', in denen die Anzahl von 'a' und 'b' gleich und ungleich Null ist".
Herausforderung
Schreiben Sie ein Arbeitsprogramm / eine Funktion, die eine Zeichenkette erhält, die nur "a" s und "b" s enthält , als Eingabe und gibt einen Wahrheitswert zurück / gibt einen Wahrheitswert aus und sagt, ob diese Zeichenkette gültig ist, die formale Sprache L.
Ihr Programm kann keine externen Berechnungstools verwenden, einschließlich Netzwerk, externe Programme usw. Shells bilden eine Ausnahme von dieser Regel. Bash kann z. B. Befehlszeilendienstprogramme verwenden.
Ihr Programm muss das Ergebnis auf "logische" Weise zurückgeben / ausgeben, z. B. 10 anstelle von 0, Signalton, Ausgabe auf Standardausgabe usw. Weitere Informationen hier.
Es gelten die Standard-Code-Golfregeln.
Dies ist ein Code-Golf . Kürzester Code in Bytes gewinnt. Viel Glück!
Wahrheitstestfälle
"ab"
"aabb"
"aaabbb"
"aaaabbbb"
"aaaaabbbbb"
"aaaaaabbbbbb"
Falsche Testfälle
""
"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
und non-empty string == falsy
wäre akzeptabel?
a^n b^n
oder ähnlich, anstatt nur die Anzahl der a
s gleich der Anzahl der b
s)