Das Diagramm der Modulo-Operation ( ) sieht folgendermaßen aus:
Dies ist eine sehr nützliche Funktion, da wir so ein "Wrapping" -Verhalten erzeugen können. Es ist jedoch sehr umständlich, wenn ich es verwenden möchte, um eine Erscheinung des "Springens" zwischen zwei Wänden zu erzeugen. Der Graph der "Bounce" -Funktion ( ) sieht folgendermaßen aus:
Die Periode des Graphen von ist . Die Periode des Graphen von ist , weil es sich für Einheiten nach oben und dann für andere Einheiten nach unten bewegt , bevor es zu seinem Ausgangspunkt zurückkehrt. Für beide Funktionen ist der Minimalwert für 0 und der Maximalwert ist (tatsächlich ist er für die Modulfunktion mit integralen Eingängen ). Außerdem ist für beide Funktionen der Wert, bei dem ist, 0.
Die Herausforderung
Geben Sie bei einer Ganzzahl und einer positiven Ganzzahl eine Ganzzahl- oder Gleitkommanäherung von .
Dies ist Code-Golf , also gewinnt die kürzeste gültige Übermittlung (in Bytes gezählt).
Testfälle
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
Bonuspunkte für einen Fourier- basierten Ansatz in Fourier .
k % k = 0
k
.