Еще одна проблема разбора Brainfuck, но на этот раз ... другая.
Вы работаете в Infinite Monkeys Incorporated, компании, производящей программы Brainfuck, для решения различных интересных задач (случайно, не менее - в конце концов, компания делает случайные программы). Тем не менее, кажется, что ваши быстрые машины Тьюринга, которые выполняют только Brainfuck, имеют небольшую и дорогую проблему с синтаксическими ошибками - одна проблема, и компьютер взрывается. Вероятно, это недостаток дизайна, но никто не удосужился выяснить, почему это происходит.
Поскольку машины Тьюринга (особенно быстрые) дороги (в конце концов, они имеют бесконечное ОЗУ, которое стоит), было бы лучше убедиться, что в программе нет синтаксических ошибок перед выполнением кода. Ваша компания собирается запустить много кода, поэтому ручная проверка не будет работать. Напишите программу, которая читает STDIN для кода Brainfuck и завершает работу со значением состояния выхода, отличным от 0 (ошибка), если в программе есть какая-либо синтаксическая ошибка (например,
]
это синтаксическая ошибка, потому что нет соответствия[
). Выход с состоянием выхода, установленным на 0, если программа полностью в порядке.Убедитесь, что ваша программа правильно замечает ошибки, связанные с
[]
. Вы бы не хотели, чтобы взорвался другой компьютер? Да, и убедитесь, что оно максимально короткое - ваш начальник платит за короткие программы (потому что он считает, что они быстрые или что-то в этом роде). О, и вам не нужно кодировать в Brainfuck (на самом деле, вы не можете, потому что Brainfuck не поддерживает коды выхода) - ваш код будет запускаться на обычном компьютере.
Итак, как вы видите, ваша задача - проверить, является ли программа Brainfuck «действительной» (с парными []
символами). Обратите внимание, что в программах Brainfuck могут быть другие символы []
, поэтому не отказывайтесь от программы только потому, что в ней есть другие команды. Наименьший код выигрывает, но, вероятно, вам все равно будет важнее голосование против.
GCD(a,b)
вместо 0 != a || b
.