Advertisement
nRikee

NOFUNCA[Kata] Conversor de romanos a números

Jan 21st, 2014
138
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 3.14 KB | None | 0 0
  1. --[[-------------------------------------------------
  2.     CÓDIGO DE NÚMERO A ROMANO
  3. -------------------------------------------------]]--
  4.  
  5. function getSimbolo ( n, zeros )
  6.     n     = n + 0
  7.     zeros    = zeros + 0
  8.     if n == 1 then  
  9.         if  zeros == 0 then return "I" end  
  10.         if  zeros == 1 then return "X" end  
  11.         if  zeros == 2 then return "C" end  
  12.         if  zeros == 3 then return "M" end
  13.     end
  14.     if n == 2 then return "II"  end
  15.     if n == 3 then return "III" end
  16.     if n == 4 then return "I" .. getSimbolo ( 5, zeros ) end
  17.     if n == 5 then
  18.         if  zeros == 0 then return "V" end  
  19.         if  zeros == 1 then return "L" end  
  20.         if  zeros == 2 then return "D" end  
  21.     end
  22.     if n == 6 then return getSimbolo ( 5, zeros ) .. "I"       end
  23.     if n == 7 then return getSimbolo ( 5, zeros ) .. "II"      end
  24.     if n == 8 then return getSimbolo ( 5, zeros ) .. "III"     end
  25.     if n == 9 then return getSimbolo ( 1, zeros ) .. getSimbolo ( 1, zeros+1 )     end
  26.     return "asd"
  27. end
  28.  
  29. function toRoman( n )
  30.     resposta     = ""
  31.     ntext         = n .. ""
  32.     index         = #ntext-1
  33.  
  34.     if #ntext < 1 then return "" end        -- Si es negatiu o cero
  35.     for i = 1, #ntext do
  36.         resposta    = resposta .. "" .. getSimbolo ( string.sub ( ntext, i, i ) , index )
  37.         index         = index - 1
  38.     end
  39.     return resposta
  40. end
  41.  
  42. --[[-------------------------------------------------
  43.     CÓDIGO DE ROMANO A NÚMERO
  44. -------------------------------------------------]]--
  45. function getWeight ( chr )
  46.     if chr == 'I' then return 1    end
  47.     if chr == 'V' then return 5    end
  48.     if chr == 'X' then return 10    end
  49.     if chr == 'L' then return 50    end
  50.     if chr == 'C' then return 100    end
  51.     if chr == 'D' then return 500    end
  52.     if chr == 'M' then return 1000    end
  53.     return 0
  54. end
  55.  
  56. function convert ( romano )
  57.     result = 0
  58.     for i = 1, (#romano-1) do
  59.         a    = getWeight ( string.sub ( romano, i, i ) )
  60.         b     = getWeight ( string.sub ( romano, i + 1 , i + 1 ) )
  61.         aux = 0
  62.         if  a < b then    
  63.         aux = - a
  64.         else
  65.         aux =   a  
  66.         end
  67.         result = result + aux
  68.     end
  69.     result = result + getWeight ( string.sub ( romano, #romano, #romano ) ) -- última iteración
  70.     return result
  71. end
  72.  
  73.  
  74. --[[-------------------------------------------------
  75.     PRUEBAS DE ROMANO A NÚMERO
  76. -------------------------------------------------]]--
  77.  
  78. num = "MCMXCIX"
  79. print ( "\n\n\t" .. num .. " -> " .. convert ( num ) .. "\n" )
  80.  
  81. num = "CXCIII"
  82. print ( "\n\n\t" .. num .. " -> " .. convert ( num ) .. "\n" )
  83.  
  84. num = "XIV"
  85. print ( "\n\n\t" .. num .. " -> " .. convert ( num ) .. "\n" )
  86.  
  87. --[[-------------------------------------------------
  88.     PRUEBAS DE NÚMERO A ROMANO
  89. -------------------------------------------------]]--
  90. num = "1999"
  91. print ( "\n\n\t" .. num .. " -> " .. toRoman ( num ) .. "\n" )
  92.  
  93. num = "193"
  94. print ( "\n\n\t" .. num .. " -> " .. toRoman ( num ) .. "\n" )
  95.  
  96. num = "14"
  97. print ( "\n\n\t" .. num .. " -> " .. toRoman ( num ) .. "\n" )
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement