Noch ein Brainfuck-Parsing-Problem, aber diesmal ... anders.
Sie arbeiten in der Firma Infinite Monkeys Incorporated, die Brainfuck-Programme herstellt, um verschiedene interessante Probleme zu lösen (nicht weniger aus Versehen - schließlich erstellt die Firma zufällige Programme). Es scheint jedoch, dass Ihre schnellen Turing-Maschinen, die nur Brainfuck ausführen, ein kleines und teures Problem mit Syntaxfehlern haben - machen Sie eins, und der Computer explodiert. Es ist wahrscheinlich ein Designfehler, aber niemand hatte sich die Mühe gemacht, herauszufinden, warum es passiert.
Da Turing-Maschinen (besonders schnelle) teuer sind (schließlich haben sie unendlich viel RAM, was Kosten verursacht), ist es besser, sicherzustellen, dass das Programm keine Syntaxfehler aufweist, bevor Sie den Code ausführen. In Ihrem Unternehmen wird viel Code ausgeführt, sodass die manuelle Überprüfung nicht funktioniert. Schreiben Sie ein Programm, das den STDIN for Brainfuck-Code liest und mit einem anderen Exit-Status als 0 (Fehler) beendet, wenn das Programm einen Syntaxfehler aufweist (z. B.
]
ein Syntaxfehler, da keine Übereinstimmung vorliegt[
). Beenden Sie mit dem auf 0 gesetzten Beendigungsstatus, wenn das Programm vollständig in Ordnung ist.Vergewissern Sie sich, dass Ihr Programm die Fehler korrekt erkennt
[]
. Sie möchten doch nicht, dass ein anderer Computer explodiert, oder? Oh, und stellen Sie sicher, dass es so kurz wie möglich ist - Ihr Chef bezahlt für kurze Programme (weil er denkt, dass sie schnell sind oder so). Oh, und Sie müssen keinen Code in Brainfuck eingeben (das können Sie auch nicht, da Brainfuck keine Exit-Codes unterstützt) - Ihr Code wird auf einem normalen Computer ausgeführt.
Wie Sie sehen, müssen Sie überprüfen, ob das Brainfuck-Programm "gültig" ist (mit []
Symbolen gepaart ). Beachten Sie, dass Brainfuck-Programme andere Zeichen als []
enthalten können. Verweigern Sie das Programm daher nicht, nur weil es andere Befehle enthält. Kleinster Code gewinnt, aber wahrscheinlich interessieren Sie sich sowieso mehr für Upvotes.
GCD(a,b)
statt verwenden 0 != a || b
.