Auf dieser Site gibt es einige Fragen zum Ausgleichen von Klammern und zum Überprüfen, ob die Klammern ausgewogen sind. Ich schlage vor, es ist jetzt Zeit, diese ausgewogenen Klammern für etwas zu verwenden!
In Mathematik und Programmierung sind Klammern wie Blasen, die alles Innere von allem Äußeren isolieren, sodass alles, was drinnen ist, in Ruhe seine Sache tun kann und alles, was draußen ist, nur ein Objekt sieht. Eine Reihe von Klammern ist jedoch eindimensional, während Blasen gewöhnlich mindestens zweidimensional sind. Das bedeutet, dass sich Blasen frei bewegen können, solange sie sich nicht berühren oder sich zwischen der Innenseite und der Außenseite anderer Blasen kreuzen.
Herausforderung
Die Eingabe ist eine Zeichenfolge aus aufeinander abgestimmten Klammern eines einzelnen Typs, entweder rund ()
, quadratisch []
, geschweift {}
oder winklig <>
. Es liegt an Ihnen, welche Art von Programm Sie akzeptieren möchten, und ein Programm, das nur eine einzige Art von Klammern akzeptiert, wird akzeptiert. (Imaginärer Bonus, wenn Ihr Programm einen von ihnen verarbeiten kann, massive imaginäre Bonuspunkte, wenn es alle in derselben Eingabe verarbeiten kann.) Die Eingabe darf nichts zwischen den Klammern enthalten, obwohl abschließende Leerzeichen zulässig sind.
Bei der Ausgabe handelt es sich um alle möglichen Reorganisationen (in beliebiger Reihenfolge und einschließlich der ursprünglichen Eingabe) derjenigen Klammern, die dieselbe Blasenkonfiguration ohne zwei identische Zeichenfolgen ergeben. Das heißt, bei einer Eingabe von ()()
ist die Ausgabe auch gerecht ()()
, obwohl es technisch gesehen zwei Blasen sind, die Plätze tauschen könnten. Für den massiven imaginären Bonus führt eine Eingabe des {}[]()
Willens natürlich zu einer Ausgabe von 6 verschiedenen Elementen / Strings / Linien.
Zwei Blasenkonfigurationen sind "gleich", wenn Sie eine Blase in die andere verschieben können, ohne dass sich eine Blase von innen nach außen oder von außen nach innen kreuzt. Wenn Sie verschachtelte Klammern mit Bäumen vergleichen (jedes übereinstimmende Paar ist ein Knoten, und jedes übereinstimmende Paar innerhalb ist ein Unterknoten, und jedes übereinstimmende Paar innerhalb ist wieder ein Unterknoten usw.), werden die Unterknoten eines bestimmten Knotens sortiert Dann ist eine einzelne Konfiguration von Blasen ein Baum, in dem die Knoten ungeordnet sind.
Jedes vernünftige Ausgabeformat reicht aus, z. B. das Zurückgeben einer Liste von Zeichenfolgen oder einer Liste von Einzelzeichen oder einer einzelnen Zeichenfolge mit einer Art von Leerzeichen oder das Drucken in stdout
oder stderr
mit einer Form von sichtbarem Leerzeichen (meistens Zeilenvorschub oder Leerzeichen) dazwischen jede Neuorganisation.
Nachgestellte Leerzeichen für jede Reorganisation sowie nachgestellte und vorangestellte Zeilen / leere Listenelemente vor und nach der eigentlichen Ausgabe sind zulässig. Sie sollten in Ihrer Ausgabe die gleichen Klammern verwenden, die Sie in Ihrer Eingabe akzeptieren. Abgesehen von den hier angegebenen Klammern, Zeilenumbrüchen und Leerzeichen und dem von Ihnen verwendeten Trennzeichen sollte nichts gedruckt werden (einschließlich unsichtbarer / Null-Zeichen).
Die Punktzahl ist die Anzahl der Bytes im Code. Die niedrigste Anzahl für jede Sprache gewinnt. Sie können feststellen, ob Sie einen imaginären Bonus erhalten, entweder regulär oder massiv, aber dies hat keinen Einfluss auf Ihre Punktzahl. Tatsächliche Boni sind zu schwer auszugleichen.
Input-Output-Beispiele
Beispiel 1:
Eingang:
()(())
Ausgabe:
()(())
(())()
Beispiel 2:
Eingang:
(()())()()
Ausgabe:
(()())()()
()(()())()
()()(()())
Beispiel 3:
Eingang:
(()(()))()
Ausgabe:
((())())()
()((())())
(()(()))()
()(()(()))
((()))
in Beispiel 1 kommen? oder()()()
? Es scheint, als ob Ihnen für jede Eingabe Permutationen fehlen.