Herr Welke hat gesagt (priv. comm.)
(* S. Welke, 14.3.2009 *)
Remove[Cantor, InverseCantor]
(* Mit dir = 0 bzw. dir = 1 wechselt man die Richtung. *)
Cantor[{x_: Integer, y_: Integer}, dir_: 0] :=
(x + y)*(x + y + 2)/2 + (-1)^(x + y + dir)*(x - y)/2;
InverseCantor[k_Integer?NonNegative, dir_Integer:0] :=
{#1, #2 - #1} &[#/2 + (-1)^(# + dir) (k - # - #^2/2), #] &[
Floor[(Sqrt[1 + 8 k] - 1)/2]]
man kann auch sagen
cantorInverseD[k_Integer?NonNegative, dir_:-1] :=
{Min[k - 2 (1 + #) (1 + # + dir/2),
2 (2 + #) (2 + # + dir/2) - k - 1] &[
Floor[(Sqrt[1 + 8 k] - 4 - dir)/4]],
Min[k - 2 (1 + #) (1 + # - dir/2),
2 (2 + #) (2 + # - dir/2) - k - 1] &[
Floor[(Sqrt[1 + 8 k] - 4 + dir)/4]]} /; (dir == -1 || dir == 1)
Gruss
Udo.