From a47d72f8cca66b1c96be02069c1407d53d31b48c Mon Sep 17 00:00:00 2001 From: "Dr. Matthias Ratajczak" Date: Tue, 20 Jun 2023 14:53:17 +0200 Subject: [PATCH] add 92 --- src/euler92/Cargo.toml | 9 +++++++++ src/euler92/src/main.rs | 38 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 47 insertions(+) create mode 100644 src/euler92/Cargo.toml create mode 100644 src/euler92/src/main.rs diff --git a/src/euler92/Cargo.toml b/src/euler92/Cargo.toml new file mode 100644 index 0000000..93ea1b7 --- /dev/null +++ b/src/euler92/Cargo.toml @@ -0,0 +1,9 @@ +[package] +name = "euler92" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[profile.release] +lto = "fat" diff --git a/src/euler92/src/main.rs b/src/euler92/src/main.rs new file mode 100644 index 0000000..24c4785 --- /dev/null +++ b/src/euler92/src/main.rs @@ -0,0 +1,38 @@ +const MAXIMUM: usize = 10_000_000; + +fn main() { + let mut arrives_at_89 = 0; + + for i in 1..MAXIMUM { + let mut number = i; + loop { + let sum: usize = number + .to_digits() + .into_iter() + .map(|d| d.pow(2) as usize) + .sum(); + if sum == 89 { + arrives_at_89 += 1; + break; + } else if sum == 1 { + break; + } + number = sum; + } + } + + println!("{arrives_at_89}"); +} + +trait ToDigits { + fn to_digits(&self) -> Vec; +} + +impl ToDigits for usize { + fn to_digits(&self) -> Vec { + self.to_string() + .chars() + .map(|c| c.to_digit(10).unwrap() as _) + .collect() + } +}