Uma função é dito que tem um ciclo de comprimento n se existe um x no seu domínio de tal modo que f n (x) = x e f m (x) ≠ x para 0 <m <n , onde o expoente n denota n - dobre a aplicação de f . Observe que um ciclo de comprimento 1 é um ponto fixo f (x) = x .
Sua tarefa é implementar uma função bijetiva dos números inteiros para si mesmos, que possui exatamente um ciclo de cada comprimento positivo n . Uma função bijetiva é uma correspondência individual, ou seja, todo número inteiro mapeado para exatamente uma vez. Tendo exactamente um ciclo de comprimento n significa que não são exactamente n números distintos x para o qual f n (x) = x e f m (x) x ≠ para 0 <m <n .
Aqui está um exemplo de como essa função pode parecer em torno de x = 0 :
x ... -7 -6 -5 -4 -3 -2 -1 0 1 2 3 4 5 6 7 ...
f(x) ... 2 4 6 -3 -1 1 -4 0 -2 5 7 -7 -6 3 -5 ...
Este trecho contém ciclos de 1 a 5 :
n cycle
1 0
2 -2 1
3 -4 -3 -1
4 -5 6 3 7
5 -7 2 5 -6 4
...
Observe que, acima, estou usando "função" apenas no sentido matemático. Você pode escrever uma função ou um programa completo no idioma de sua escolha, desde que use um único número inteiro (assinado) como entrada e retorne um único número inteiro (assinado). Como de costume, você pode receber entradas via STDIN, argumento de linha de comando, argumento de função etc. e saída via STDOUT, valor de retorno da função ou argumento da função (saída) etc.
Obviamente, muitos idiomas não suportam (facilmente) números inteiros de precisão arbitrária. Tudo bem se a sua implementação funcionar apenas no intervalo do tipo inteiro nativo do seu idioma, desde que abranja pelo menos o intervalo [-127, 127] e funcione para números inteiros arbitrários se o tipo inteiro do idioma for substituído por arbitrário- números inteiros de precisão.
Aplicam-se as regras de código-golfe padrão .