Preludium to ezoteryczny język programowania, który ma bardzo niewiele, ale nietypowe, ograniczeń dotyczących tego, co stanowi prawidłowy program. Każdy blok drukowalnego tekstu ASCII („blok” oznacza, że wiersze drukowalnego ASCII są oddzielone znakami nowej linii - 0x0A) jest prawidłowy, pod warunkiem że:
- Każda (pionowa) kolumna tekstu zawiera co najwyżej jedną z
(
i)
. - Ignorując ich położenie pionowe,
(
i)
są zrównoważone, to znaczy, że każdy(
jest sparowany z dokładnie jednym)
po prawej stronie i odwrotnie.
Napisz program lub funkcję, która, biorąc pod uwagę ciąg znaków zawierający drukowalne ASCII i znaki nowej linii, określa, czy stanowi on prawidłowy program Prelude. Możesz przyjmować dane wejściowe za pośrednictwem STDIN (lub najbliższej alternatywy), argumentu wiersza poleceń lub argumentu funkcji. Wynik może zostać zwrócony lub wydrukowany do STDOUT przy użyciu dowolnych dwóch ustalonych wartości true / falsy .
Nie można zakładać, że wejście jest prostokątne.
To jest kod golfowy, więc wygrywa najkrótsze przesłanie (w bajtach).
Przykłady
Oto prawidłowe programy Preludium (w rzeczywistości są to nawet prawdziwe programy Preludium):
?1-(v #1)-
1 0v ^(# 0)(1+0)#)!
(#) ^#1-(0 #
1(# 1) v # - 1+)
vv (##^v^+
? v-(0 # ^ #)
?
1+ 1-!
A oto kilka danych wejściowych, z których wszystkie są nieprawidłowe :
#(#(##)##)##(
)##(##(##)#)#
#(#)
)###
#(##
(##)
(##)
(#)#
(##)
(###
#(#)
(##)
#(#)
###)
#()#
()##
#(#)##
###
###(#)
)
i 2 (
. Czy nie powinien to być tylko 1 na linię?