Você deve escrever um programa ou função que dê uma ordem inicial de números inteiros positivos distintos de um dígito e o comprimento da faixa como saída de entrada ou retorne a ordem final dos números.
A entrada [5,1,2,6,7] and 14
define a seguinte corrida:
--------------
76215 ->
--------------
Regras da corrida
- A faixa envolve e os dígitos podem dar várias voltas.
- A ordem das etapas é cíclica e baseada na posição inicial. No nosso exemplo
5 1 2 6 7 5 1 2 ...
. - Não pode haver vários dígitos na mesma posição.
Cada dígito tem uma velocidade de
digit_value
célula por etapa. Ultrapassar um dígito ou um bloco contínuo de dígitos custa uma etapa extra. Se o dígito não tiver a velocidade necessária para isso, ele será interrompido antes do (bloco de) dígito (s). Exemplos:[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
Cada dígito tem que ir
digit_value
voltas antes de terminar. Uma volta é completada quando a última célula da pista é deixada. Um dígito finalizado é removido da faixa.- Observe que um dígito pode alcançar sua posição inicial várias vezes através de uma etapa e concluir várias voltas.
Entrada
- Uma lista de números inteiros positivos distintos de um dígito (
1..9
) com pelo menos um elemento e um único número inteiro positivo, maior que o comprimento da lista, o comprimento da faixa.
Resultado
- Uma lista de dígitos na ordem em que foram finalizados em qualquer formato inequívoco.
Exemplos
Um exemplo visual passo a passo para a entrada 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
Exemplos em formato 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]
Este é o código-golfe, portanto a entrada mais curta vence.
fonte
Respostas:
Rubi 229
236Esta é uma função que aceita dois parâmetros: uma matriz que representa os dígitos e uma int que representa o comprimento da faixa. Retorna uma matriz, representando a ordem em que os dígitos terminam a corrida.
Teste on-line: http://ideone.com/KyX5Yu
Edit: Descobri alguns truques para economizar mais alguns caracteres.
Versão não destruída:
fonte
Python 2, 345 bytes
Pena que não é menor do que @ w0lf, mas o que quer. (Observe que os recuos grandes são guias, que são convertidos em quatro espaços quando eu postar.)
fonte
aqui está o meu código acolchoado mágico
C (
457430b)Nota : precisa de mais melhorias ...
EDIT: código encurtado ... - sizeof (int) = 4, function = v, ainda permanece alguma variável a ser substituída.
fonte
sizeof
parecem poder ser substituídas por um número mágico. Talvez não fosse tão portátil, mas ei - isso é código de golfe.v(int*M,int m){e=32;f=48;u=0;l=m;char a,
... Além disso, quase todo esse espaço em branco é desnecessário;,V[m];for(i=0;
...)printf(
...);getch();}
.