Ще одна проблема розбору Brainfuck, але цього разу ... інша.
Ви працюєте в Infinite Monkeys Incorporated, компанії, що виробляє програми Brainfuck, для вирішення різних цікавих проблем (випадково, не менше - адже компанія робить випадкові програми). Однак виявляється, що у ваших швидких машин Тьюрінга, які виконують лише Brainfuck, є невелика і дорога проблема з синтаксичними помилками - зробіть одну, і комп'ютер вибухне. Це, мабуть, вада дизайну, але ніхто не потрудився знайти, чому це відбувається.
Оскільки машини Тьюрінга (особливо швидкі) дорогі (адже вони мають нескінченну оперативну пам'ять, яка коштує), було б краще переконатися, що програма не має синтаксичних помилок перед виконанням коду. У вашій компанії буде запущено багато коду, тому ручна перевірка не працюватиме. Напишіть програму, яка зчитує код STDIN для Brainfuck і виходить зі статусом виходу, встановленим на що-небудь, крім 0 (помилка), якщо програма має якусь синтаксичну помилку (наприклад,
]
це синтаксична помилка, оскільки немає відповідності[
). Вийдіть зі статусом виходу 0, якщо програма повністю нормальна.Переконайтеся, що ваша програма правильно помічає помилки, пов’язані з цим
[]
. Ви б не хотіли, щоб інший комп'ютер вибухнув, чи не так? О, і переконайтеся, що це якомога коротше - ваш начальник платить за короткі програми (бо він вважає, що вони швидкі, чи щось). О, і вам не доведеться кодувати в Brainfuck (насправді, ви не можете, оскільки Brainfuck не підтримує вихідні коди) - ваш код буде працювати на звичайному комп'ютері.
Отже, як ви бачите, ваша робота - перевірити, чи є програма Brainfuck "дійсною" (має парні []
символи). Зауважте, що програми Brainfuck можуть мати інші символи []
, тому не відмовляйте програмі лише тому, що в ній є інші команди. Найменший код виграє, але, напевно, ви б більше піклувалися про оновлення коштів.
GCD(a,b)
замість 0 != a || b
.