Sie sollten ein Programm oder eine Funktion schreiben, die eine Startreihenfolge von eindeutigen positiven Ganzzahlen mit einer Ziffer und die Länge der Spur als Eingabe ausgibt oder die Endreihenfolge der Zahlen zurückgibt.
Die Eingabe [5,1,2,6,7] and 14
definiert die folgende Rasse:
--------------
76215 ->
--------------
Regeln des Rennens
- Die Strecke wird umbrochen und die Ziffern können mehrere Runden lang sein.
- Die Reihenfolge der Schritte ist zyklisch und basiert auf der Startposition. In unserem Beispiel
5 1 2 6 7 5 1 2 ...
. - Es können nicht mehrere Ziffern an derselben Position stehen.
Jede Ziffer hat eine Geschwindigkeit von
digit_value
Zelle pro Schritt. Das Überholen einer Ziffer oder eines fortlaufenden Ziffernblocks kostet einen zusätzlichen Schritt. Wenn die Ziffer nicht die dafür erforderliche Geschwindigkeit hat, stoppt sie vor der (dem) Ziffernblock (en). Beispiele:[41 ] => [ 1 4 ] 4 overtakes 1 [2 1 ] => [ 21 ] 2 can only move 1 as it can't move 3 to overtake 1 [4 12 ] => [ 412 ] 4 can only move 1 as it can't move 5 to overtake 12 [ 3 ] => [ 3 ] 3 starting a new lap
Jede Ziffer muss
digit_value
Runden drehen, bevor sie endet. Eine Runde ist beendet, wenn die letzte Zelle der Strecke verlassen wurde. Eine fertige Ziffer wird aus der Spur entfernt.- Beachten Sie, dass eine Ziffer in einem Schritt möglicherweise mehrmals ihre Startposition erreicht und mehrere Runden absolviert.
Eingang
- Eine Liste eindeutiger positiver Ganzzahlen (
1..9
) mit mindestens einem Element und einer einzelnen positiven Ganzzahl, die größer als die Länge der Liste und die Länge der Spur ist.
Ausgabe
- Eine Liste der Ziffern in der Reihenfolge, in der sie in einem eindeutigen Format abgeschlossen wurden.
Beispiele
Ein visuelles Schritt-für-Schritt-Beispiel für die Eingabe starting_order = [5,9,2] and length = 6
295 | Start position
29 5| digit 5 moves
2 9 5| digit 9 moves, finishing lap #1
29 5| digit 2 moves
529 | digit 5 moves, finishing lap #1
52 9| digit 9 moves, finishing lap #2
5 29| digit 2 moves
529| digit 5 moves
9 52 | digit 9 moves, finishing laps #3 and #4
29 5 | digit 2 moves, finishing lap #1
29 5| digit 5 moves
2 9 5| digit 9 moves, finishing lap #5
29 5| digit 2 moves
529 | digit 5 moves, finishing lap #2
52 9| digit 9 moves, finishing lap #6
5 29| digit 2 moves
529| digit 5 moves
9 52 | digit 9 moves, finishing laps #7 and #8
9 5 | digit 2 moves, finishing lap #2 --> remove 2 from the track
59 | digit 5 moves, finishing lap #3
5 | digit 9 moves, finishing lap #9 --> remove 9 from the track
5| digit 5 moves
5 | digit 5 moves, finishing lap #4
| digit 5 moves, finishing lap #5 --> remove 5 from the track
------
Finish order: 2 9 5
Beispiele im Format Input => Output
[3], 2 => [3]
[9, 5], 3 => [9, 5]
[5, 9, 2], 6 => [2, 9, 5]
[5, 9, 2], 10 => [5, 9, 2]
[5, 7, 8, 1, 2], 10 => [1, 5, 7, 8, 2]
[5, 1, 6, 8, 3, 2], 17 => [1, 6, 8, 2, 3, 5]
[1, 2, 3, 7, 8, 9], 15 => [1, 7, 8, 9, 2, 3]
[9, 8, 7, 3, 2, 1], 15 => [8, 7, 9, 1, 2, 3]
[1, 2, 3, 4, 5, 6, 7, 8, 9], 20 => [1, 2, 3, 4, 5, 6, 7, 8, 9]
[9, 8, 7, 6, 5, 4, 3, 2, 1], 20 => [8, 7, 5, 9, 6, 1, 2, 4, 3]
Dies ist Code-Golf, also gewinnt der kürzeste Eintrag.
quelle
Antworten:
Ruby 229
236Dies ist eine Funktion, die zwei Parameter akzeptiert: Ein Array, das die Ziffern darstellt, und ein Int, das die Länge der Spur darstellt. Es wird ein Array zurückgegeben, das die Reihenfolge angibt, in der die Ziffern das Rennen beenden.
Testen Sie es online: http://ideone.com/KyX5Yu
Bearbeiten: Einige Tricks herausgefunden , um mehr Zeichen zu sparen.
Ungolfed-Version:
quelle
Python 2, 345 Bytes
Schade, es ist nicht kürzer als @ w0lfs, aber was auch immer. (Beachten Sie, dass es sich bei den großen Einzügen um Tabulatoren handelt, die beim Posten 4 Leerzeichen enthalten.)
quelle
Hier ist mein magischer gepolsterter Code
C (
457430b)Hinweis : Es muss noch verbessert werden ...
BEARBEITEN: Code verkürzt ... - sizeof (int) = 4, function = v, bleibt noch eine Variable zu ersetzen.
quelle
sizeof
scheinen durch eine magische Zahl ersetzt zu werden. Vielleicht wäre es nicht so portabel, aber hey - das ist Codegolf.v(int*M,int m){e=32;f=48;u=0;l=m;char a,
... Außerdem ist fast das gesamte Leerzeichen unnötig;,V[m];for(i=0;
...)printf(
...);getch();}
.