Aufgabe:
Ihre Aufgabe ist es, ein Programm zu erstellen, das bei einer bestimmten Anzahl von Strängen und Iterationen eines Geflechts anzeigt, wohin jeder Strang führt. Die Regeln lauten wie folgt:
- Die Anzahl der Stränge ist immer ungerade und liegt zwischen 3 und 6000 (einschließlich).
- Wenn Sie beginnen, werden die Stränge in 2 (fast) gleiche Bündel unterteilt, das
left
und dasright
. Derleft
wird einen weiteren Strang haben, wenn Sie anfangen.
Für eine Eingabe von 7:
/ / / / \ \ \
1 2 3 4 5 6 7
- Bei jeder Iteration wird der äußerste Strang der Seite mit mehr Strängen in die Mitte in die entgegengesetzte Richtung gelegt. Das Zentrum ist definiert als zwischen gegenüberliegenden gegenüberliegenden Strängen :
////middle\\\
.
1 Iteration von Eingabe 7 (Strang 1 wurde in die Mitte verschoben):
/ / / \ \ \ \
2 3 4 1 5 6 7
Beispiel:
Eingang:
3 4
Berechnungen:
1 2 3
\
2 1 3
/
2 3 1
\
3 2 1
/
3 1 2
Ausgabe:
3 1 2
Regeln:
- Sie müssen nicht die Schrägstriche für die Strangrichtung anzeigen, sondern nur die Zahlen.
- Sie müssen die Zahlen erst nach der letzten Iteration anzeigen.
- Ihre Ausgabe besteht aus durch Leerzeichen getrennten IDs der Stränge
- Die Eingabe erfolgt in folgender Form:
strands [space] iterations
- Die Anzahl der Stränge ist immer ungerade und 3 <= x <= 6000
- Dies ist Code-Golf , also gewinnt der kürzeste Code!
11 2
sein würde2345611178910
?123 -> 213 -> 231 -> 321 -> 312
.Antworten:
GolfScript, 33 Zeichen
Die Eingabe muss auf stdin erfolgen.
Beispiele (Sie können online testen ):
quelle
Python: 179
240, 152 ZeichenErstens die 179
Für
N
Stränge undi
Iterationen verwendet diese AntwortO(1)
Raum undO(N)
Zeit. Ich berechne einfach die Endposition jedes Strangs und iteriere nie über die Zwischenpositionen!Big Edit: Golfen Sie diese Antwort, indem Sie die Bedingungen in Boolesche Algebra ändern. Ich habe auch eine ausführliche Erklärung geschrieben, wie es funktioniert. TL; DR: Formelmuster, Modulo-Division.
Nun die 152
Dies ist vernünftiger Golf Python. (bearbeiten: danke an Alex Thornton für die Bearbeitung von 165 auf 152)
quelle
l
undv
Variablen und der Wechselinsert
zu einer Scheibe Zuordnung.Python 2 (109) / Python 3 (121)
Python 2
Python 3
Der Code muss von Python 2 bestochen worden sein, um seine Golfvorteile gegenüber Python 3 zu demonstrieren: Bereiche sind Listen, Aufrundung auf ein Int, Druck ohne Beginn einer neuen Zeile. Das seltsame
0-i%2
ist, weil-i%2
bewertet als(-i)%2
.Es gibt wahrscheinlich einen effizienteren Ansatz als das Iterieren, nämlich jedes Endergebnis direkt zu berechnen. Der Flechtvorgang hat eine Periode von 2 * s, daher kann es nicht so kompliziert sein.
quelle
Ruby, 105
Nur viel Set-Manipulation. Push, Pop, Reverse und Shift! Ich habe versucht, Eingaben nicht in Ganzzahlen umzuwandeln, aber es wurden ungefähr 20 Zeichen hinzugefügt.
l
undr
(left
undright
) sind die "Thread" -Warteschlangen.right
ist umgekehrt, also fangen wir an, von außen zu ziehen.t
undf
(to
undfrom
) beginnt , wieright
undleft
jeweils, aber wie wir gehen wir immer wieder tauschen sie so können wir immer den letzten „Faden“ von verschiebenfrom
und drücken Sie sich aufto
(f,t=t<<f.shift,f
). Das spart viel Platz.Dann kehren wir
right
am Ende einfach um.Änderungsprotokoll:
2.2 105 oh yeah, map kann einen proc nehmen
2.1 108 Und tatsächlich drehen Sie die Dinge einfach als Teil der Manipulation um.
2.0 116 nicht , dass die temporäre Array. Verwenden Sie stattdessen zwei Zeigervariablen, die wir manipulieren und immer wieder neu zeigen können. Dann nur das Ende anzeigen
1.0 123 erste Idee
quelle
Java, 270 Zeichen
Golf:
ohne Golf:
Online ausführen
quelle