45 lines
1.2 KiB
Text
45 lines
1.2 KiB
Text
import extensions;
|
|
import system'collections;
|
|
import system'routines;
|
|
|
|
static RomanDictionary = new Dictionary()
|
|
.setAt("I".toChar(), 1)
|
|
.setAt("V".toChar(), 5)
|
|
.setAt("X".toChar(), 10)
|
|
.setAt("L".toChar(), 50)
|
|
.setAt("C".toChar(), 100)
|
|
.setAt("D".toChar(), 500)
|
|
.setAt("M".toChar(), 1000);
|
|
|
|
extension op : String
|
|
{
|
|
toRomanInt()
|
|
{
|
|
var minus := 0;
|
|
var s := self.upperCase();
|
|
var total := 0;
|
|
|
|
for(int i := 0, i < s.Length, i += 1)
|
|
{
|
|
var thisNumeral := RomanDictionary[s[i]] - minus;
|
|
if (i >= s.Length - 1 || thisNumeral + minus >= RomanDictionary[s[i + 1]])
|
|
{
|
|
total += thisNumeral;
|
|
minus := 0
|
|
}
|
|
else
|
|
{
|
|
minus := thisNumeral
|
|
}
|
|
};
|
|
|
|
^ total
|
|
}
|
|
}
|
|
|
|
public program()
|
|
{
|
|
console.printLine("MCMXC: ", "MCMXC".toRomanInt());
|
|
console.printLine("MMVIII: ", "MMVIII".toRomanInt());
|
|
console.printLine("MDCLXVI:", "MDCLXVI".toRomanInt())
|
|
}
|