In einem Internet-Wettbewerb bin ich über die Herausforderung gestolpert, in möglichst wenig Code eine saubere Funktion zur Umrechnung von römischen Zahlen ins mittlerweile doch schon etwas länger übliche Dezimalsystem zu schreiben. Da eine meiner größten Schwächen ist, solche Herausforderungen fast blind anzunehmen, konnte ich natürlich nicht widerstehen.
Zwei Stunden später war folgende PHP-Funktion fertig:
[php]
<?php
function roman_to_decimal($roman) {
// definie the roman values
$a=array(0=>array("I"=>1, "V"=>5, "X"=>10, "L"=>50, "C"=>100, "D"=>500, "M"=>1000));
// clean up the given statement – you’ll never know…!
$roman = trim(strtoupper($roman));
// make an array out of the given statement
$x=str_split($roman);
$l=strlen($roman)-1;
// convert letters to numbers
for($y=0;$y<=$l;++$y) { $x[$y]=$a[0][$x[$y]]; }
// do the math work…
for($y=0;$y<=$l;++$y) {
if($x[$y]<$x[$y+1]) { $x[$y]*=-1; }
$r+=$x[$y];
}
// return calculated value
$decimal = "nullum";
if ($r>0) { $decimal = $r; }
return $decimal;
}
// ————————————————-
// how to use it…
// ————————————————-
$r = "MCXXX";
echo "Roman: ".$r." — Decimal: ".roman_to_decimal($r); ?>
[/php]
Zusammengeschrumpft hat die Funktion dann ca. 250 Bytes – ich persönlich fand das nicht schlecht. Andere Funktionen waren jedoch lediglich nur halb so groß! Wie soll das bloß gehen? Naja, zumindest funktioniert meine Funktion einwandfrei… ist ja auch etwas wert!
Schreibe einen Kommentar