O gráfico da operação do módulo ( ) fica assim:
Essa é uma função muito útil, pois permite criar um comportamento de "quebra automática". No entanto, é muito complicado quando eu quero usá-lo para criar uma aparência de "saltar" entre duas paredes. O gráfico da função "rejeição" ( ) tem a seguinte aparência:
O período do gráfico de é . O período do gráfico de é , porque se move para cima por unidades e depois se move para baixo por outras unidades, antes de retornar ao local onde foi iniciado. Para ambas as funções, o valor mínimo para é 0 e o máximo é (na verdade, para a função de módulo com entradas integrais, é ). Além disso, para ambas as funções, o valor em que é 0.k y = ressalto ( x , k ) 2 k k k y k k - 1 x = 0
O desafio
Dado um número inteiro e um número inteiro positivo , retorne uma aproximação de número inteiro ou de ponto flutuante de .k y = salto ( x , k )
Isso é código-golfe , portanto, o menor envio válido (contado em bytes) vence.
Casos de teste
x, k -> bounce(x, k)
0, 14 -> 0
3, 7 -> 3
14, 14 -> 14
15, 14 -> 13
-13, 14 -> 13 (12.999997 etc would be an acceptable answer)
-14, 14 -> 14
191, 8 -> 1
192, 8 -> 0
Os pontos de bónus para um Fourier baseados abordagem em Fourier .
k % k = 0
k
.