Ver Mensaje Individual
  #220 (permalink)  
Antiguo 21/08/2010, 14:44
Avatar de portalmana
portalmana
 
Fecha de Ingreso: septiembre-2007
Ubicación: Montevideo-Uruguay
Mensajes: 633
Antigüedad: 19 años
Puntos: 80
Respuesta: Reto: Números Romanos

Mira aquí tengo la que presente, pero optimizada digamos....
Para que tuviera mas velocidad elimine la clase, elimine el logaritmo y entonces el for siempre empieza por el numero 3.
El resultado es que casi duplico la velocidad de 0.06 a 0.033
Código PHP:
<?php
    $_romanos 
=     array(0   =>    array(0 => '',
                                                          
1 => 'I',
                                                          
2 => 'II',
                                                          
3 => 'III',
                                                          
4 => 'IV',
                                                          
5 => 'V',
                                                          
6 => 'VI',
                                                          
7 => 'VII',
                                                          
8 => 'VIII',
                                                          
9 => 'IX'),
                                          
1    =>   array(0 => '',
                                                          
1 => 'X',
                                                          
2 => 'XX',
                                                          
3 => 'XXX',
                                                          
4 => 'XL',
                                                          
5 => 'L',
                                                          
6 => 'LX',
                                                          
7 => 'LXX',
                                                          
8 => 'LXXX',
                                                          
9 => 'XC'),
                                          
2   =>    array(0 => '',
                                                          
1 => 'C',
                                                          
2 => 'CC',
                                                          
3 => 'CCC',
                                                          
4 => 'CD',
                                                          
5 => 'D',
                                                          
6 => 'DC',
                                                          
7 => 'DCC',
                                                          
8 => 'DCCC',
                                                          
9 => 'CM'),
                                          
3 =>      array(0 => '',
                                                          
1 => 'M',
                                                          
2 => 'MM',
                                                          
3 => 'MMM'));


    
$_divisores =    array(1, 10, 100, 1000);


    function 
decimalRomano($numero)
    {
        global 
$_romanos;
        global 
$_divisores;
        
$retorno = '';
        for (
$div = 3; $div > -1; $div--) {
            
$aux     =  (int)($numero/$_divisores[$div]);
                
$retorno.= $_romanos[$div][$aux];
                
$numero -=$_divisores[$div]*$aux;
        }
        return 
$retorno;
    }

$arr = array();
$nTotal = 30;
for(
$n=0; $n<$nTotal; $n++){
    
$start = microtime(true);
    for(
$i = 1; $i < 4000; $i++) {
        
decimalRomano($i);
    }
    
$arr[] = microtime(true)-$start;
}
echo 
array_sum($arr) / $nTotal;
Ya fue con el código que provee la vez anterior la velocidad.....
Pero me gustan las clases jejej