28 lines
658 B
Swift
28 lines
658 B
Swift
extension Int {
|
|
init(romanNumerals: String) {
|
|
let values = [
|
|
( "M", 1000),
|
|
("CM", 900),
|
|
( "D", 500),
|
|
("CD", 400),
|
|
( "C", 100),
|
|
("XC", 90),
|
|
( "L", 50),
|
|
("XL", 40),
|
|
( "X", 10),
|
|
("IX", 9),
|
|
( "V", 5),
|
|
("IV", 4),
|
|
( "I", 1),
|
|
]
|
|
|
|
self = 0
|
|
var raw = romanNumerals
|
|
for (digit, value) in values {
|
|
while raw.hasPrefix(digit) {
|
|
self += value
|
|
raw.removeFirst(digit.count)
|
|
}
|
|
}
|
|
}
|
|
}
|