diff --git a/projecteuler/088/Cargo.lock b/projecteuler/088/Cargo.lock new file mode 100644 index 0000000..88ffcd8 --- /dev/null +++ b/projecteuler/088/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/088/Cargo.toml b/projecteuler/088/Cargo.toml new file mode 100644 index 0000000..fca4e93 --- /dev/null +++ b/projecteuler/088/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/088/src/main.rs b/projecteuler/088/src/main.rs new file mode 100644 index 0000000..025be90 --- /dev/null +++ b/projecteuler/088/src/main.rs @@ -0,0 +1,53 @@ +use std::time::Instant; + +fn product(v: &Vec) -> u32 { + v.iter().fold(1, |acc, &v_x| acc * v_x) +} + +fn naive_solution(k: u32) -> u32 { + todo!() +} + +// ChatGPT failing once again +fn chatgpt_solution(k: u32) -> u32 { + let mut prod = vec![2 * k; k as usize + 1]; + let mut sums = vec![2 * k; k as usize + 1]; + + prod[1] = 1; // product of a single number is 1 + sums[1] = 1; // sum of a single number is 1 + + // iterate through all possible combinations of numbers + for i in 2..k + 1 { + for j in (i..2 * k + 1).rev() { + for p in 1..=j - i { + let q = j - i - p; + if q >= i && prod[p as usize] <= j / prod[q as usize] { + let s = sums[p as usize] + q; + if s < sums[j as usize] { + sums[j as usize] = s; + prod[j as usize] = prod[p as usize] * q; + } + } + } + } + } + + sums[k as usize] +} + +fn main() { + println!("Hello, this is Patrick!"); + let now = Instant::now(); + + let max_k = 12; + + let solution = naive_solution; + let result: u32 = (2..=max_k).into_iter().map(|k| solution(k)).sum(); + + println!( + "The sum of all minimal product-sum numbers for 2 <= k <= {} is: {}", + max_k, result, + ); + + println!("Time passed: {:?}", Instant::now() - now); +}