From ec598dfada63c60c06139dcb818ebff7bf00dfb5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?H=C3=A5kon=20St=C3=B8rdal?= <30749741+hakon55@users.noreply.github.com> Date: Wed, 23 Oct 2024 22:46:34 +0200 Subject: [PATCH] First commit, roman-to-integer --- roman-to-integer/Cargo.toml | 6 ++++++ roman-to-integer/src/main.rs | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 38 insertions(+) create mode 100644 roman-to-integer/Cargo.toml create mode 100644 roman-to-integer/src/main.rs diff --git a/roman-to-integer/Cargo.toml b/roman-to-integer/Cargo.toml new file mode 100644 index 0000000..c8704be --- /dev/null +++ b/roman-to-integer/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "roman-to-integer" +version = "0.1.0" +edition = "2021" + +[dependencies] diff --git a/roman-to-integer/src/main.rs b/roman-to-integer/src/main.rs new file mode 100644 index 0000000..50f7869 --- /dev/null +++ b/roman-to-integer/src/main.rs @@ -0,0 +1,32 @@ +use std::collections::HashMap; + +fn roman_to_int(s: String) -> i32 { + let mut map = HashMap::new(); + map.insert('I', 1); + map.insert('V', 5); + map.insert('X', 10); + map.insert('L', 50); + map.insert('C', 100); + map.insert('D', 500); + map.insert('M', 1000); + + let mut result = 0; + let chars: Vec = s.chars().collect(); + + for i in 0..chars.len() { + let current_value = map[&chars[i]]; + if i < chars.len() - 1 && current_value < map[&chars[i + 1]] { + result -= current_value; + } else { + result += current_value; + } + } + + result +} + +fn main() { + let roman = String::from("XXVII"); + let integer = roman_to_int(roman); + println!("The integer value is: {}", integer); +}