Extended Train Swapping Problem
Teil 1: Normales Problem beim Zugwechsel
Beim CCC (Canadian Computing Competition) von 1996 war das erste Problem der Stufe 2 ein Problem beim Tauschen von Zügen. Sie können den Link hier besuchen . Im Wesentlichen haben Sie eine Reihe von nummerierten Zügen, und Sie möchten herausfinden, wie viele Zugwechsel Sie benötigen, um sie in Ordnung zu bringen. Mit jedem Zugwechsel können Sie zwei benachbarte Züge tauschen. Da Zugwagen in beide Richtungen fahren können, kümmert sich niemand darum, dass die Zugwagen beim Austausch in die andere Richtung weisen. Das ist ziemlich einfach; Alles was Sie tun müssen ist:
Finden Sie die Anzahl der Schritte zum Blasensortieren. Dies ist der effizienteste Sortieralgorithmus, wenn Sie nur benachbarte Elemente austauschen können
Also habe ich es mir schwerer gemacht.
Teil 2: Wie diese Herausforderung funktioniert
Im Wesentlichen können Sie jetzt mehr als nur benachbarte Züge tauschen. Mit einer längeren rotierenden Plattform können Sie die Position mehrerer Züge tauschen. Zum Beispiel mit einer rotierenden Plattform mit einer Länge von 4, kann man sowohl die inneren und äußeren Paare zugleich vertauschen, so 1 2 3 4
wird 4 3 2 1
. Hier einige Beispiele für verschiedene rotierende Plattformgrößen:
Length 2:
1 2 3 4 5
---
1 3 2 4 5
Length 3:
1 2 3 4 5
-----
1 4 3 2 5
Length 4:
1 2 3 4 5
-------
4 3 2 1 5
Im Wesentlichen kehren Sie nur eine Unterliste des gesamten Zuges um. Zur Verdeutlichung können Sie bei jeder Bewegung nur genau die N
Züge tauschen .
Teil 3: Technische Daten
Eingang
Ihre Eingabe muss zwei Dinge berücksichtigen: die Länge der rotierenden Plattform und die Reihenfolge der Zugwagen. Wenn Sie möchten, können Sie auch die Anzahl der Waggons benötigen. Die Reihenfolge der Zugwagen wird durch eine geordnete Liste von Nummern angegeben (wobei jede Nummer einen Zugwagen darstellt), sodass Sie die Eingabe als durch Leerzeichen getrennte Ganzzahlen, durch Zeilenumbrüche getrennte Ganzzahlen, als Array usw. lesen können.
Ausgabe
Sie müssen die optimale (minimale) Anzahl von Swaps ausgeben, die erforderlich sind, um alle Wagen in die Reihenfolge zu bringen 1 2 3 ... N
. Wenn es keine Lösung gibt, geben Sie aus -1
,No solution
oder eine andere einheitliche Botschaft. Sie dürfen nicht an stderr ausgeben.
Wertung
Dies ist ein Code-Golf Herausforderung, daher erfolgt die Bewertung in Bytes. Die Lösung mit der niedrigsten Anzahl von Bytes zum 1. September 2016 wird akzeptiert.
Beispiele
Problem 1 Eingabe
4
2
1 3 2 4
Ausgabe
1
Erklärung
Das ist ziemlich trivial; Mit einer rotierenden Plattform der Länge 2 entspricht dies dem normalen Problem des Zugwechsels. Tauschen Sie die 2
und die 3
.
Problem 2 Eingabe
4
3
1 3 2 4
Ausgabe
No solution (or an equivalent consistent message).
Problem 3 Eingabe
9
3
1 4 5 6 3 8 7 2 9
Ausgabe
4
Erläuterung
1 4 5 6 3 8 7 2 9
-----
1 4 5 6 3 2 7 8 9
-----
1 4 5 2 3 6 7 8 9
-----
1 4 3 2 5 6 7 8 9
-----
1 2 3 4 5 6 7 8 9
Viel Glück!
BEARBEITEN 1 : Das Eingabeformat wurde flexibler. Danke an @Mego!
EDIT 2 : Es wurde klargestellt, dass eine rotierende Plattform der Länge 4 sowohl das innere als auch das äußere Paar austauscht. Danke an @TimmyD!
EDIT 3 : Es wurde klargestellt, dass Sie Permutationen der Länge N
genau und höchstens machen müssen. Danke an @Zgarb!
quelle
Antworten:
Perl, 120 Bytes
Beinhaltet +6 für
-Xapi
(-
und Leerzeichen werden ebenfalls gezählt, da sowohl das-i
als auch das$'
im Code es unmöglich machen, die Optionen mit zu kombinieren-e
)Führen Sie die Eingabe auf STDIN und die Plattformlänge nach der
-i
Option aus, zDruckt,
-2
wenn keine Lösung vorhanden isttrains.pl
::Wenn
N <= 9
dann können Sie 5 weitere Bytes gewinnen:quelle