Last active
March 29, 2019 15:12
-
-
Save optyler/192afaf10dcc830983a3f4f40f69a506 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class RomanConverter { | |
final static def VALUES = [ | |
'I': 1, | |
'V': 5, | |
'X': 10, | |
'L': 50, | |
'C': 100, | |
'D': 500, | |
'M': 1000 | |
]; | |
final static def romanToArabic(String roman = "") { | |
if (roman == null || roman.isEmpty()) { | |
return null; | |
} | |
def number = roman.toUpperCase() | |
if (! number.every { d -> VALUES.any { k, v -> d == k }}) { | |
return null; | |
} | |
if(number.length() == 1) return VALUES.get(number[0], null) | |
def n1, n2 | |
def total = 0 | |
def c = 0 | |
while (c < number.length()) { | |
n1 = VALUES.getAt(number[c]) | |
if (c+1 < number.length()) { | |
n2 = VALUES.getAt(number[c+1]) | |
if (n1 >= n2) { | |
total += n1 | |
c += 1 | |
} else { | |
total += n2 - n1 | |
c += 2 | |
} | |
} | |
else { | |
total += n1 | |
c += 1 | |
} | |
} | |
return total | |
} | |
final static def arabicToRoman(String number) { } | |
} | |
assert RomanConverter.romanToArabic(null) == null | |
assert RomanConverter.romanToArabic("") == null | |
assert RomanConverter.romanToArabic("invalid") == null | |
assert RomanConverter.romanToArabic("I") == 1 | |
assert RomanConverter.romanToArabic("IV") == 4 | |
assert RomanConverter.romanToArabic("VI") == 6 | |
assert RomanConverter.romanToArabic("IX") == 9 | |
assert RomanConverter.romanToArabic("ix") == 9 | |
assert RomanConverter.romanToArabic("X") == 10 | |
assert RomanConverter.romanToArabic("MCMXC") == 1990 | |
assert RomanConverter.romanToArabic("MCMXCI") == 1991 | |
assert RomanConverter.romanToArabic("MCMXCII") == 1992 | |
assert RomanConverter.romanToArabic("MCMXCIII") == 1993 | |
assert RomanConverter.romanToArabic("MCMXCIV") == 1994 | |
assert RomanConverter.romanToArabic("MCMXCV") == 1995 | |
assert RomanConverter.romanToArabic("MCMXCVI") == 1996 | |
assert RomanConverter.romanToArabic("MCMXCVII") == 1997 | |
assert RomanConverter.romanToArabic("MCMXCVIII") == 1998 | |
assert RomanConverter.romanToArabic("MCMXCIX") == 1999 | |
assert RomanConverter.romanToArabic("MM") == 2000 | |
assert RomanConverter.romanToArabic("MMI") == 2001 | |
assert RomanConverter.romanToArabic("MMII") == 2002 | |
assert RomanConverter.romanToArabic("MMIII") == 2003 | |
assert RomanConverter.romanToArabic("MMIV") == 2004 | |
assert RomanConverter.romanToArabic("MMV") == 2005 | |
assert RomanConverter.romanToArabic("MMVI") == 2006 | |
assert RomanConverter.romanToArabic("MMVII") == 2007 | |
assert RomanConverter.romanToArabic("MMVIII") == 2008 | |
assert RomanConverter.romanToArabic("MMIX") == 2009 | |
assert RomanConverter.romanToArabic("MMX") == 2010 | |
assert RomanConverter.romanToArabic("MMMM") == 4000 | |
assert RomanConverter.romanToArabic("MMMMCMXCIX") == 4999 | |
println("End") |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment