Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- local numerals = {
- I = 1,
- V = 5,
- X = 10,
- L = 50,
- C = 100,
- D = 500,
- M = 1000,
- }
- local reverseNumerals = {}
- for k, v in pairs( numerals ) do
- reverseNumerals[ v ] = k
- end
- function fromRoman( s )
- local num = 0
- local last = 0
- for value in s:upper():gmatch( "." ) do
- if last < numerals[ value ] then
- num = num - last * 2
- end
- num = num + numerals[ value ]
- last = numerals[ value ]
- end
- return num
- end
- function toRoman( num )
- local roman = ""
- num = tostring( math.floor( num ) )
- local place = 10 ^ (#num - 1)
- for d in num:gmatch( "." ) do
- local d = tonumber( d )
- if d == 9 and reverseNumerals[ place * 10 ] then
- roman = roman .. reverseNumerals[ place ] .. reverseNumerals[ place * 10 ]
- d = 0
- elseif d > 5 and reverseNumerals[ place * 5 ] then
- roman = roman .. reverseNumerals[ place * 5 ]
- d = d - 5
- elseif d == 4 and reverseNumerals[ place * 5 ] then
- roman = roman .. reverseNumerals[ place ] .. reverseNumerals[ place * 5 ]
- d = 0
- elseif d == 5 and reverseNumerals[ place * 5 ] then
- roman = roman .. reverseNumerals[ place * 5 ]
- d = 0
- end
- roman = roman .. reverseNumerals[ place ]:rep( d )
- place = place / 10
- end
- return roman
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement