Stellen Sie sich die folgenden Diagramme als Sätze vertikaler Kreuzungsrohre vor.
1 2 1 2 1 2 3 4
\ / \ / \ / \ /
X | | |
/ \ / \ / \ / \
2 1 1 2 | X |
\ / \ /
X X
/ \ / \
3 1 4 2
In dem äußersten linken Diagramm, das 1
und 2
nach unten rutscht ihre jeweiligen Schrägstriche, überquert an den X
, und kommt an den gegenüberliegenden Seiten , von wo aus sie gestartet.
Es ist die gleiche Idee im mittleren Diagramm, aber das |
bedeutet, dass sich die Pfade nicht kreuzen, sodass sich nichts ändert.
Das Diagramm ganz rechts zeigt eine komplexere Rohrführung, 1 2 3 4
in die permeiert wird 3 1 4 2
.
Tor
Ihr Ziel bei dieser Code-Golf-Herausforderung ist es, diese "Rohrleitungsdiagramme" bei einer Permutation wie z 3 1 4 2
. Das kürzeste Programm in Bytes gewinnt.
Einzelheiten
- Die Eingabe erfolgt von stdin als Permutation der Zahlen von 1 bis n, die durch Leerzeichen getrennt sind, wobei n eine positive ganze Zahl ist. Sie können davon ausgehen, dass alle Eingaben korrekt sind.
Die Ausgabe des Routing-Diagramms geht auf stdout.
- Wenn Sie die Zahlen 1 bis n nacheinander oben im Diagramm ablegen, wird die Eingabepermutation unten ausgegeben. (Oben und unten sind immer Schrägstriche.)
- Das Diagramm muss nicht optimal klein sein. Es können so viele Ebenen wie nötig sein, solange es korrekt ist.
- Das Diagramm sollte nur die Zeichen
\/ X|
sowie die Zeilenumbrüche (keine Zahlen) enthalten. |
sollte immer an den äußersten Kreuzungen verwendet werden, da die VerwendungX
keinen Sinn ergibt.- Ein paar führende oder nachfolgende Leerzeichen sind in Ordnung, solange das Diagramm korrekt ausgerichtet ist.
Beispiele
Eine Eingabe von 3 1 4 2
könnte erzeugen (wie oben)
\ / \ /
| |
/ \ / \
| X |
\ / \ /
X X
/ \ / \
Eine Eingabe von 1
könnte produzieren
\
|
/
|
\
|
/
Eine Eingabe von 3 2 1
könnte produzieren
\ / \
X |
/ \ /
| X
\ / \
X |
/ \ /
Eine Eingabe von 2 1 3 4 6 5
könnte produzieren
\ / \ / \ /
X | X
/ \ / \ / \
quelle
X
sich direkt mit einem verbinden,|
wie es ein/
tut? Zu einem anderenX
?row of slashes
,row of X's and |'s
,row of slashes
,row of X's and |'s
, ... Format.n
größer als 10 sein?Antworten:
Python 2, 218
219220222224227243247252259261264Ich habe einen etwas anderen Ansatz gewählt: Ich finde die zum Sortieren der Eingabe erforderlichen Tauschvorgänge und invertiere sie dann vertikal, um die Tauschvorgänge zu erhalten, die zum Umwandeln der sortierten Liste in die Eingabe erforderlich sind. Als zusätzlichen Vorteil dieses Ansatzes kann eine beliebige Liste von Zahlen verwendet und der Permutationspfad angegeben werden, um die Art der Eingabe in die Eingabe umzuwandeln.
Beispiel:
Verbesserungen:
264 -> 261: Äußere Schleife von for nach while umgeschaltet.
261 -> 259: Wird
f%2
anstelle von verwendet(c^m)
, da in Python arithmetische Operatoren eine höhere Priorität haben als bitweise Operatoren.259 -> 252: Innere Schleife von for nach while umgeschaltet. Kombiniert
i
undc
variabel.252 -> 247: Der Build wurde geändert und dann in umgekehrter Reihenfolge erstellt.
247 -> 243: Neue Zeilen manuell hinzugefügt, anstatt Join zu verwenden.
243 -> 227: grcs Methode zur Erzeugung von Schrägstrichen (danke grc!) Übernommen und s hinzugefügt.
227 -> 224: Die Erzeugung von Schrägstrichen wurde in die vorinterne while-Schleife verschoben,
%4
um ein Zeichen zu entfernen und mit Extended Slicing zu speichern.224 -> 222: m entfernt.
222 -> 220:
f%2+n%2
->f+n&1
220 -> 219:
| 1<n-1|
->|~i>-n|
(Leerzeichen entfernt)219 -> 218: Kombinierte Initialisierungen von
o
unds
und verschob das Slice an das Ende.quelle
Python, 290
Ich habe mich für einen ziemlich einfachen Ansatz entschieden, aber es hat sich als etwas länger herausgestellt, als ich gehofft hatte. Es betrachtet die Liste paarweise und entscheidet, ob jedes Paar getauscht wird oder nicht. Dies wird für jede sich überschneidende Zeile wiederholt, bis die Liste mit der Eingabe übereinstimmt.
Beispiel:
quelle
HTML JavaScript,
553419Vielen Dank an @izlin und @TomHart für den Hinweis auf meine Fehler.
Testen Sie hier: http://goo.gl/NRsXEj
quelle
Javascript - 395
378 wenn ich die zahlen nicht auf meine ausgabe drucke, aber es sieht viel besser aus und verbessert die lesbarkeit.
Teste es hier . (mit ungolfed version)
golfed version:
Erläuterung
Zuerst setze ich die Eingabe auf die Indexnummer und ändere die erste Zeile mit den Ergebnissen. Beispielsweise
Mit dieser Ersetzung kann ich einen Blasensortierungsalgorithmus verwenden, um 2,4,1,3 bis 1,2,3,4 zu sortieren, und der Graph wird der kürzestmögliche sein, den wir suchen.
Wenn Sie irgendwelche Ideen haben, wie ich den Code verkleinern kann, kommentieren Sie einfach :)
Beispiel
quelle
<br>
Tag und den Textbereich nur auf jsfiddle verwendet, weil es viel besser aussieht. Die Warnung hat keine monospaced Schriftart, also sieht die Ausgabe schlecht aus. In meiner Golfversion verwende ich alert und \ n. Ist Ihre Webseite öffentlich?Cobra - 334
344356360Dabei wird jedes Element von links nach rechts verschoben. Aus diesem Grund wird es oft eine lächerlich große (wenn auch immer noch korrekte) Pfadkarte ausgeben.
Beispiele:
quelle