Basierend auf DIESER Frage.
Ersetzen Sie ()[]{}<>
bei einer gegebenen Zeichenfolge jede Klammer durch eine Klammer des entsprechenden Typs, sodass die Klammern übereinstimmen und die verschachtelten Klammern wie folgt wechseln:
- Die äußersten sind
()
- Direkt drinnen
()
sollte sein[]
- Direkt drinnen
[]
sollte sein{}
- Direkt drinnen
{}
sollte sein<>
- Direkt innerhalb von
<>
wird()
wieder sein (Zyklen)
Alle Zeichen ohne Klammer müssen genau so bleiben, wie sie sind. Offene Klammern dürfen nur durch offene Klammern irgendeiner Art und geschlossene Klammern durch geschlossene Klammern ersetzt werden.
Die Eingabe wird dies immer ermöglichen. Dies bedeutet, dass die Klammern korrekt übereinstimmen, wenn ihr Typ ignoriert wird. Also, {ab<)c]
ist eine gültige Eingabe, aber ab)(cd
oder ab((cd
nicht.
Beispiele:
2#jd {¤>. = 2#jd (¤).
abcdef = abcdef
(3×5+(4-1)) = (3×5+[4-1])
<<<>><<>><<<<<<>>>>>>> = ([{}][{}][{<([{}])>}])
Die Verwendung der nativen Transformation von Eingaben auf diese Weise (automatische Syntax der Sprache) ist nicht zulässig.
Wie immer: kürzester Code gewinnt.
quelle
Antworten:
JavaScript (ES6), 79 Byte
Testfälle
Code-Snippet anzeigen
quelle
Lex, 132 Bytes
quelle
flex
als Compiler verwenden) speichern, indem Sie die letzten zwei bzw. drei Zeilen löschen. Dies kostet einige Bytes (wahrscheinlich 2, 3 oder 4; die Regeln sind etwas unklar). in Strafen für die-ll
Befehlszeilenoption beim Verknüpfen der resultierenden C-Datei. (Das heißt, anstatt mit zu kompilierenlex brackets.l; cc lex.yy.c
, kompilieren Sie mitlex brackets.l; cc lex.yy.c -ll
.) Das ist definitiv ein Kompromiss, der sich in dieser Situation lohnt.Java, 155 Bytes
Lambda, das ein
char[]
einziges Argument annimmt . Wir durchlaufen das Array und speichern seine Position in unserer Zeichenfolge (s
) in einer Variablen (k
). Wir prüfen, ob es sich um eine öffnende oder schließende Klammer handelt (s.indexAt()
), und ersetzen sie durch die entsprechende Klammer, basierend auf der Verschachtelungsebene (s.charAt()
), wobei wir eine entsprechende Schleife verwenden%4
quelle
Haskell, 126 Bytes
Probieren Sie es auf ideone. Verwendungszweck:
Erläuterung
f
Es werden drei Argumente verwendet: Eine Zeichenfolge, die als Stapel zum Schließen von Klammern dient, ein Intn
zum Zählen der Verschachtelungstiefe und der Eingabezeichenfolge.quelle