Advertisement
King0fGamesYami

Roman Numerals

Jan 14th, 2016
205
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 1.21 KB | None | 0 0
  1. local numerals = {
  2.     I = 1,
  3.     V = 5,
  4.     X = 10,
  5.     L = 50,
  6.     C = 100,
  7.     D = 500,
  8.     M = 1000,
  9. }
  10.  
  11. local reverseNumerals = {}
  12. for k, v in pairs( numerals ) do
  13.     reverseNumerals[ v ] = k
  14. end
  15.  
  16. function fromRoman( s )
  17.     local num = 0
  18.     local last = 0
  19.     for value in s:upper():gmatch( "." ) do
  20.         if last < numerals[ value ] then
  21.             num = num - last * 2
  22.         end
  23.         num = num + numerals[ value ]
  24.         last = numerals[ value ]
  25.     end
  26.     return num
  27. end
  28.  
  29. function toRoman( num )
  30.     local roman = ""
  31.     num = tostring( math.floor( num ) )
  32.     local place = 10 ^ (#num - 1)
  33.     for d in num:gmatch( "." ) do
  34.         local d = tonumber( d )
  35.         if d == 9 and reverseNumerals[ place * 10 ] then
  36.             roman = roman .. reverseNumerals[ place ] .. reverseNumerals[ place * 10 ]
  37.             d = 0
  38.         elseif d > 5 and reverseNumerals[ place * 5 ] then
  39.             roman = roman .. reverseNumerals[ place * 5 ]
  40.             d = d - 5
  41.         elseif d == 4 and reverseNumerals[ place * 5 ] then
  42.             roman = roman .. reverseNumerals[ place ] .. reverseNumerals[ place * 5 ]
  43.             d = 0
  44.         elseif d == 5 and reverseNumerals[ place * 5 ] then
  45.             roman = roman .. reverseNumerals[ place * 5 ]
  46.             d = 0
  47.         end
  48.         roman = roman .. reverseNumerals[ place ]:rep( d )
  49.         place = place / 10
  50.     end
  51.     return roman
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement