Powinieneś napisać program lub funkcję, która poda początkową kolejność wyraźnych liczb całkowitych dodatnich i długość ścieżki jako dane wyjściowe lub zwraca kolejność końcową liczb.
Dane wejściowe [5,1,2,6,7] and 14
definiują następujący wyścig:
--------------
76215 ->
--------------
Zasady wyścigu
- Tor zawija się, a cyfry mogą przechodzić wiele okrążeń.
- Kolejność kroków jest cykliczna i oparta na pozycji początkowej. W naszym przykładzie
5 1 2 6 7 5 1 2 ...
. - W tej samej pozycji nie może być wielu cyfr.
Każda cyfra ma prędkość
digit_value
komórki na krok. Wyprzedzanie cyfry lub ciągłego bloku cyfr kosztuje jeden dodatkowy krok. Jeśli cyfra nie ma wymaganej prędkości, zatrzyma się przed (blokiem) cyfr (y). Przykłady:[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
Każda cyfra musi przejść
digit_value
okrążenia, zanim się skończy. Okrążenie jest ukończone, gdy pozostała ostatnia komórka toru. Gotowa cyfra jest usuwana ze ścieżki.- Zauważ, że cyfra może osiągnąć swoją pozycję początkową wiele razy przez krok i ukończyć wiele okrążeń.
Wejście
- Lista wyraźnych jednocyfrowych dodatnich liczb całkowitych (
1..9
) z co najmniej jednym elementem i pojedynczą dodatnią liczbą całkowitą, większą niż długość listy, długość ścieżki.
Wynik
- Lista cyfr w kolejności, w jakiej zakończyły się, w dowolnym jednoznacznym formacie.
Przykłady
Wizualny przykład wprowadzania danych krok po kroku 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
Przykłady w formacie 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]
To jest golf golfowy, więc wygrywa najkrótszy wpis.
źródło
Odpowiedzi:
Rubinowy 229
236Jest to funkcja, która przyjmuje dwa parametry: tablicę reprezentującą cyfry i liczbę całkowitą reprezentującą długość ścieżki. Zwraca tablicę reprezentującą kolejność, w której cyfry kończą wyścig.
Przetestuj online: http://ideone.com/KyX5Yu
Edycja: Wymyśliłem kilka sztuczek, aby zapisać więcej znaków.
Wersja bez golfa:
źródło
Python 2, 345 bajtów
Szkoda, że nie jest krótszy niż @ w0lf, ale co. (Uwaga: duże wcięcia to tabulatory, które tłumaczą się na 4-spacje).
źródło
oto mój magiczny wyściełany kod
C (
457430b)Uwaga : wymaga dalszej poprawy ...
EDYCJA: kod skrócony ... - sizeof (int) = 4, funkcja = v, nadal pozostaje zmienna do zrobienia.
źródło
sizeof
wydają się być zastąpione magiczną liczbą. Może nie byłby tak przenośny, ale hej - to jest golf golfowy.v(int*M,int m){e=32;f=48;u=0;l=m;char a,
... Prawie cała ta biała spacja jest niepotrzebna;,V[m];for(i=0;
...)printf(
...);getch();}
.