W popularnej (i niezbędnej) książce o informatyce An Introduction to Formal Languages and Automata autorstwa Petera Linza często pojawia się następujący język formalny:
głównie dlatego, że ten język nie może być przetwarzany za pomocą automatów skończonych. Wyrażenie to oznacza „Język L składa się ze wszystkich ciągów„ a ”, po których następuje„ b ”, w których liczba„ a ”i„ b ”jest równa i niezerowa”.
Wyzwanie
Napisz działający program / funkcję, która pobiera ciąg znaków, zawierający tylko „a” i „b” , jako dane wejściowe i zwraca / wyprowadza wartość prawdy , mówiąc, że jeśli ten ciąg jest poprawny w języku formalnym L.
Twój program nie może używać żadnych zewnętrznych narzędzi obliczeniowych, w tym sieci, programów zewnętrznych itp. Powłoki są wyjątkiem od tej reguły; Bash np. Może korzystać z narzędzi wiersza poleceń.
Twój program musi zwrócić / wyprowadzić wynik w „logiczny” sposób, na przykład: zwrócić 10 zamiast 0, dźwięk „beep”, wyprowadzić na standardowe wyjście itp. Więcej informacji tutaj.
Obowiązują standardowe zasady gry w golfa.
To jest golf golfowy . Najkrótszy kod w bajtach wygrywa. Powodzenia!
Prawdziwe przypadki testowe
"ab"
"aabb"
"aaabbb"
"aaaabbbb"
"aaaaabbbbb"
"aaaaaabbbbbb"
Przypadki testowe Falsy
""
"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
i non-empty string == falsy
do zaakceptowania?
a^n b^n
lub podobna, a nie tylko liczba a
s równa liczbie b
s)