solution: day24
This commit is contained in:
parent
0000039083
commit
00000400a9
|
@ -0,0 +1,44 @@
|
|||
use aoc::helpers::to_vec;
|
||||
use itertools::Itertools;
|
||||
|
||||
fn balance(gifts: &[u64], parts: u64) -> Option<u64> {
|
||||
let part = gifts.iter().sum::<u64>() / parts;
|
||||
|
||||
// greedily search for smallest
|
||||
for i in 1..gifts.len() {
|
||||
for comb in gifts.iter().combinations(i) {
|
||||
if comb.iter().copied().sum::<u64>() == part {
|
||||
return Some(comb.iter().copied().product());
|
||||
}
|
||||
}
|
||||
}
|
||||
None
|
||||
}
|
||||
|
||||
pub fn part_one(input: &str) -> Option<u64> {
|
||||
let gifts = to_vec(input, '\n');
|
||||
balance(&gifts, 3)
|
||||
}
|
||||
pub fn part_two(input: &str) -> Option<u64> {
|
||||
let gifts = to_vec(input, '\n');
|
||||
balance(&gifts, 4)
|
||||
}
|
||||
fn main() {
|
||||
let input = &aoc::read_file("inputs", 24);
|
||||
aoc::solve!(1, part_one, input);
|
||||
aoc::solve!(2, part_two, input);
|
||||
}
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
#[test]
|
||||
fn test_part_one() {
|
||||
let input = aoc::read_file("test_inputs", 24);
|
||||
assert_eq!(part_one(&input.trim()), Some(99));
|
||||
}
|
||||
#[test]
|
||||
fn test_part_two() {
|
||||
let input = aoc::read_file("test_inputs", 24);
|
||||
assert_eq!(part_two(&input.trim()), Some(44));
|
||||
}
|
||||
}
|
|
@ -0,0 +1,10 @@
|
|||
1
|
||||
2
|
||||
3
|
||||
4
|
||||
5
|
||||
7
|
||||
8
|
||||
9
|
||||
10
|
||||
11
|
Loading…
Reference in New Issue