Ver Mensaje Individual
  #7 (permalink)  
Antiguo 20/08/2010, 20:51
Avatar de mortiprogramador
mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 15 años, 3 meses
Puntos: 214
Respuesta: Códigos - Reto Romanos

HackmanC

Código PHP:
Ver original
  1. <?php
  2. /*
  3.  *  Class : RomanEncoder
  4.  *  Clase para convertir números arábigos decimales en representación romana.
  5.  *  Versión 1 (PHP)
  6.  */
  7. class RomanEncoder {
  8.    
  9.     public $divs = Array(
  10.          1000000 =>  "m",
  11.           900000 => "cm",
  12.           500000 =>  "d",
  13.           400000 => "cd",
  14.           100000 =>  "c",
  15.            90000 => "xc",
  16.            50000 =>  "l",
  17.            40000 => "xl",
  18.            10000 =>  "x",
  19.             9000 => "Mx",
  20.             5000 =>  "v",
  21.             4000 => "Mv",
  22.             1000 =>  "M",
  23.              900 => "CM",
  24.              500 =>  "D",
  25.              400 => "CD",
  26.              100 =>  "C",
  27.               90 => "XC",
  28.               50 =>  "L",
  29.               40 => "XL",
  30.               10 =>  "X",
  31.                9 => "IX",
  32.                5 =>  "V",
  33.                4 => "IV",
  34.                1 =>  "I"
  35.     );
  36.    
  37.     /*
  38.      *  El método es repetir cada letra o conjunto de letras tantas veces
  39.      *  como la  división entera del número entre el valor de la letra,
  40.      *  mientras se va reduciendo el número al residuo en cada ciclo.
  41.      */
  42.     public function encodeRomanNumber($number) {
  43.         $letter = '';
  44.         foreach ($this->divs as $key => $value) {
  45.             $letter .= str_repeat($value, $number / $key);
  46.             $number %= $key;
  47.         }
  48.         return $letter;
  49.     }
  50.    
  51.     private function insertHTMLstyle($letter) {
  52.         $a = '<span class=\'over\'>'; $b = '</span>';
  53.         return preg_replace('/[a-z]+/', $a . '$0' . $b, $letter);
  54.     }
  55.    
  56.     public function romanNumber() {
  57.         $a = '<span class=\'roman\'>'; $b = '</span>'; $r = rand();
  58.         return $a . number_format($r) . ' = ' .
  59.             $this->insertHTMLstyle($this->encodeRomanNumber($r)) . $b;
  60.     }
  61.    
  62. }
  63. ?>
  64. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  65.   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  66. <html xmlns="http://www.w3.org/1999/xhtml">
  67. <head>
  68. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  69. <title>Codificaci&oacute;n de N&uacute;meros Romanos</title>
  70. <style type="text/css">
  71. <!--
  72. body { font-family: Courier New, Courier, monospace; font-size: 14px; }
  73. .roman { text-transform: uppercase; }
  74. .over { text-decoration: overline; }
  75. -->
  76. </style>
  77. </head>
  78.  
  79. <body>
  80. <p><?php
  81. $a = new RomanEncoder();
  82. echo $a->romanNumber();
  83. ?>
  84. </p>
  85. </body>
  86. </html>
__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com