[ create a new paste ] login | about

Link: http://codepad.org/z7VUTiYu    [ raw code | output | fork ]

PHP, pasted on Jul 20:
<?php
function compareRomanNum($a, $b) {
    if($a == $b) return 0;

    $str = "0IVXLCDM";

    $len = max($al = strlen($a), $bl = strlen($b));
    $a .= str_repeat('0', max(0, $len-$al+1));
    $b .= str_repeat('0', max(0, $len-$bl+1));

    for($i = 0; $i < $len; $i++) {
        $a1 = $a[$i]; $b1 = $b[$i]; $a2 = $a[$i+1]; $b2 = $b[$i+1];
        
        if( strpos($str, $a1.$b1.$a2) ) return 1;
        if( strpos($str, $b1.$a1.$b2) ) return -1;

        if($a1 != $b1) return strpos($str, $a1) - strpos($str, $b1);
    }
    die(sprintf('unexpected roman numeral in (%s,%s)', $a, $b));
}

$a = array('MMV', 'MMX', 'MMIX');
print_r($a);
usort($a, 'compareRomanNum');
print_r($a);


Output:
1
2
3
4
5
6
7
8
9
10
11
12
Array
(
    [0] => MMV
    [1] => MMX
    [2] => MMIX
)
Array
(
    [0] => MMV
    [1] => MMIX
    [2] => MMX
)


Create a new paste based on this one


Comments: