From 5470995dc2283b0d298666ccf43d3f21b61d4e49 Mon Sep 17 00:00:00 2001 From: "Dr. Matthias Ratajczak" Date: Fri, 19 Aug 2022 16:29:40 +0200 Subject: [PATCH] finish 30 --- src/euler30/Cargo.toml | 8 ++++++++ src/euler30/src/main.rs | 24 ++++++++++++++++++++++++ 2 files changed, 32 insertions(+) create mode 100644 src/euler30/Cargo.toml create mode 100644 src/euler30/src/main.rs diff --git a/src/euler30/Cargo.toml b/src/euler30/Cargo.toml new file mode 100644 index 0000000..1a85898 --- /dev/null +++ b/src/euler30/Cargo.toml @@ -0,0 +1,8 @@ +[package] +name = "euler30" +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/euler30/src/main.rs b/src/euler30/src/main.rs new file mode 100644 index 0000000..b870432 --- /dev/null +++ b/src/euler30/src/main.rs @@ -0,0 +1,24 @@ +use std::collections::HashMap; + +fn main() { + let hm: HashMap<_, _> = (0..10_u64).into_iter().map(|d| (d, d.pow(5))).collect(); + + let result: Vec<_> = (2..=10_000_000) + .into_iter() + .filter(|n| is_valid(*n, &hm)) + .collect(); + + println!("{}", result.iter().sum::()); +} + +fn sum_of_power_of_digits(x: u64, hm: &HashMap) -> u64 { + x.to_string() + .chars() + .map(|c| c.to_digit(10).unwrap() as u64) + .map(|d| hm.get(&d).unwrap()) + .sum() +} + +fn is_valid(x: u64, hm: &HashMap) -> bool { + x == sum_of_power_of_digits(x, hm) +}