diff --git a/src/euler33/Cargo.toml b/src/euler33/Cargo.toml new file mode 100644 index 0000000..dad48dc --- /dev/null +++ b/src/euler33/Cargo.toml @@ -0,0 +1,8 @@ +[package] +name = "euler33" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] diff --git a/src/euler33/src/main.rs b/src/euler33/src/main.rs new file mode 100644 index 0000000..8900f00 --- /dev/null +++ b/src/euler33/src/main.rs @@ -0,0 +1,66 @@ +fn main() { + let mut result = vec![]; + + for i in 11..100 { + if i % 10 == 0 { + continue; + } + for j in i..100 { + if j % 10 == 0 { + continue; + } + if i == j { + continue; + } + + let ifl = i as f64; + let jfl = j as f64; + + let mut ic = i.to_chars(); + let mut jc = j.to_chars(); + + let mut found_something = false; + 'outer: for i_idx in 0..=1 { + for j_idx in 0..=1 { + if ic[i_idx] == jc[j_idx] { + ic.remove(i_idx); + jc.remove(j_idx); + found_something = true; + break 'outer; + } + } + } + + if !found_something { + continue; + } + + let correct_ratio = ifl / jfl; + let wrong_ratio = + ic[0].to_digit(10).unwrap() as f64 / jc[0].to_digit(10).unwrap() as f64; + if wrong_ratio == correct_ratio { + result.push((i, j)); + } + } + } + + let mut numerator = 1.0; + let mut denominator = 1.0; + for item in result { + numerator *= item.0 as f64; + denominator *= item.1 as f64; + } + + println!("{} / {}", numerator, denominator); + println!("{}", denominator / numerator); +} + +trait ToChars { + fn to_chars(&self) -> Vec; +} + +impl ToChars for u32 { + fn to_chars(&self) -> Vec { + self.to_string().chars().collect() + } +}