PE 088 WIP, hard problem
This commit is contained in:
18
projecteuler/088/Cargo.lock
generated
18
projecteuler/088/Cargo.lock
generated
@@ -2,6 +2,24 @@
|
||||
# It is not intended for manual editing.
|
||||
version = 3
|
||||
|
||||
[[package]]
|
||||
name = "autocfg"
|
||||
version = "1.1.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
|
||||
|
||||
[[package]]
|
||||
name = "main"
|
||||
version = "0.1.0"
|
||||
dependencies = [
|
||||
"num-traits",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "num-traits"
|
||||
version = "0.2.15"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd"
|
||||
dependencies = [
|
||||
"autocfg",
|
||||
]
|
||||
|
||||
@@ -6,3 +6,4 @@ edition = "2021"
|
||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||
|
||||
[dependencies]
|
||||
num-traits = "0.2.15"
|
||||
|
||||
@@ -1,15 +1,39 @@
|
||||
use std::time::Instant;
|
||||
use num_traits::{identities::One, Num};
|
||||
use std::{
|
||||
cmp::min,
|
||||
collections::{hash_map::RandomState, HashSet},
|
||||
time::Instant,
|
||||
};
|
||||
|
||||
fn product(v: &Vec<u32>) -> u32 {
|
||||
v.iter().fold(1, |acc, &v_x| acc * v_x)
|
||||
fn product<T: Num + Copy>(v: &Vec<T>) -> T {
|
||||
v.iter().fold(One::one(), |acc, &v_x| acc * v_x)
|
||||
}
|
||||
|
||||
fn naive_solution(k: u32) -> u32 {
|
||||
todo!()
|
||||
let max_ps = 2 * k;
|
||||
let mut numbers = vec![1; k as usize];
|
||||
let mut result = u32::MAX;
|
||||
let mut idx = k as usize - 1;
|
||||
|
||||
while numbers[0] <= k {
|
||||
let p = product(&numbers);
|
||||
let s = numbers.iter().sum::<u32>();
|
||||
|
||||
if p == s {
|
||||
result = min(result, p);
|
||||
return result;
|
||||
} else if p > max_ps || s > max_ps {
|
||||
idx -= 1;
|
||||
} else {
|
||||
numbers[idx] += 1;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
// ChatGPT failing once again
|
||||
fn chatgpt_solution(k: u32) -> u32 {
|
||||
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];
|
||||
|
||||
@@ -40,9 +64,11 @@ fn main() {
|
||||
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();
|
||||
|
||||
let results: Vec<u32> = ((2..=max_k).into_iter().map(|k| solution(k))).collect();
|
||||
let hash_results: HashSet<u32, RandomState> = HashSet::from_iter(results.into_iter());
|
||||
let result: u32 = hash_results.into_iter().sum();
|
||||
|
||||
println!(
|
||||
"The sum of all minimal product-sum numbers for 2 <= k <= {} is: {}",
|
||||
|
||||
Reference in New Issue
Block a user