Sha256: 7f87f8639e33028781154cacaa56be9a08d6888b365f4ad653e3eb9c53a057d9

Contents?: true

Size: 1.42 KB

Versions: 395

Compression:

Stored size: 1.42 KB

Contents

use std::fmt;

static ROMAN_MAP: [(usize, &'static str); 13] = [(1, "I"),
                                                 (4, "IV"),
                                                 (5, "V"),
                                                 (9, "IX"),
                                                 (10, "X"),
                                                 (40, "XL"),
                                                 (50, "L"),
                                                 (90, "XC"),
                                                 (100, "C"),
                                                 (400, "CD"),
                                                 (500, "D"),
                                                 (900, "CM"),
                                                 (1000, "M")];

pub struct Roman {
    num: usize,
}

impl From<usize> for Roman {
    fn from(i: usize) -> Self {
        Roman::new(i)
    }
}

impl fmt::Display for Roman {
    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
        let mut start = self.num.clone();
        let mut result = String::new();
        for &(numeric, roman_string) in ROMAN_MAP.into_iter().rev() {
            while start >= numeric {
                result.push_str(roman_string);
                start = start - numeric;
            }
        }
        write!(f, "{}", result)
    }
}


impl Roman {
    fn new(num: usize) -> Roman {
        Roman { num: num }
    }
}

Version data entries

395 entries across 395 versions & 1 rubygems

Version Path
trackler-2.2.1.179 tracks/rust/exercises/roman-numerals/example.rs
trackler-2.2.1.178 tracks/rust/exercises/roman-numerals/example.rs
trackler-2.2.1.177 tracks/rust/exercises/roman-numerals/example.rs
trackler-2.2.1.176 tracks/rust/exercises/roman-numerals/example.rs
trackler-2.2.1.175 tracks/rust/exercises/roman-numerals/example.rs
trackler-2.2.1.174 tracks/rust/exercises/roman-numerals/example.rs
trackler-2.2.1.173 tracks/rust/exercises/roman-numerals/example.rs
trackler-2.2.1.172 tracks/rust/exercises/roman-numerals/example.rs
trackler-2.2.1.171 tracks/rust/exercises/roman-numerals/example.rs
trackler-2.2.1.170 tracks/rust/exercises/roman-numerals/example.rs
trackler-2.2.1.169 tracks/rust/exercises/roman-numerals/example.rs
trackler-2.2.1.167 tracks/rust/exercises/roman-numerals/example.rs
trackler-2.2.1.166 tracks/rust/exercises/roman-numerals/example.rs
trackler-2.2.1.165 tracks/rust/exercises/roman-numerals/example.rs
trackler-2.2.1.164 tracks/rust/exercises/roman-numerals/example.rs
trackler-2.2.1.163 tracks/rust/exercises/roman-numerals/example.rs
trackler-2.2.1.162 tracks/rust/exercises/roman-numerals/example.rs
trackler-2.2.1.161 tracks/rust/exercises/roman-numerals/example.rs
trackler-2.2.1.160 tracks/rust/exercises/roman-numerals/example.rs
trackler-2.2.1.159 tracks/rust/exercises/roman-numerals/example.rs