Foros del Web » Programando para Internet » PHP »

Reto: Números Romanos

Estas en el tema de Reto: Números Romanos en el foro de PHP en Foros del Web. Cita: Iniciado por truman_truman A mi lo que mas me intereza es saber si mi forma de programar, es válida, ya que mi aprendizaje es ...

  #211 (permalink)  
Antiguo 21/08/2010, 11:04
Avatar de 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

Cita:
Iniciado por truman_truman Ver Mensaje
A mi lo que mas me intereza es saber si mi forma de programar, es válida, ya que mi aprendizaje es completamente autodidacta (como la mayoría) y al no tener un profesor que me guíe no sé si lo que hago es válido, osea me siento en el aire, lo hago todo a mi manera y con limites de mi conocimiento.
Eso es lo que me gustaría saber, si voy por buen camino o voy directo al fracaso jeje...
y bueno aquí, ya te pudiste comparar, ver diferentes formas de programar y claro todas son validas, a mi personalmente por el tipo de código que me gusta creo que vas bien orientado, yo soy de la idea del código entendible a simple vista y que si dentro de 6 meses lo agarras no tengas que volver a ver lo que hiciste y esto es muy importante si trabajas con mas personas, que ambas se entiendan por eso trato de respetar los estándares de codificación propuestos por ZEND...
Bueno y como pudiste ver también me gusta la orientación a objetos por las ventajas que trae a la hora de tener que escalar una aplicación...

Saludos y nos encontramos jejjeje
P.D.: Espera a ver que dicen los mas experimentados del foro....
  #212 (permalink)  
Antiguo 21/08/2010, 11:06
Colaborador
 
Fecha de Ingreso: octubre-2009
Ubicación: Tokyo - Japan !
Mensajes: 3.867
Antigüedad: 14 años, 6 meses
Puntos: 334
Respuesta: Reto: Números Romanos

como consejos truman truman... si vas a hacer una funcion especifica y esta usa un array (el cual raramente usaras en otra cosa que no sea en la funcion.. ) incluyela dentro.. asi mantienes un codigo mas ordenado. por lo demas lo veo bastante bien felicitacions ;D
__________________
More about me...
~ @rhyudek1
~ Github
  #213 (permalink)  
Antiguo 21/08/2010, 11:07
Avatar de truman_truman  
Fecha de Ingreso: febrero-2010
Ubicación: /home/user
Mensajes: 1.341
Antigüedad: 14 años, 2 meses
Puntos: 177
Respuesta: Reto: Números Romanos

Cita:
Iniciado por portalmana Ver Mensaje
y bueno aquí, ya te pudiste comparar, ver diferentes formas de programar y claro todas son validas, a mi personalmente por el tipo de código que me gusta creo que vas bien orientado, yo soy de la idea del código entendible a simple vista y que si dentro de 6 meses lo agarras no tengas que volver a ver lo que hiciste y esto es muy importante si trabajas con mas personas, que ambas se entiendan por eso trato de respetar los estándares de codificación propuestos por ZEND...
Bueno y como pudiste ver también me gusta la orientación a objetos por las ventajas que trae a la hora de tener que escalar una aplicación...

Saludos y nos encontramos jejjeje
Gracias... y con respecto a objetos , todavia no llegué ahí, apenas he visto algo pero muy por encima, no profundicé. gracias por tu opinion
__________________
la la la
  #214 (permalink)  
Antiguo 21/08/2010, 11:10
Colaborador
 
Fecha de Ingreso: octubre-2009
Ubicación: Tokyo - Japan !
Mensajes: 3.867
Antigüedad: 14 años, 6 meses
Puntos: 334
Respuesta: Reto: Números Romanos

portalmana yo tambien uso todo en estricto rigor por lo que dice zend.. solo que en esta competencia pense que si lo hacia todo normal... pues otro saldria con un codigo casi identico al mio.. asi que preferi hacer algo mas extraño y empleando metodos que no se usan habitualmente para asi aprovechar de aprender un par de cosas nuevas =)
__________________
More about me...
~ @rhyudek1
~ Github
  #215 (permalink)  
