PE 088 WIP, hard problem
This commit is contained in:
@@ -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