1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
pub mod roman {
pub trait Roman {
fn roman(&self) -> String;
}
impl Roman for &str {
fn roman(&self) -> String {
let mut ord: i64;
let mut min_ord: String = String::new();
let mut encoded: Vec<String> = Vec::new();
let alphabet: Vec<(&str, i64)> =
vec![("M'", 1_000_000), ("C'M'", 900_000),
("D'", 500_000), ("C'D'", 400_000),
("C'", 100_000), ("X'C'", 90_000),
("L'", 50_000), ("X'L'", 40_000),
("X'", 10_000), ("MX'", 9000),
("V'", 5000), ("MV'", 4000),
("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)];
for c in self.chars() {
ord = c as i64;
for (symbol, value) in &alphabet {
while value <= &ord {
min_ord += symbol;
ord -= value;
}
}
encoded.push(min_ord);
min_ord = String::new();
}
return encoded.join(" ");
}
}
}