Vous devez écrire un programme ou une fonction qui a donné un ordre de départ d'entiers positifs distincts à un chiffre et la longueur de la piste en tant que sorties d'entrée ou retourne l'ordre d'arrivée des nombres.
L'entrée [5,1,2,6,7] and 14
définit la course suivante:
--------------
76215 ->
--------------
Règles de la course
- La piste s'enroule et les chiffres peuvent parcourir plusieurs tours.
- L'ordre des étapes est cyclique et basé sur la position de départ. Dans notre exemple
5 1 2 6 7 5 1 2 ...
. - Il ne peut pas y avoir plusieurs chiffres dans la même position.
Chaque chiffre a une vitesse de
digit_value
cellule par pas. Le dépassement d'un chiffre ou d'un bloc continu de chiffres coûte une étape supplémentaire. Si le chiffre n'a pas la vitesse nécessaire pour cela, il s'arrêtera avant le (bloc de) chiffre (s). Exemples:[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
Chaque chiffre doit faire des
digit_value
tours avant de terminer. Un tour est terminé lorsque la dernière cellule de la piste est laissée. Un chiffre terminé est supprimé de la piste.- Notez qu'un chiffre peut atteindre sa position de départ plusieurs fois au cours d'une étape et effectuer plusieurs tours.
Contribution
- Une liste d'entiers positifs distincts à un chiffre (
1..9
) avec au moins un élément et un seul entier positif, supérieur à la longueur de la liste, la longueur de la piste.
Production
- Une liste de chiffres dans l'ordre où ils ont terminé dans un format non ambigu.
Exemples
Un exemple visuel étape par étape pour l'entrée 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
Exemples de 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]
Il s'agit de code-golf, donc l'entrée la plus courte l'emporte.
la source
Réponses:
Rubis 229
236Il s'agit d'une fonction qui prend deux paramètres: un tableau représentant les chiffres et un int représentant la longueur de la piste. Il renvoie un tableau, représentant l'ordre dans lequel les chiffres terminent la course.
Testez-le en ligne: http://ideone.com/KyX5Yu
Edit: Compris quelques astuces pour enregistrer d'autres caractères.
Version non golfée:
la source
Python 2, 345 octets
Dommage qu'il ne soit pas plus court que celui de @ w0lf, mais whatev. (Notez que les grands retraits sont des tabulations, qui se traduisent par 4 espaces lorsque je poste.)
la source
voici mon code matelassé magique
C (
457430b)Remarque : il a besoin d'être amélioré ...
EDIT: code raccourci ... - sizeof (int) = 4, fonction = v, reste encore une variable à remplacer.
la source
sizeof
semblent pouvoir être remplacés par un nombre magique. Peut-être que ce ne serait pas aussi portable, mais bon - c'est du golf de code.v(int*M,int m){e=32;f=48;u=0;l=m;char a,
... De plus, presque tout cet espace est inutile;,V[m];for(i=0;
...)printf(
...);getch();}
.