Antiguo 21/08/2010, 11:11
Avatar de truman_truman  
Fecha de Ingreso: febrero-2010
Ubicación: /home/user
Mensajes: 1.341
Antigüedad: 14 años, 2 meses
Puntos: 177
Respuesta: Reto: Números Romanos

Cita:
Iniciado por Hidek1 Ver Mensaje
como consejos truman truman... si vas a hacer una funcion especifica y esta usa un array (el cual raramente usaras en otra cosa que no sea en la funcion.. ) incluyela dentro.. asi mantienes un codigo mas ordenado. por lo demas lo veo bastante bien felicitacions ;D
Gracias por opinar, sobre el array a dentro, SI, lo puse pero la velocidad de ejecicion era mas lenta, y no tengo idea de porque... xD
__________________
la la la
  #216 (permalink)  
Antiguo 21/08/2010, 11:15
Colaborador
 
Fecha de Ingreso: octubre-2009
Ubicación: Tokyo - Japan !
Mensajes: 3.867
Antigüedad: 14 años, 6 meses
Puntos: 334
Respuesta: Reto: Números Romanos

por que creas un nuevo array por cada ejecucion .. serian 3999 array nuevos ...
puedes ganar un poco de tiempo si lo declaras como estatico

Código PHP:
Ver original
  1. static $matriz = array('foo', 'bar');

esto lo aprendi de pateketrueke, no pense que fuera tanta la diferencia de tiempo de ejecucion declarando estatico el array.
__________________
More about me...
~ @rhyudek1
~ Github
  #217 (permalink)  
Antiguo 21/08/2010, 11:19
Avatar de truman_truman  
Fecha de Ingreso: febrero-2010
Ubicación: /home/user
Mensajes: 1.341
Antigüedad: 14 años, 2 meses
Puntos: 177
Respuesta: Reto: Números Romanos

Cita:
Iniciado por Hidek1 Ver Mensaje
por que creas un nuevo array por cada ejecucion .. serian 3999 array nuevos ...
puedes ganar un poco de tiempo si lo declaras como estatico

Código PHP:
Ver original
  1. static $matriz = array('foo', 'bar');

esto lo aprendi de pateketrueke, no pense que fuera tanta la diferencia de tiempo de ejecucion declarando estatico el array.
Ya me pongo a investigar sobre eso, ya que no se lo que es.. xD gracias
__________________
la la la
  #218 (permalink)  
Antiguo 21/08/2010, 11:25
Avatar de 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

Cita:
Iniciado por truman_truman Ver Mensaje
Gracias por opinar, sobre el array a dentro, SI, lo puse pero la velocidad de ejecicion era mas lenta, y no tengo idea de porque... xD
porque si es un arreglo común cada vez que llamas a la función si este se encuentra adentro lo carga nuevamente, mientras que si esta fuera no, lo toma directamente porque ya esta cargado.....

Hidek1 por tu nombre de usuario se tiende a pensar que te encantan los códigos medio como encriptados jejejej, pero viste que igual te puse el votito, porque me gusto.....
  #219 (permalink)  
Antiguo 21/08/2010, 11:30
Avatar de truman_truman  
Fecha de Ingreso: febrero-2010
Ubicación: /home/user
Mensajes: 1.341
Antigüedad: 14 años, 2 meses
Puntos: 177
Respuesta: Reto: Números Romanos

Bueno he probado con static $db = array ( ); a dentro y afuera de la funcion y la velocidad es mas lenta del codigo original que hice

EDITO;

Bueno sigo enganchado con este reto y he hecho una nueva foncion que es aun mas rapida y cencilla que la anterior aunque está fuera de concurso,
la dejo aqui pa ver que opinan

