Вы должны написать программу или функцию, которая задает начальный порядок различных однозначных натуральных чисел и длину дорожки в качестве входных данных или возвращает конечный порядок чисел.
Вход [5,1,2,6,7] and 14
определяет следующую расу:
--------------
76215 ->
--------------
Правила гонки
- Трек оборачивается и цифры могут проходить несколько кругов.
- Порядок шагов является циклическим и основывается на начальной позиции. В нашем примере
5 1 2 6 7 5 1 2 ...
. - В одной и той же позиции не может быть нескольких цифр.
Каждая цифра имеет скорость
digit_value
ячейки за шаг. Обгон цифры или непрерывный блок цифр стоит один дополнительный шаг. Если цифра не имеет необходимой скорости для этого, она остановится перед (блоком) цифрой (ами). Примеры:[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
Каждая цифра должна пройти
digit_value
круг до того, как она закончится. Круг заканчивается, когда остается последняя ячейка дорожки. Готовая цифра удаляется с трека.- Обратите внимание, что цифра может достигать своей начальной позиции несколько раз за шаг и пройти несколько кругов.
вход
- Список различных однозначных положительных целых чисел (
1..9
), по крайней мере, с одним элементом и одним положительным целым числом, превышающим длину списка и длину дорожки.
Выход
- Список цифр в порядке их окончания в любом однозначном формате.
Примеры
Визуальный пошаговый пример для ввода 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
Примеры в формате 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]
Это код-гольф, поэтому выигрывает самый короткий вход.
источник
Ответы:
Рубин 229
236Это функция, которая принимает два параметра: массив, представляющий цифры, и int, представляющий длину дорожки. Возвращает массив, представляющий порядок, в котором цифры заканчивают гонку.
Протестируйте это онлайн: http://ideone.com/KyX5Yu
Изменить: выяснил некоторые хитрости, чтобы сохранить еще несколько символов.
Безголовая версия:
источник
Python 2, 345 байт
Жаль, что он не короче, чем у @ w0lf, но все равно. (Обратите внимание, что большие отступы - это вкладки, которые переводятся в 4 пробела при публикации).
источник
вот мой волшебный код
C (
457430b)Примечание : нужно больше улучшений ...
РЕДАКТИРОВАТЬ: код сокращен ... - sizeof (int) = 4, function = v, все еще остается некоторая переменная, заменяющая на do.
источник
sizeof
кажется, что эти звонки могут быть заменены на магический номер. Может быть, это было бы не так портативно, но эй - это кодовый гольф.v(int*M,int m){e=32;f=48;u=0;l=m;char a,
... Кроме того, почти весь этот пробел является ненужным;,V[m];for(i=0;
...)printf(
...);getch();}
.