Sie sehen eine Allee und jemand hat den Müll weggelassen! Sie müssen ein Programm schreiben, um das Problem zu beheben, indem Sie den Papierkorb in den Papierkorb werfen.
Die Aufgabe
Die Allee besteht aus einer Folge druckbarer ASCII-Zeichen, z.
[[](dust)[]] car ((paper)vomit) (broken(glass)) [[] (rotten) fence (dirty)
Einige der Klammern hier sind unübertroffen. das sind nur Lockvögel. Was uns wichtig ist, sind die passenden Klammern.
Ein Papierkorb ist eine Zeichenfolge, [
die mit ]
und mit intern übereinstimmenden Klammern und Klammern beginnt und endet . Zum Beispiel []
und [[](dust)[]]
sind Mülleimer in der obigen Zeichenfolge.
Ein Müllsack ist eine Zeichenfolge, (
die mit )
und mit intern übereinstimmenden Klammern und Klammern beginnt und endet . Zum Beispiel (dust)
ist ein Müllsack in der obigen Zeichenfolge.
Es ist möglich, dass sich einige der Müllsäcke bereits in Mülleimern befinden. Mindestens einer wurde jedoch weggelassen, und wir müssen die Müllsäcke so bewegen, dass sie sich alle in Mülleimern befinden. Insbesondere müssen wir für jeden Mülleimer, der sich derzeit nicht in einem Mülleimer befindet (dh einen Teilstring dieses Mülleimers), ihn von seiner aktuellen Position in der Zeichenfolge entfernen und stattdessen an einer Stelle in einem Mülleimer einfügen .
Hier gibt es eine zusätzliche Regel. Da wir nicht zu viel Geld für Müllsammler ausgeben möchten und ihre Route sie von rechts nach links entlang der Allee führt, möchten wir jeden Müllsack nach links verschieben (wichtigstes Kriterium, vorausgesetzt, wir müssen ihn verschieben all) und den kürzestmöglichen Abstand (solange er nach links verschoben wird). So zum Beispiel die einzig richtige Ausgabe für
[can1](bag)[can2]
ist
[can1(bag)][can2]
(Bewegen Sie die Tasche nur ein Zeichen nach links). Außerdem müssen die Taschen in derselben relativen Reihenfolge bleiben:
[can](bag1)(bag2)
muss werden
[can(bag1)(bag2)]
(dh Sie können nicht (bag2)
links von setzen (bag1)
.)
Klarstellungen
- Links vom linken Mülleimer befinden sich keine Müllsäcke. Es ist immer möglich, den gesamten Müll zu entsorgen, indem Sie ihn nach links verschieben.
- Es muss immer mindestens eine Tasche bewegt werden. Es könnte mehr als eine geben.
- Es wird niemals einen Mülleimer in einem Müllsack geben (die Mülleimer sind zu wertvoll, um sie einfach wegzuwerfen).
- Wenn sich eine Tasche bereits in einer Dose befindet, lassen Sie sie einfach in Ruhe.
- Es ist in Ordnung, dass sich Eingabe und Ausgabe im nachfolgenden Leerzeichen (einschließlich Zeilenumbrüchen) unterscheiden.
Beispiele:
Eingang:
[[](dust)[]] car ((paper)vomit) (broken(glass)) [[] (rotten) fence (dirty)
Ausgabe:
[[](dust)[]((paper)vomit)(broken(glass))] car [[(rotten)(dirty)] fence
Eingang:
[]] (unusable) door (filthy) car
Ausgabe :
[(unusable)(filthy)]] door car
quelle
Antworten:
JavaScript (ES6),
263228209205184177173162 BytesJede Hilfe mit dem Code / regulären Ausdrücken wird sehr geschätzt.
Eine anonyme Funktion; Nimmt einen
String
Parameters
und gibt die Ausgabe zurück./\[\[][\w()]*\[]]|\[]/g
Ordnet Mülleimer verschachtelten Müllsäcken zu, aber ich glaube nicht, dass sie bei Bedarf ausgewogene Klammern in Müllsäcken überprüfen können.quelle