22 lines
587 B
D
22 lines
587 B
D
import std.regex, std.algorithm;
|
|
|
|
immutable uint[string] w2s;
|
|
|
|
pure nothrow static this() {
|
|
w2s = ["IX": 9, "C": 100, "D": 500, "CM": 900, "I": 1,
|
|
"XC": 90, "M": 1000, "L": 50, "CD": 400, "XL": 40,
|
|
"V": 5, "X": 10, "IV": 4];
|
|
}
|
|
|
|
uint toArabic(in string s) /*pure nothrow*/ @safe /*@nogc*/ {
|
|
return s
|
|
.matchAll("CM|CD|XC|XL|IX|IV|[MDCLXVI]".regex)
|
|
.map!(m => w2s[m.hit])
|
|
.sum;
|
|
}
|
|
|
|
void main() {
|
|
assert("MCMXC".toArabic == 1990);
|
|
assert("MMVIII".toArabic == 2008);
|
|
assert("MDCLXVI".toArabic == 1666);
|
|
}
|