Prelude - это эзотерический язык программирования, который имеет очень мало, но необычных ограничений на то, что составляет действительную программу. Любой блок печатного текста ASCII («блок» означает, что строки печатного ASCII разделены символами новой строки - 0x0A) действительны при условии, что:
- Каждый (вертикальный) столбец текста содержит не более одного
(
и)
. - Не обращая внимания на их вертикальное положение,
(
и)
сбалансированы, то есть каждый(
в паре с ровно одним)
справа от него, и наоборот.
Напишите программу или функцию, которая, учитывая строку, содержащую печатный ASCII и символы новой строки, определяет, является ли она допустимой программой Prelude. Вы можете получить ввод через STDIN (или ближайшую альтернативу), аргумент командной строки или аргумент функции. Результат может быть возвращен или распечатан в STDOUT, используя любые два фиксированных значения истинности / ложности по вашему выбору.
Вы не должны предполагать, что вход является прямоугольным.
Это код гольф, поэтому выигрывает самое короткое представление (в байтах).
Примеры
Ниже приведены действительные программы Prelude (фактически они даже являются настоящими программами Prelude):
?1-(v #1)-
1 0v ^(# 0)(1+0)#)!
(#) ^#1-(0 #
1(# 1) v # - 1+)
vv (##^v^+
? v-(0 # ^ #)
?
1+ 1-!
И вот несколько входов, все из которых являются недействительными :
#(#(##)##)##(
)##(##(##)#)#
#(#)
)###
#(##
(##)
(##)
(#)#
(##)
(###
#(#)
(##)
#(#)
###)
#()#
()##
#(#)##
###
###(#)
)
и 2 (
. Разве это не должно быть только 1 на строку?