Sammle den Müll

9

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

Ewan Delanoy
quelle
5
Enge Wähler, können Sie erklären, was Sie unklar finden? Der Beitrag wird schwer zu reparieren sein, ohne eine explizite Anleitung, was daran falsch ist.
@ ais523 Ich kann nicht verstehen, was die Aufgabe ist. Zugegeben, das mag daran liegen, dass ich müde bin, aber der aktuelle Wortlaut macht nicht viel Sinn
Blue
1
Verschieben Sie den Teilstring, der sich in Klammern, aber nicht in Klammern befindet, nach links, bis er sich auch in Klammern befindet.
Da dieses Problem wiederholt geschlossen und wieder geöffnet wird, habe ich es mit meinem Verständnis des Problems bearbeitet. Hoffentlich habe ich das Problem dabei nicht geändert.
@ ais523 Das ist in Ordnung von mir. Vielen Dank für all Ihre Bearbeitung.
Ewan Delanoy

Antworten:

3

JavaScript (ES6), 263 228 209 205 184 177 173 162 Bytes

Jede Hilfe mit dem Code / regulären Ausdrücken wird sehr geschätzt.

f=s=>s.match(t=/\[\[][\w()]*\[]]|\[]/g,g=/\([\w()]*\)/g,i=0,u=s.split(t).filter(e=>e)).map(e=>e.substr(0,e.length-1)+u[i].match(g).join``+`]`+u[i++].replace(g,``)).join``

Eine anonyme Funktion; Nimmt einen StringParameter sund 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.

XavCo7
quelle