Código PHP:
Ver original
  1. <?php
  2. $letras = array ("","M", "MM", "MMM","MMMM","MMMMM","MMMMMM","MMMMMMM","MMMMMMMM","MMMMMMMMM","","C","CC","CCC", "CD","D","DC","DCC","DCCC","CM", "","X","XX","XXX","XL","L","LX","LXX","LXXX","XC","","I","II","III","IV", "V","VI","VII","VIII","IX" );
  3. function romanNumber($cifra){
  4. global $letras;
  5. $numeros = str_split($cifra);
  6. $cant=count($numeros);
  7. $i=40-(10*$cant);
  8.  foreach($numeros as  $valor){
  9.     $rresult.= $letras[$valor+$i];
  10.      $i=$i+10;
  11. }
  12. return $rresult;
  13. }
  14. ?>
__________________
la la la

Última edición por truman_truman; 21/08/2010 a las 14:13
  #220 (permalink)  
Antiguo 21/08/2010, 14:44
Avatar de 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
  #221 (permalink)  
Antiguo 21/08/2010, 16:28
Avatar de truman_truman  
Fecha de Ingreso: febrero-2010
Ubicación: /home/user
Mensajes: 1.341
Antigüedad: 14 años, 2 meses
Puntos: 177
Respuesta: Reto: Números Romanos

es super,rapidaaaaa....!!!!, pero entonces cual es el objetivo de PHP ?? Yo supongo que algo Rapido es mejor que algo Lento... creo que algo lento sobrecarga al servidor y alentiza la pagina, y algo rapido NO....

Por favor corregime si estoy equivocado...!!!

__________________
la la la
  #222 (permalink)  
Antiguo 21/08/2010, 16:49
Avatar de 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

Esta es una opinión personal, generalmente es mejor que nuestro código ande mas veloz que lento, pero eso no es lo único que importa o cuenta. Pues si tu haces toda tu programación enfocándote en la velocidad y olvidando cosas importantes como la reusabiladad, la posibilidad de extenderlo en un futuro, la facilidad de comprensión y de la mano de esto también el mantenimiento a posterior, puede ser que en un futuro tengas que volver a re-escribir gran parte de tu código....

En fin como todo se tiene que buscar un equilibrio...
Si bien, programar orientado a objetos y con patrones de diseño quite un poco de velocidad estarás agradecido en un futuro...
De ultima la clase que presente en el reto no era lenta comparada con el resto, si bien podría haber elegido tener un rendimiento mejor jejejje

Saludos
  #223 (permalink)  
Antiguo 21/08/2010, 16:53
Avatar de truman_truman  
Fecha de Ingreso: febrero-2010
Ubicación: /home/user
Mensajes: 1.341
Antigüedad: 14 años, 2 meses
Puntos: 177
Respuesta: Reto: Números Romanos

Ok entiendo.. pero mi pregunta concreta es:
Supongamos que tenemos un script LENTO y hay 10 usuarios en linea,
Se hace mas lento si hay mas usuarios?
Osea si en lugar de 10 hay 5, todos ven mas rapido los resultados?
__________________
la la la
  #224 (permalink)  
Antiguo 21/08/2010, 17:04
Avatar de 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

y si cuanto mas rápido se ejecute se supone que vas a poder atender mas peticiones, pero lo que tenes que ver es si el tiempo de respuesta del sistema es aceptable, es decir que la interacción con el usuario sea fluida y este no tenga muchos tiempos de espera....

Yo creo que si el sistema logra esa fluidez, salvo que tengas un sitio como facebook o google o se incremente demasiado el trafico no seria un problema unos mili segundos mas....

Mira lo que hizo facebook para aumentar su velocidad :
http://www.vivaphp.com.ar/software/v...ntacion-hiphop
  #225 (permalink)  
Antiguo 21/08/2010, 17:13
Avatar de truman_truman  
Fecha de Ingreso: febrero-2010
Ubicación: /home/user
Mensajes: 1.341
Antigüedad: 14 años, 2 meses
Puntos: 177
Respuesta: Reto: Números Romanos

Bueno amigo muchas gracias, por tus respuestas, solo una ultima pregunta, supongamos que tenemos un secript optimizado para hacer remodelaciones en el futuro y todo eso... osea que es lento...
Hay alguna otra forma de hacerlo mas veloz?
Me refireo una forma externa a php, por ejemplo darle mas transeferencia mensual o algo asi...?
O poner un servidor dedicado, o como se podría lograr mas velocidad, sin tocar el php..?
__________________
la la la
  #226 (permalink)  
