Archive for the ‘temporäre Variable’ tag
Zwei Variablenwerte tauschen
Gestern bin ich auf eine interessante Aufgabe gestossen. Eigentlich war es ein sehr einfacher Test bei einem Bewerbungsgespräch an einen Software-Entwickler-Kandidaten. Die Aufgabe lautete:
„Du hast 2 Variablen mit 2 Werten belegt. Tausche die beiden Werte schnell und effektiv aus.“
Die Erwartung war: Wenn der Kandidat nicht sofort anfängt, eine temporäre dritte Variable zu erstellen, hat er sehr wenig Programmiererfahrung.
$a = 5; $b = 13; $c = $a; $a = $b; $b = $c;
Doch wenn man genauer überlegt, gibt es viele weitere Lösungen, um die Aufgabe zu bewältigen, auch ohne eine dritte Variable. Hier ein paar schöne Lösungen:
$a = 5; $b = 13; $a += $b; $b = $a - $b; $a -= $b;
Bei dem obigen Beispiel gab es eine kleine Diskussion, ob ein Integer-Overflow Probleme machen könnte, dem ist aber nicht so.
$a = 5; $b = 13; $a ^= $b; $b ^= $a; $a ^= $b;
Tricky, aber funktioniert: mit der XOR Funktion klappt es wunderbar. Achtung: Hier wir das bitweise XOR verwendet, nicht das logische XOR.
Aber aufgepasst: Die obigen zwei Lösungen funktionieren nur mit ganzzahligen Werten! Stünden in den Variablen Strings, Objekte, Arrays oder sonstwas drin, würden die Lösungen scheitern. Und streng genommen ist in der Aufgabenstellung nirgends von Zahlen die Rede.
Hier noch ein Beispiel, das mit nur einer Zeile auskommt und jegliche Werte tauschen kann:
$a = 5; $b = 13; list($a, $b) = array($b, $a);
—————-
Edit:
Lösung von Tyco aus den Kommentaren:
$a = 5; $b = 13; $b = $b + $a – ($a = $b);
—————-
Es gibt also auch Lösungen, die ohne eine temporäre dritte Variable auskommen. Von der Lesbarkeit und Wartbarkeit sind die erste und die vierte Lösung wohl auch vorn.
Wer kann noch weitere schöne Lösungen beisteuern?