Introdução
A sequência de comutação é definida da seguinte forma:
Comece com n
pessoas em círculo ( 6
neste exemplo).
1 2
6 3
5 4
A partir de pessoa 1
, a pessoa que está à esquerda da pessoa "escolhida" é removida.
1
6 3
5 4
A pessoa removida pode "alternar" o método de remoção:
- Se a pessoa removida for par (o que é neste caso), a próxima pessoa removida estará à direita da próxima pessoa "escolhida".
- Se a pessoa removida for ímpar, a próxima pessoa removida estará à esquerda da próxima pessoa "escolhida".
A próxima pessoa escolhida também depende da pessoa removida anteriormente.
- Se a pessoa removida for par, a próxima pessoa escolhida estará à direita da pessoa escolhida anterior.
- Se a pessoa removida for estranha, veja acima, mas substitua "direita" por "esquerda".
Então a próxima pessoa escolhida é então 6
.
Agora removemos a pessoa à direita de 6
, que é 5
:
1
6 3
4
Como 5
é estranho, a pessoa removida está agora à esquerda. A nova pessoa escolhida é 1
.
Agora removemos 3
:
1
6
4
Continuamos esse processo, até termos 1 número - neste exemplo, o número final é 1
. Então, portanto S(6) = 1
.
Os primeiros números são:
n | S(n)
---------
1 | 1
2 | 1
3 | 3
4 | 1
5 | 5
6 | 1
7 | 3
8 | 6
9 | 5
10 | 6
11 | 9
Tarefa
Sua tarefa é criar um programa (ou uma função) que retorne S(n)
(o n
número th na sequência de comutação) quando fornecido n
, usando a menor quantidade de bytes.
Exemplos de entradas e saídas:
1 -> 1
10 -> 6
13 -> 13
Você está garantido para obter um número inteiro positivo.
Isso é código-golfe , então o código mais curto em bytes vence!
Nota: Não há sequência OEIS (o quê?), Para poupar o trabalho de pesquisar.
2
nunca permanece, mas permanece7
?Respostas:
Python 2,
18394 bytes-4 bytes graças ao Artyer (use
input()
eprint
nãodef
ereturn
)-1 byte graças ao FlipTack (use
print-~p[0]
ao invés deprint p[0]+1
)repl.it
Isso segue apenas as instruções dadas, notei algum padrão, talvez ele possa ser explorado?
As únicas alterações são:
0
indexação baseada (para que as pessoas sejam ímpares e vice-versa) - economiza 5 bytes na lógica do golfe e é corrigido no final com+1
1
esquerda e da-1
direita (para usar um intervalo - assim como todo mundo está voltado para o exterior)pop
lista, fazendo com que o índice "ponteiro" já esteja na primeira à direita na lista (ou à esquerda na terminologia original).Ungolfed:
fonte
print-~p[0]
?