Dank der Unendlichkeit der natürlichen Zahlen ist dies tatsächlich einwandfrei mathematisch lösbar, bekannt als
Cantorsche Paarungsfunktion (mit der man sogar beliebig viele natürliche Zahlen auf eine einzige umkehrbar abbilden kann).
http://upload.wikimedia.org/math/7/9...63de70c533.png
Beispiel: du willst (5,3) speichern. Das wäre dann einfach ((5 + 3) * (5 + 3 + 1)) / 2 + 3 = 39.
Zur Umkehrung benötigt man zwei Funktionen:
http://upload.wikimedia.org/math/e/3...20ce9955d8.png
http://upload.wikimedia.org/math/8/0...db720a87fe.png
Zunächst sucht man nun (durch ausprobieren?) die größte Zahl i (oben dargestellt durch die Funktion q), für die gilt f(i) <= 39. i ist in unserem Fall 8. Dann ist y = 39 - f(8) = 39 - 36 = 3.
x ergibt sich aus i - y = 8 - 3 = 5.
Noch Fragen
?
edit: und unter o.g. Link findet man sogar noch Pascal-Code für die Umkehrfunktion:
Delphi-Quellcode:
procedure CantorPair( I : Integer;
Var X,Y : Integer);
{ Gibt das i-te Paar (X,Y) in Diagonalabzaehlung zurueck }
var
J : Integer;
function F(Z : Integer) : Integer;
begin
F := Z * (Z + 1) div 2
end;
function Q(Z : Integer) : Integer;
var
V : Integer;
begin
V := 0;
while F(V) <= Z do
V := V + 1;
Q := V - 1
end;
begin
J := Q(I);
Y := I - F(J);
X := J - Y;
end;
Leo S.