Antiguo 21/08/2010, 17:27
Avatar de 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

Cita:
Iniciado por truman_truman Ver Mensaje
Bueno amigo muchas gracias, por tus respuestas, solo una ultima pregunta, supongamos que tenemos un secript optimizado para hacer remodelaciones en el futuro y todo eso... osea que es lento...
Hay alguna otra forma de hacerlo mas veloz?
Me refireo una forma externa a php, por ejemplo darle mas transeferencia mensual o algo asi...?
O poner un servidor dedicado, o como se podría lograr mas velocidad, sin tocar el php..?
Y supongo que con un servidor mas rápido ya aumentara la velocidad al igual que un mayor ancho de banda ... También esta el opcode en php no estoy seguro si se llama así pero es como un precomplilado del codigo php....
Fíjate también con Zend Optimizer
  #227 (permalink)  
Antiguo 21/08/2010, 17:31
Avatar de truman_truman  
Fecha de Ingreso: febrero-2010
Ubicación: /home/user
Mensajes: 1.341
Antigüedad: 14 años, 2 meses
Puntos: 177
Respuesta: Reto: Números Romanos

Excelente ... muchas gracias por aclararme estas dudas, y ojalá se produzca otro reto , pa participar
xD
__________________
la la la
  #228 (permalink)  
Antiguo 21/08/2010, 21:00
Avatar de carlos_belisario
Colaborador
 
Fecha de Ingreso: abril-2010
Ubicación: Venezuela Maracay Aragua
Mensajes: 3.156
Antigüedad: 14 años
Puntos: 461
Respuesta: Reto: Números Romanos

Cita:
Iniciado por abimaelrc Ver Mensaje
@portalmana, bueno el de Hidek1 son if pero resumidos .

@Hidek1, Vi como lo lograste y lo entiendo. Breve explicación
$n toma los impares y de acuerdo a donde está el dígito, si es el primero 1 si es en las decenas en el 3, centengas 5 y milésimas 7, para luego jugar con los operadores ternarios.
$r toma el último valor (una forma sencilla de tomar el último valor, algo como substr pero usando el módulo, tomo nota ). Y con la combinación de la división que haces en el for tomas bien fácil el valor, porque la forma como usaste el módulo toma valores enteros y en específico el valor de 10 o menos, por lo tanto el último.
Por último múltiples operadores ternarios, que es bien similar a los if que hice y que la explicación la tengo en mi código.

Edito:
@carlos_belisario, eso es dividir, se conoce como operadores combinados. Lee este material http://www.php.net/manual/en/languag...assignment.php
gracias yo lo habia echo con la suma pero nunk lo ha ia visto en un for por eso lo pregunte voy a investigar un pokito mas gracias por la explicacion
__________________
aprende d tus errores e incrementa tu conocimientos
it's not a bug, it's an undocumented feature By @David
php the right way
  #229 (permalink)  
Antiguo 22/08/2010, 21:58
Avatar de dedydamy  
Fecha de Ingreso: marzo-2010
Ubicación: Aca :D
Mensajes: 78
Antigüedad: 14 años, 1 mes
Puntos: 4
Respuesta: Reto: Números Romanos

y, cual sera el prximo reto???
__________________
http://dedydamy.com/
  #230 (permalink)  
Antiguo 23/08/2010, 11:25
Avatar de truman_truman  
Fecha de Ingreso: febrero-2010
Ubicación: /home/user
Mensajes: 1.341
Antigüedad: 14 años, 2 meses
Puntos: 177
Respuesta: Reto: Números Romanos

Cita:
Iniciado por dedydamy Ver Mensaje
y, cual sera el prximo reto???
Yo propuse hacer un sudoku para ver que pensaban pero nadie respondió xD. Habría que ver si es posible o si es un reto atractivo o no
__________________
la la la
  #231 (permalink)  
