Prelude est un langage de programmation ésotérique, qui a très peu de restrictions, mais inhabituelles, sur ce qui constitue un programme valide. Tout bloc de texte ASCII imprimable ("bloc" signifiant que les lignes ASCII imprimables sont séparées par des sauts de ligne - 0x0A) est valide à condition que:
- Chaque colonne (verticale) de texte contient au plus un
(
et)
. - En ignorant leur position verticale, les
(
et)
sont équilibrés, c'est-à-dire que chacun(
est jumelé avec exactement un)
à sa droite, et vice versa.
Écrivez un programme ou une fonction qui, étant donné une chaîne contenant de l'ASCII imprimable et des sauts de ligne, détermine si elle constitue un programme Prelude valide. Vous pouvez saisir des données via STDIN (ou l'alternative la plus proche), l'argument de ligne de commande ou l'argument de fonction. Le résultat peut être retourné ou imprimé à STDOUT, en utilisant deux valeurs fixes de vérité / fausse de votre choix.
Vous ne devez pas supposer que l'entrée est rectangulaire.
Il s'agit du code golf, donc la soumission la plus courte (en octets) l'emporte.
Exemples
Les programmes Prelude suivants sont valides (en fait, ce sont même de vrais programmes Prelude):
?1-(v #1)-
1 0v ^(# 0)(1+0)#)!
(#) ^#1-(0 #
1(# 1) v # - 1+)
vv (##^v^+
? v-(0 # ^ #)
?
1+ 1-!
Et voici un certain nombre d'entrées, qui sont toutes invalides :
#(#(##)##)##(
)##(##(##)#)#
#(#)
)###
#(##
(##)
(##)
(#)#
(##)
(###
#(#)
(##)
#(#)
###)
#()#
()##
#(#)##
###
###(#)
)
et 2 (
. Cela ne devrait-il pas être seulement 1 par ligne?