Dada uma sequência de números inteiros ou, para ser mais específico, uma permutação de 0..N
transformar essa sequência da seguinte maneira:
- saída [x] = reverso (entrada [entrada [x]])
- repetir
Por exemplo: [2,1,0]
torna - se [0,1,2]
e invertido é [2,1,0]
. [0,2,1]
torna [0,1,2]
- se e invertido [2,1,0]
.
Exemplo 1
In: 0 1 2
S#1: 2 1 0
S#2: 2 1 0
Output: 1
Exemplo 2
In: 2 1 0
S#1: 2 1 0
Output: 0
Exemplo 3
In: 3 0 1 2
S#1: 1 0 3 2
S#2: 3 2 1 0
S#3: 3 2 1 0
Output: 2
Exemplo 4
In: 3 0 2 1
S#1: 0 2 3 1
S#2: 2 1 3 0
S#3: 2 0 1 3
S#4: 3 0 2 1
Output: 3
Sua tarefa é definir uma função (ou programa) que aceita uma permutação de números inteiros 0..N
e retorna (ou gera) o número de etapas até que ocorra uma permutação que já ocorreu. Se X
transforma para, X
então, a saída deve ser zero; Se X
transforma para Y
e Y
para X
(ou Y
), a saída deve ser 1.
Y -> Y: 0 steps
Y -> X -> X: 1 step
Y -> X -> Y: 1 step
A -> B -> C -> D -> C: 3 steps
A -> B -> C -> D -> A: 3 steps
A -> B -> C -> A: 2 steps
A -> B -> C -> C: 2 steps
A -> B -> C -> B: also 2 steps
Casos de teste:
4 3 0 1 2 -> 0 3 4 1 2 -> 4 3 2 1 0 -> 4 3 2 1 0: 2 steps
4 3 2 1 0 -> 4 3 2 1 0: 0 steps
4 3 1 2 0 -> 4 1 3 2 0 -> 4 3 2 1 0 -> 4 3 2 1 0: 2 steps
1 2 3 0 4 -> 4 1 0 3 2 -> 0 3 4 1 2 -> 4 3 2 1 0 -> 4 3 2 1 0: 3 steps
5 1 2 3 0 4 -> 0 5 3 2 1 4 -> 1 5 3 2 4 0 -> 1 4 3 2 0 5 ->
5 1 3 2 0 4 -> 0 5 3 2 1 4: 4 steps
Se o seu idioma não suporta "funções" você pode assumir que a seqüência é dado como espaços em branco lista de inteiros separados, como 0 1 2
ou 3 1 0 2
em uma única linha.
Curiosidades:
- a sequência 0,1,2,3, .., N sempre se transformará em N, ..., 3,2,1,0
- a sequência N, .., 3,2,1,0 sempre se transformará em N, .., 3,2,1,0
- a sequência 0,1,3,2, ..., N + 1, N sempre se transformará em N, ..., 3,2,1,0
Tarefa bônus : descubra uma fórmula matemática.
Regras opcionais :
- Se o primeiro índice do seu idioma for 1 em vez de 0, você poderá usar permutações
1..N
(basta adicionar um a cada número inteiro no exemplo e nos casos de teste).
3,0,1,2
deveria se transformar em2,3,0,1
Respostas:
JavaScript (ES6), 54 bytes
Experimente online!
fonte
[]
faz em uma função?g[a]
pode ser usado para acessar a propriedadea
.g
para armazenar o estado.Python 2 , 67 bytes
Experimente online!
fonte
Pitão,
1098 bytesExplicação:
Conjunto de teste .
fonte
Haskell, 52 bytes
Experimente online!
fonte
Perl 6 ,
4435 bytes-9 bytes graças a nwellnhof
Experimente online!
Explicação:
fonte
J,
332726 bytes-7 graças a bubbler
Experimente online!
como
explicação original. minha última melhoria apenas altera a peça que encontra "o índice do primeiro elemento que já vimos". agora ele usa a "peneira nub" para fazer isso em menos bytes.
Observe que toda a frase final
1<:@i.~[:({:e.}:)\
é dedicada a encontrar "o índice do primeiro elemento que já foi visto". Isso parece muito longo para conseguir isso, mas não pude jogar mais. Sugestões são bem-vindas.fonte
Gelatina , 6 bytes
Experimente online!
1 indexado.
fonte
Dyalog APL,
292827 bytesLeva matrizes em caixa. Vai treinar e explicar mais tarde.
Experimente aqui como uma suíte de testes .
fonte
Limpo , 90 bytes
Experimente online!
fonte