From fedb474b4b976643d16e6f45a880d49dcf093eba Mon Sep 17 00:00:00 2001 From: Philippe Zwietering Date: Tue, 14 Mar 2023 19:00:49 +0100 Subject: [PATCH] Finished projecteuler 086 with ugly solution but hey it works --- projecteuler/086/Cargo.lock | 7 +++++ projecteuler/086/Cargo.toml | 8 ++++++ projecteuler/086/src/main.rs | 52 ++++++++++++++++++++++++++++++++++++ 3 files changed, 67 insertions(+) create mode 100644 projecteuler/086/Cargo.lock create mode 100644 projecteuler/086/Cargo.toml create mode 100644 projecteuler/086/src/main.rs diff --git a/projecteuler/086/Cargo.lock b/projecteuler/086/Cargo.lock new file mode 100644 index 0000000..88ffcd8 --- /dev/null +++ b/projecteuler/086/Cargo.lock @@ -0,0 +1,7 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "main" +version = "0.1.0" diff --git a/projecteuler/086/Cargo.toml b/projecteuler/086/Cargo.toml new file mode 100644 index 0000000..fca4e93 --- /dev/null +++ b/projecteuler/086/Cargo.toml @@ -0,0 +1,8 @@ +[package] +name = "main" +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/projecteuler/086/src/main.rs b/projecteuler/086/src/main.rs new file mode 100644 index 0000000..f93a350 --- /dev/null +++ b/projecteuler/086/src/main.rs @@ -0,0 +1,52 @@ +use std::time::Instant; + +fn does_cuboid_have_integer_shortest_path(a: u64, b: u64, c: u64) -> bool { + assert!(a >= b); + assert!(b >= c); + + let d = a * a + (b + c).pow(2); + let root = (d as f64).sqrt() as u64; + + d == root * root +} + +fn new_solution(old_solution: u64, max_m: u64) -> u64 { + let mut current_number_of_solutions = 0; + + for h in 1..=max_m { + for w in 1..=h { + if does_cuboid_have_integer_shortest_path(max_m, h, w) { + current_number_of_solutions += 1; + } + } + } + + current_number_of_solutions + old_solution +} + +fn main() { + println!("Hello, this is Patrick!"); + let now = Instant::now(); + + let max_value = 1000000; + + let mut number_of_solutions = vec![0]; + let mut m = 1; + + while let Some(&n) = number_of_solutions.last() { + if n > max_value { + break; + } + + number_of_solutions.push(new_solution(n, m)); + m += 1; + } + + println!( + "The least value of M such that the number of solutions first exceeds {} is: {}", + max_value, + number_of_solutions.len() - 1, + ); + + println!("Time passed: {:?}", Instant::now() - now); +}