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: 16 años, 7 meses
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(=> '',
                                                          
=> 'I',
                                                          
=> 'II',
                                                          
=> 'III',
                                                          
=> 'IV',
                                                          
=> 'V',
                                                          
=> 'VI',
                                                          
=> 'VII',
                                                          
=> 'VIII',
                                                          
=> 'IX'),
                                          
1    =>   array(=> '',
                                                          
=> 'X',
                                                          
=> 'XX',
                                                          
=> 'XXX',
                                                          
=> 'XL',
                                                          
=> 'L',
                                                          
=> 'LX',
                                                          
=> 'LXX',
                                                          
=> 'LXXX',
                                                          
=> 'XC'),
                                          
2   =>    array(=> '',
                                                          
=> 'C',
                                                          
=> 'CC',
                                                          
=> 'CCC',
                                                          
=> 'CD',
                                                          
=> 'D',
                                                          
=> 'DC',
                                                          
=> 'DCC',
                                                          
=> 'DCCC',
                                                          
=> 'CM'),
                                          
=>      array(=> '',
                                                          
=> 'M',
                                                          
=> 'MM',
                                                          
=> 'MMM'));


    
$_divisores =    array(1101001000);


    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