Brain-Flak wird morgen ein Jahr alt! Zu Ehren des Geburtstages veranstalten wir eine Geburtstagsfeier im PPCG-Stil, auf der mehrere Benutzer Fragen zu Brain Flak stellen! Hilf uns zu feiern! :)
Brain-Flak ist eine esoterische Sprache, die ich geschrieben habe, in der alle Befehle Klammern sind und alle Klammern vollständig übereinstimmen müssen. Meine eigene Definition ausleihen :
Für die Zwecke dieser Herausforderung ist eine „Klammer“ eines dieser Zeichen:
()[]{}<>
.Ein Klammerpaar wird als "übereinstimmend" betrachtet, wenn die öffnende und schließende Klammer in der richtigen Reihenfolge sind und keine Zeichen enthalten, z
() []{}
Oder wenn jedes Unterelement in ihm auch übereinstimmt.
[()()()()] {<[]>} (()())
Unterelemente können auch mehrere Ebenen tief verschachtelt sein.
[(){<><>[()]}<>()] <[{((()))}]>
Eine Zeichenfolge wird genau dann als "vollständig zugeordnet" betrachtet, wenn:
Jedes einzelne Zeichen ist eine Klammer,
Jedes Klammerpaar hat die richtige Öffnungs- und Schließklammer in der richtigen Reihenfolge
Zur Feier des ersten Geburtstages von brain-flak geht es bei der heutigen Herausforderung darum, einen unausgeglichenen Satz von Klammern zu verwenden und zu bestimmen, welche Arten von Operationen erforderlich sind, um die Gültigkeit von brain-flak zu gewährleisten.
Zum Beispiel
((
ist es kein gültiger Brain-Flak-Code, aber wenn wir ihn anhängen))
, wird er zu einem(())
vollständig ausgeglichenen und daher gültigen Brain-Flak. Das macht diese Eingabe anhängbar .Ebenso
>}
ist es nicht gültig, aber wir können es vorher{<
machen{<>}
, was gültig ist. Das macht diese Eingabe vorzeigbar .Einige Eingaben sind etwas komplizierter. Zum Beispiel
)][({
kann nicht nur durch Anhängen oder Voranstellen gültig gemacht werden. Sie kann jedoch durch Voranstellen[(
und Anhängen gültig gemacht werden})]
. Daher kann diese Eingabe sowohl vorab als auch angehängt werden .Schließlich können einige Eingaben durch eine Kombination von Anhängen oder Voranstellen niemals zu einem gültigen Brain-Flak-Code gemacht werden. Zum Beispiel
(>
kann nie gültig gemacht werden. (Voranstellen<
schafft<(>
, und Anfügen)
erzeugt(>)
, von denen keiner gültig sind) Daher dieser Eingang weder appendable oder prependable.
Für die heutige Herausforderung müssen Sie ein Programm oder eine Funktion schreiben, die eine Reihe von Klammern verwendet und feststellt, ob es sich um eine Zeichenfolge handelt
appendable
prependable
both
neither
Sie können auswählen, welche Werte Sie für jeden Fall verwenden. Zum Beispiel ausgeben 1, 2, 3, 4
, oder 'a', 'p', 'b', 'n'
, oder 1, 'foo', 3.1415, -17
, oder was auch immer in Ordnung ist. Solange jede Ausgabe unterschiedlich und konsistent ist, ist das in Ordnung. Sie müssen jedoch eindeutig angeben, welcher Ausgang welchem Fall entspricht.
Sie können diesen Wert in einem beliebigen Format zurückgeben (z. B. von einer Funktion zurückkehren, in STDOUT drucken, Argumente ändern, in eine Datei schreiben usw.).
Sie können davon ausgehen, dass die Eingabe niemals gültig oder leer sein wird.
Beispiele
Die folgenden Eingaben können alle vorangestellt werden :
))
(((()()())))}
)>}]
()[]{}<>)
Diese sind alle anhängbar :
(({}{})
((((
([]()())(
{<<{
Dies sind alles beide :
))((
>()[(()){
>{
Und das sind beide nicht :
)(}
{(((()()()))>
[}
((((((((((>
((((((((((<>()]
Wie üblich ist dies Codegolf , daher gelten Standardlücken und die kürzeste Antwort in Bytes gewinnt!
Diese Herausforderung ist bei Brain-Flak besonders schwierig, daher zeigt maximaler Brownie auf jede Antwort, die in Brain-Flak geschrieben ist. :)
quelle
maximum brownie points
Ich denke, dass das Anbieten maximaler Brownie-Punkte und Cookies das Brain-Flaking dieser Herausforderung mehr als nur zu Brownie-Punkten anregen würde, da es meiner Meinung nach in keiner Sprache trivial ist, geschweige denn zu Brain-Flak. : P][
ist nicht anhängbar, da nichts, was Sie anhängen können, ihn gültig machen kann. Ebenso ist es nicht vorzeigbar. Es ist ... "einfügbar"! Sie können es in eine Zeichenfolge einfügen, um den gesamten gültigen Brainflak zu erstellen.You can assume that the input will never be valid brain-flak or empty.
Antworten:
Jelly ,
33 32 37 3534 BytesFehler gefunden, schreckliche Korrektur +5 Bytes, bessere Korrektur - 2 Bytes, mit einem Trick von Adnan, den ich hier für -1 mehr gesehen habe.
Rückgabewerte:
(Ungültige Eingabe gibt falsche Ergebnisse zurück, obwohl gültiges Brain-Flack zurückgibt
[]
.)Probieren Sie es online! - eine Testsuite (druckt zerrissene Darstellungen
20
aus[2,0]
und ignoriert Zeilen, die irgendwelche enthalten-
).quelle
Retina ,
414041 Bytes1 Byte gespart dank @MartinEnder
Probieren Sie es online!
1
0
10
01
Bearbeitungen
quelle
[]})>]
Speichert ein Byte.(][)
. Ich denke , es kann durch Veränderung zu einem Preis von einem Byte festgelegt werden101
zu...+
.Both
auch gibt10
ist die einzig gültige Kombination fürBoth
.Batch, 337 Bytes
Ausgaben
]
für prepend,[
für append,][
für beide,[]
für keine.quelle
Haskell ,
115108 BytesBEARBEITEN:
Probieren Sie es online!
Verwenden Sie wie
(""#) "))"
. Die Ergebnisse sind wie folgt angegeben:Wie es funktioniert
s#d
Analysiert eine verbleibende Zeichenfolged
anhand einer Zeichenfolge / eines Stapelss
erwarteter schließender Klammern.s#""
Zeile prüft, ob alle schließenden Klammern am Ende der Zeichenfolge gefunden wurden, andernfalls ist das Anhängen erforderlich.s#(c:d)
prüft, ob das nächste Zeichenc
eine öffnende Klammer ist, und belässt in diesem Fall die entsprechende schließende Klammer für die Rekursion auf dem Stapel.quelle
Japt , 44 Bytes
Ausgaben
1
für vorab anhängbar,3
für anhängbar,13
für beide und31
für keine.Online testen! oder Überprüfen Sie alle Testfälle auf einmal.
Wie es funktioniert
quelle
PHP, 137 Bytes
1 => anhängbar,
2 => voranstellen,
12 => beide,
0 => weder
Testfälle
quelle