module MoreMath::CantorPairingFunction
def cantor_pairing(*xs)
def cantor_pairing(*xs) if xs.size == 1 and xs.first.respond_to?(:to_ary) xs = xs.first.to_ary end case xs.size when 0, 1 raise ArgumentError, "at least two arguments are required" when 2 x, y, = *xs (x + y) * (x + y + 1) / 2 + y else cantor_pairing(cantor_pairing(*xs[0..1]), *xs[2..-1]) end end