Eine "Triplett-Klammer" (die ich für diese Herausforderung erfunden habe) ist eine der folgenden:
(...+...)
[...:...]
{...|...}
<...-...>
Eine symmetrische Triplett-Klammer-Zeichenfolge (kurz BTBS) ist entweder eine leere Zeichenfolge, zwei verkettete BTBS oder eine der obigen Triplett-Klammern, wobei jede ...
durch eine BTBS ersetzt wird.
Ihre Aufgabe ist es, ein Programm oder eine Funktion zu schreiben, die überprüft, ob eine Zeichenfolge, die nur aus (+)[:]{|}<->
besteht, ausgeglichen ist. Kürzester Code gewinnt.
Beispiele
Ihr Programm sollte für die folgenden Zeichenfolgen die Wahrheit zurückgeben:
(+)(+)(+)
[[[:]:]:(+(+))]{<->|<(+)->[:]}(+)
<<<<<<<<<<<<->->->->->->->->->->->->
{|(+[:<-{|(+[:<->])}>])}
[[[:]:[:]]:[[:]:[:]]]
{[:](+)|<->{|}}[(+)<->:{|}(+)]
Ihr Programm sollte für die folgenden Zeichenfolgen einen Fehler zurückgeben:
:[
<|>
(+(+)
[:][:](+[[:]):]
{|{|{|(+{|{|{|}}}}}+)}[:]{|}
{{||}}
<<->-<->-<->>
[(+):((+)+)+(+(+))]
<<<<<->->->->->->
code-golf
string
balanced-string
jimmy23013
quelle
quelle
(|)
gültig. Ich glaube nicht, aber ich bin nicht sicher<|>
in den falschen Beispielen.Antworten:
Japt, 25 Bytes
Testen Sie es online!
e
on strings ist eine rekursive Ersetzungsfunktion. Der zweite Parameter ist standardmäßig die leere Zeichenfolge. Dies bedeutet, dass Übereinstimmungen mit dem"%(%+%)|%[:]|\{%|}|<->"
regulären Ausdruck Japt rekursiv entfernt werden/\(\+\)|\[:]|{\|}|<->/
. Dies gibt eine leere Zeichenfolge für ausgeglichene Triplett-Zeichenfolgen und eine nicht leere Zeichenfolge für nicht ausgeglichene zurück, sodass der richtige Rückgabewert das logische NICHT davon ist.quelle
JavaScript (ES6),
77585756 BytesTestfälle
Code-Snippet anzeigen
quelle
perl -lpe 's/<->|\(\+\)|{\|}|\[:]//&&redo;$_=!$_'
.0
ein BTBS berücksichtigen. Verwenden Sie stattdessen diese 38:perl -pe 's/<->|\(\+\)|{\|}|\[:]//&&redo;$_=/^$/'
f=s=>s==(s=s.replace(...))?!s:f(s)
?sed,
2827 bytessed hat kein Konzept von Wahrhaftigkeit / Falschheit, daher betrachte ich eine leere Zeichenfolge als wahr und eine nicht leere Zeichenfolge als falsch. Dies prüft, ob wir die Bedingung berücksichtigen
/^$/
.Vielen Dank an @Neil für das Golfen ab 1 Byte!
Probieren Sie es online!
quelle
\]
oder reicht das]
aus?Python, 77 Bytes
Verwendet Arnauld's Ersatzidee . Erzeugt und wertet einen langen String wie
um zwischen dem Ersetzen aller Klammertypen zu wechseln. Überprüft dann, ob das Ergebnis die leere Zeichenfolge ist.
quelle
Mathematica, 55 Bytes
Anonyme Funktion. Nimmt einen String als Eingabe und gibt ihn zurück
True
oderFalse
als Ausgabe. Verwendet dazu die Standardmethode.quelle
Schmutz , 39 Bytes
Probieren Sie es online! Leider verfügt die TIO-Version in den meisten Testfällen nicht über genügend Arbeitsspeicher.
Erläuterung
Nichts Besonderes hier.
_
Abkürzung für das gesamte Muster ist, undv*
ist das gleiche wie*
, aber mit einer geringeren Priorität.quelle
J, 48 Bytes
Ähnlich wie die anderen basiert auch dies auf der Methode von Arnauld .
Verwendung
Erläuterung
quelle
Scala, 96 Bytes
Dies ist im Grunde die gleiche Idee wie die anderen Antworten, aber mit etwas Scala-Boilerplate.
ohne Ideen von anderen zu stehlen (188 Bytes):
quelle
Pip , 26 Bytes
Probieren Sie es online!
Schleifen Sie len (a) times und ersetzen Sie alle Vorkommen von leeren Triplett-Klammern (
"(+)[:]{|}<->"<>3
wobei<>
der Operator "group" ist, =>["(+)"; "[:]"; "{|}"; "<->"]
) durch leere Zeichenfolge (x
). Diese vielen Iterationen sind übertrieben, aber es wird immer mehr als genug sein, um alle richtig geformten Triplett-Klammern vollständig auf Null zu reduzieren. Nach Beendigung der Schleife wird Folgendes ausgegeben!a
:0
ifa
ist wahr (hat noch einige Zeichen),1
ifa
ist falsch (leer).quelle