Sie erhalten eine (möglicherweise leere) Zeichenfolge mit Klammern ( [{()}]
) und anderen Zeichen ( A
- Z
, a
- z
, 0
- 9
, Interpunktion). Sie müssen überprüfen, ob die folgenden Regeln eingehalten werden:
- Nicht in Klammern gesetzte Zeichen werden ignoriert.
- Jede offene Klammer
[{(
hat eine schließende Klammer)}]
. Ist[](
also nicht erlaubt. - Klammern sind richtig verschachtelt.
[(])
ist nicht erlaubt. - Geschweifte Klammern dürfen keine eckigen Klammern enthalten. Einfache Klammern dürfen keine geschweiften oder eckigen Klammern enthalten. Also
[({})]
,[{[]}]
und({})
sind nicht erlaubt. Klammern können mit ähnlichen Klammern verschachtelt werden, dies[[{((()))}{{(())}}]()]{()}
ist also zulässig.
Die Ausgabe ist ein einzelner Wahrheits- / Falsch-Wert gemäß Ihrer Wahl.
Kürzester Code gewinnt.
Testfälle
b[[a{(/)}(())+={{}-}],]
-> Gültig
([h][e][l][l][o])
-> Ungültig
[///[{(\/(arg()))}1{{((-)-2)}}]()]{()}
-> Gültig
hi
-> Gültig
code-golf
string
decision-problem
balanced-string
ghosts_in_the_code
quelle
quelle
Antworten:
Retina , 84 Bytes
Probieren Sie es online aus.
Dies ist eine recht unkomplizierte (aber gelungene) Erweiterung des regulären .NET- Ausdrucks, der in Klammern überprüft wird .
Während dies mit Bilanzgruppen durchaus möglich ist, hat Perls Rekursion hier definitiv den Vorteil . Bei beiden Ansätzen wird jedoch die Eleganz eines einzelnen Regex-Matches aufgegeben, um die Eingabe durch wiederholte Ersetzungen schrittweise zu reduzieren, wie dies die sed-Antwort von Digital Trauma tut . Dies kann in Retina in 34 Bytes implementiert werden, aber ich zögere, den Code selbst zu posten, da ich nicht auf die Idee gekommen bin.
quelle
Retina, 34
Erstens Kredit, bei dem Kredit fällig ist:
Ich bin unabhängig (später) auf den gleichen Ansatz in sed gekommen , also hoffe ich, dass ich nicht auf Zehen tritt ( groß oder anders), indem ich Folgendes poste :
Also jetzt mit
sudo apt-get install mono-complete
undgit clone https://github.com/mbuettner/retina.git
ich habe eine funktionierende Netzhaut auf meiner Ubuntu VM. Hier ist die Testausgabe:quelle
Sed, 53
Hier behaupte ich, dass da
sed
nicht wirklich ein Konzept von Wahrhaftigkeit / Falschheit existiert, dann definiere ich die leere Zeichenkette als Wahrhaftigkeit und alle anderen Zeichenketten als Falschheit.Wenn das nicht akzeptabel ist, können wir ein paar Zeilen hinzufügen, also:
Sed, 66
Dies gibt 0 für falsch und 1 für wahr aus.
quelle
0
oder1
). Ich kann nicht sagen, wer es posten soll, aber es sollte wahrscheinlich einer von euch beiden sein.CJam,
2726 BytesDies gibt 1 (wahr) oder 0 (falsch) aus. Probieren Sie es online! oder überprüfen Sie alle Testfälle.
Wie es funktioniert
quelle
𝔼𝕊𝕄𝕚𝕟 43 Zeichen / 62 Bytes
Try it here (Firefox only).
Nee.
Wenn ich jedoch neu implementierte Funktionen verwende, kann ich bis zu 28 Zeichen / 47 Byte reduzieren:
quelle
Japt ,
4237 Bytes5 Bytes mit einer Funktion gespeichert, die ich nicht erkannt habe ... Vielen Dank für das Hinzufügen, @Downgoat!
Japt braucht wirklich bessere RegExp-Unterstützung ...
Probieren Sie es online!
Wie es funktioniert
quelle
C99,
226208207 BytesIch versuche zum ersten Mal etwas Golf zu spielen
Lesbar:
Es gibt einen Pufferüberlauf, aber er scheint nichts zu beeinflussen - ich glaube, das liegt an der Ausrichtung.
quelle
char* s
Perl, 50 + 1 = 51 Bytes
Benötigt die
-p
Flagge und Drucke1
für die Wahrheit und nichts für falsche Ergebnisse. Ich zähle-p
als eins, weil es mit kombiniert werden kann-e
:Der Code ist im Grunde genommen nur eine einfache Regex-Übereinstimmung mit der Eingabe, wobei die raffinierte rekursive Regex-Funktion von Perl verwendet wird.
Vielen Dank an Dennis, der mir geholfen hat, dies zu testen und das Perl-Boilerplate zu spielen.
quelle
Python 3: 120 Bytes
Aufbauend auf der Antwort von @ Adnan erwies sich die Verwendung als kürzer:
quelle
Python 3,
196170160154 BytesUmständlich lang, danke an Mego für die Einsparung von 6 Bytes:
quelle