The Ping Pong Modulo Function

Ping Pong Paddle On Table Vector Art & Graphics | freevector.com

Earlier today I had to spend a whole 20 minutes coming up with this function. It’s like a modulo function, but instead of looping back to zero every cycle, it transitions back down to zero. It cycles every 2(n-1) elements. There’s probably a proper name for it, but I can’t figure it out.

In case anyone else would rather google it than spend time figuring it out, here it is:

def ping_pong_mod(i, n):
    cycle = 2 * (n - 1)
    i = i % cycle
    if i >= n:
        return cycle - i
    return i

I hope this is helpful to a fellow lazy person in the future.

One thought on “The Ping Pong Modulo Function”

  1. Hello, I am a lazy person and you saved me a lot of trouble, so thank you!

    In my case I wanted the “book-ends” to be repeated, like this:
    p4(x) = 0, 1, 2, 3, 3, 2, 1, 0, 0, 1, 2…

    so I had to modify it slightly:

    function ping_pong_mod(i, n){
    let cycle = 2 * n
    i = i % cycle
    if (i >= n)
    return cycle – 1 – i
    return i
    }

Leave a Reply

Your email address will not be published. Required fields are marked *