Прелюдія - це езотерична мова програмування, яка має дуже мало, але незвичних обмежень щодо того, що становить дійсну програму. Будь-який блок тексту для друку ASCII ("блок", що означає, що рядки ASCII для друку розділені новими рядками - 0x0A) є дійсним за умови, що:
- Кожен (вертикальний) стовпець тексту містить щонайбільше один із
(
та)
. - Ігноруючи їх вертикальне положення,
(
і)
вони врівноважені, тобто кожен з(
них поєднується з рівно одним)
праворуч від нього, і навпаки.
Напишіть програму або функцію, яка, даючи рядок, що містить друкований ASCII та нові рядки, визначає, чи є вона дійсною програмою Prelude. Ви можете взяти вхід через STDIN (або найближчу альтернативу), аргумент командного рядка або аргумент функції. Результат може бути повернутий або надрукований до STDOUT, використовуючи будь-які два фіксовані значення truthy / falesy на ваш вибір.
Ви не повинні вважати, що вхід прямокутний.
Це код гольфу, тому виграє найкоротше подання (у байтах).
Приклади
Нижче перелічені дійсні програми Prelude (насправді вони навіть справжні програми Prelude):
?1-(v #1)-
1 0v ^(# 0)(1+0)#)!
(#) ^#1-(0 #
1(# 1) v # - 1+)
vv (##^v^+
? v-(0 # ^ #)
?
1+ 1-!
Ось низка входів, усі вони недійсні :
#(#(##)##)##(
)##(##(##)#)#
#(#)
)###
#(##
(##)
(##)
(#)#
(##)
(###
#(#)
(##)
#(#)
###)
#()#
()##
#(#)##
###
###(#)
)
і 2 (
. Чи не повинно бути лише 1 на рядок?