Magische Zahlen oder Nummerologie mit PHP

Post von realloc | Einsortiert in Code am 28. Juni 2007 | Keine Kommentare

Nee, ich bin nicht neuerdings unter die Mystiker und Nummerologen gegangen. Aber die Aufgabe, die sich stellt, wenn man den eigenen Namen auf Tabellen abbildet (die einen entsprechenden Zahlencode für jeden Buchstaben enthalten) und dann noch das Geburtsdatum nimmt, um eine Quersumme zu bilden und solange durch Quersummenbildung zu kürzen, bis die Zahl zwischen 1 und 9 liegt, ist schon interessant. Oder nicht?

Also frisch ans Werk und nachgedacht: Wie bildet man am schnellsten die Quersumme? Wenn man sich noch an den Algorithmus in C für die Quersummenbildung erinnert, liegt eigentlich folgende Lösung nahe:

[code lang="php"]
function qsum ($val) {
$val = (double) $val;
$qsum = 0;
while ($val > 0) {
$qsum += $val % 10;
$val = floor ($val / 10);
}
return $qsum;
}
[/code]

Allerdings ist bei Zahlen größer 32 bit Schluß, sodaß folgende Möglichkeit eher mein Favorit ist:

[code lang="php"]
function qsum ($val) {
$val = (string) $val;
if (ereg ("^[0-9]+$", $val)) {
$qsum = 0;
for ($i = 0; $i < strlen ($val); $i++) {
$qsum += $val{$i};
}
return $qsum;
}
return 0;
}
[/code]

OK, soweit so gut. Wie geht das nun mit dem Reduzieren am Beispiel des Geburtstages?

[code lang="php"]
function reduce ($val) {
do {
$val = qsum ($val);
} while ($val > 9);
return $val;
}

function compute ($val) {
if (strlen ($val) == 10) {
$val = split ("[./-]", $val);
$temp = 0;
foreach ($val as $element) {
$temp += reduce ($element);
}
return reduce ($temp);
}
return 0;
}

echo compute ('26.06.1969'); // gibt 3 aus
[/code]

Einen Prototypen für die Berechnung der eigenen “magischen” Nummern findet ihr hier: Numerology Calculator.

Have fun!

Möglicherweise interessiert Dich auch...



Einen Kommentar schreiben