Antiguo 23/08/2010, 11:28
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años
Puntos: 1517
Respuesta: Reto: Números Romanos

Es que ya hay un demo en el área de aportes.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #232 (permalink)  
Antiguo 23/08/2010, 11:29
Avatar de truman_truman  
Fecha de Ingreso: febrero-2010
Ubicación: /home/user
Mensajes: 1.341
Antigüedad: 14 años, 2 meses
Puntos: 177
Respuesta: Reto: Números Romanos

Cita:
Iniciado por abimaelrc Ver Mensaje
Es que ya hay un demo en el área de aportes.
Ah..!!! con razon nadie me contestó jajaj xDDDD
__________________
la la la
  #233 (permalink)  
Antiguo 23/08/2010, 12:09
Colaborador
 
Fecha de Ingreso: octubre-2009
Ubicación: Tokyo - Japan !
Mensajes: 3.867
Antigüedad: 14 años, 6 meses
Puntos: 334
Respuesta: Reto: Números Romanos

sacaron el stick...
termino la competencia ya ?
__________________
More about me...
~ @rhyudek1
~ Github
  #234 (permalink)  
Antiguo 23/08/2010, 14:06
Avatar de truman_truman  
Fecha de Ingreso: febrero-2010
Ubicación: /home/user
Mensajes: 1.341
Antigüedad: 14 años, 2 meses
Puntos: 177
Respuesta: Reto: Números Romanos

Cita:
Iniciado por Hidek1 Ver Mensaje
sacaron el stick...
termino la competencia ya ?
SI, ganaste Campeon felicitaciones..!!!! xD
__________________
la la la
  #235 (permalink)  
Antiguo 23/08/2010, 16:39
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 1 mes
Puntos: 2534
Respuesta: Reto: Números Romanos

Cita:
Iniciado por truman_truman Ver Mensaje
SI, ganaste Campeon felicitaciones..!!!! xD
Hidek1, grrr...
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #236 (permalink)  
Antiguo 23/08/2010, 18:50
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años
Puntos: 1517
Respuesta: Reto: Números Romanos

En las próximas competencias el que está vetado es Hidek1
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #237 (permalink)  
Antiguo 24/08/2010, 06:54
Colaborador
 
Fecha de Ingreso: octubre-2009
Ubicación: Tokyo - Japan !
Mensajes: 3.867
Antigüedad: 14 años, 6 meses
Puntos: 334
Respuesta: Reto: Números Romanos

Cita:
Iniciado por abimaelrc
En las próximas competencias el que está vetado es Hidek1
o.o !!!! nooo yo quiero participar :(
__________________
More about me...
~ @rhyudek1
~ Github
  #238 (permalink)  
Antiguo 24/08/2010, 07:28
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años
Puntos: 1517
Respuesta: Reto: Números Romanos

Solo se permiten dos primer lugar por participante.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #239 (permalink)  
Antiguo 24/08/2010, 07:43
Colaborador
 
Fecha de Ingreso: octubre-2009
Ubicación: Tokyo - Japan !
Mensajes: 3.867
Antigüedad: 14 años, 6 meses
Puntos: 334
Respuesta: Reto: Números Romanos

Cita:
Iniciado por abimaelrc Ver Mensaje
Solo se permiten dos primer lugar por participante.
awwaujwaaw

es enserio ?
__________________
More about me...
~ @rhyudek1
~ Github
  #240 (permalink)  
Antiguo 24/08/2010, 11:43
Avatar de truman_truman  
Fecha de Ingreso: febrero-2010
Ubicación: /home/user
Mensajes: 1.341
Antigüedad: 14 años, 2 meses
Puntos: 177
Respuesta: Reto: Números Romanos

Cita:
Iniciado por abimaelrc Ver Mensaje
Solo se permiten dos primer lugar por participante.
NO me parece bien, yo creo que tendría que participar, ya que es un nuevo reto
__________________
la la la

Etiquetas: reto
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 8 personas




La zona horaria es GMT -6. Ahora son las 17:50.