From c57b74f9867933bd1f8329e288b86ec7815abbde Mon Sep 17 00:00:00 2001 From: "Dr. Matthias Ratajczak" Date: Fri, 19 Aug 2022 17:10:18 +0200 Subject: [PATCH] finish 32 --- src/euler32/Cargo.toml | 8 ++++++++ src/euler32/src/main.rs | 42 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 50 insertions(+) create mode 100644 src/euler32/Cargo.toml create mode 100644 src/euler32/src/main.rs diff --git a/src/euler32/Cargo.toml b/src/euler32/Cargo.toml new file mode 100644 index 0000000..6fdb9c9 --- /dev/null +++ b/src/euler32/Cargo.toml @@ -0,0 +1,8 @@ +[package] +name = "euler32" +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/euler32/src/main.rs b/src/euler32/src/main.rs new file mode 100644 index 0000000..41c1e6a --- /dev/null +++ b/src/euler32/src/main.rs @@ -0,0 +1,42 @@ +use std::collections::HashSet; + +type Int = u64; + +fn main() { + let f: Vec<_> = (1..10_000_u64) + .filter(|n| { + let s = n.to_string(); + let hs = s.chars().collect::>(); + hs.len() == s.len() && !hs.contains(&'0') + }) + .collect(); + + let mut result = HashSet::new(); + for f1 in &f { + for f2 in f.iter().rev() { + let p = f1 * f2; + if are_pandigital([f1, f2, &p]) { + println!("{f1} {f2} {p}"); + result.insert(p); + } + } + } + println!("{}", result.iter().sum::()); +} + +fn are_pandigital(input: [∬ 3]) -> bool { + let mut accum = HashSet::new(); + let mut length = 0; + for n in input { + let s = n.to_string(); + length += s.len(); + let hs = s.chars().collect::>(); + if s.len() != hs.len() { + return false; + } + for item in hs { + accum.insert(item); + } + } + accum.len() == 9 && length == 9 && !accum.contains(&'0') +}