Prelude ist eine esoterische Programmiersprache, die nur sehr wenige, aber ungewöhnliche Einschränkungen für ein gültiges Programm aufweist. Jeder Block druckbaren ASCII-Textes ("Block" bedeutet, dass Zeilen druckbaren ASCII durch Zeilenumbrüche getrennt sind - 0x0A) ist gültig, sofern:
- Jede (vertikale) Textspalte enthält höchstens eine von
(
und)
. - Wenn man ihre vertikale Position ignoriert, sind die
(
und)
ausgeglichen, das heißt, jede(
ist mit genau einer)
rechts davon gepaart und umgekehrt.
Schreiben Sie ein Programm oder eine Funktion, die anhand einer Zeichenfolge mit druckbarem ASCII und Zeilenumbrüchen bestimmt, ob es sich um ein gültiges Prelude-Programm handelt. Sie können Eingaben über STDIN (oder die nächstgelegene Alternative), ein Befehlszeilenargument oder ein Funktionsargument vornehmen. Das Ergebnis kann unter Verwendung von zwei festen Wahrheits- / Falschwerten Ihrer Wahl an STDOUT zurückgegeben oder gedruckt werden .
Sie dürfen nicht davon ausgehen, dass die Eingabe rechteckig ist.
Dies ist Code Golf, daher gewinnt die kürzeste Übermittlung (in Bytes).
Beispiele
Die folgenden sind gültige Prelude-Programme (tatsächlich sind sie sogar echte Prelude-Programme):
?1-(v #1)-
1 0v ^(# 0)(1+0)#)!
(#) ^#1-(0 #
1(# 1) v # - 1+)
vv (##^v^+
? v-(0 # ^ #)
?
1+ 1-!
Und hier sind einige Eingaben, die alle ungültig sind :
#(#(##)##)##(
)##(##(##)#)#
#(#)
)###
#(##
(##)
(##)
(#)#
(##)
(###
#(#)
(##)
#(#)
###)
#()#
()##
#(#)##
###
###(#)
)
und 2 (
. Sollte es nicht nur 1 pro Zeile sein?