Sie sind Projektmanager. Eines Tages wurde einer Ihrer Programmierer wahnsinnig ( nicht Ihre Schuld ), nahm alle Ausdrücke in die Codebasis und fügte ihnen zufällige Klammern hinzu, bevor er sofort aufhörte und über Ihre Inkompetenz schwärmte ( auch nicht Ihre Schuld ). Dies ist jedoch eine einfache Lösung, da Sie aus irgendeinem Grund die Versionskontrolle nicht verwenden ( ganz und gar nicht Ihre Schuld ). Und aus irgendeinem Grund möchte keiner der anderen Programmierer alle Ausdrücke durchgehen, um die nicht übereinstimmenden Klammern zu korrigieren ( das ist übrigens nicht Ihre Schuld ). Programmierer heutzutage, denken Sie. Sie müssen es selbst tun. Der Horror! Solche Aufgaben sollten unter Ihnen sein ...
Die Eingabe wird eine einzelne Zeile sein, die eine Reihe von linken Klammern ( ( [ {) und rechten Klammern ( ) ] }) enthält. Es kann auch, aber nicht immer, Kommentare ( /* */) und Zeichenkettenliterale ( " "oder ' ') sowie verschiedene Zahlen, Buchstaben oder Symbole enthalten.
Es wird mindestens eine eckige Klammer (außerhalb eines Kommentars oder eines String-Literal) geben, die kein entsprechendes Gegenteil hat (außerhalb eines Kommentars oder eines String-Literal). Zum Beispiel ein Irrtum }ohne {Prior. Ein anderes Beispiel: a, (das )hinterher kein hat . Ihr Programm ersetzt durch ein Leerzeichen die Mindestanzahl von Klammern, die erforderlich sind, damit die Klammern übereinstimmen.
Beispiele:
(4 + (2 + 3))]==> (4 + (2 + 3)) (die eckige Klammer am Ende)
][][[]]==> [][[]](die eckige Klammer am Anfang)
("Hel(o!"))==> ("Hel(o!") (die Klammer am Ende)
( /* )]*/==> /* )]*/ (die Klammer am Anfang)
{()]==> () (die geschweifte Klammer und die eckige Klammer)
- Die Eingabe kann von einem beliebigen Ort aus erfolgen (STDIN, Befehlszeilenargument, Lesen aus einer Datei usw.).
- Wenn es mehr als eine Möglichkeit gibt, die Nichtübereinstimmung mit der gleichen Anzahl von Entfernungen zu beheben, ist beides akzeptabel.
- In Klammern werden nur Abweichungen angezeigt. Zeichenkettenliterale und Kommentare werden immer korrekt gebildet.
- Der Titel stammt aus diesem SO-Thread
- Es wird niemals Anführungszeichen in Kommentaren, Anführungszeichen in Anführungszeichen, Kommentare in Kommentaren oder Kommentare in Anführungszeichen geben.
Dies ist Codegolf, daher gewinnt die Mindestanzahl an Bytes. Stellen Sie Fragen in Kommentaren, wenn die Spezifikation nicht klar ist.
("foo (\") bar"))?
{{(})sollte { } oder gleichwertig sein, da das Eröffnungsszenario impliziert, dass der Code zu Beginn arbeitete, und {(})als nicht übereinstimmende Klammern in jeder mir bekannten Programmiersprache zählt (dh "verursacht Stasis" ??). Aber dann habe ich bereits eine Antwort geschrieben, also bin ich voreingenommen.