Day 4 part 2 brute force
This commit is contained in:
parent
02e78aea8f
commit
99b0fd06be
|
@ -9,7 +9,10 @@ use nom::{
|
||||||
sequence::tuple,
|
sequence::tuple,
|
||||||
IResult,
|
IResult,
|
||||||
};
|
};
|
||||||
use std::{collections::HashSet, iter::FromIterator};
|
use std::{
|
||||||
|
collections::{HashMap, HashSet},
|
||||||
|
iter::FromIterator,
|
||||||
|
};
|
||||||
|
|
||||||
use crate::prelude::*;
|
use crate::prelude::*;
|
||||||
|
|
||||||
|
@ -25,11 +28,14 @@ struct Card {
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Card {
|
impl Card {
|
||||||
|
fn num_winning(&self) -> usize {
|
||||||
|
self.has.iter().filter(|n| self.winning.contains(n)).count() as usize
|
||||||
|
}
|
||||||
|
|
||||||
fn points(&self) -> usize {
|
fn points(&self) -> usize {
|
||||||
let num_winning = self.has.iter().filter(|n| self.winning.contains(n)).count() as u32;
|
let n = self.num_winning();
|
||||||
println!("{self:?} num_winning -> {num_winning}");
|
if n >= 1 {
|
||||||
if num_winning >= 1 {
|
2_u64.pow((n - 1) as u32) as usize
|
||||||
2_u64.pow(num_winning - 1) as usize
|
|
||||||
} else {
|
} else {
|
||||||
0
|
0
|
||||||
}
|
}
|
||||||
|
@ -60,7 +66,27 @@ impl AoCSolution for Day4 {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn part2(input: Self::Input) -> Self::Solution {
|
fn part2(input: Self::Input) -> Self::Solution {
|
||||||
0
|
let mut result = 0;
|
||||||
|
let mut copies: HashMap<usize, usize> = HashMap::new();
|
||||||
|
input.lines().for_each(|s| {
|
||||||
|
let card = card(s).unwrap().1;
|
||||||
|
println!("{}, cur result: {}", card.id, result);
|
||||||
|
let mut num_copies = 1;
|
||||||
|
if let Some(extra_copies) = copies.get(&card.id) {
|
||||||
|
num_copies += extra_copies;
|
||||||
|
}
|
||||||
|
for _ in 1..=num_copies {
|
||||||
|
for i in card.id..=(card.id + card.num_winning()) {
|
||||||
|
if let Some(n) = copies.get_mut(&i) {
|
||||||
|
*n += 1;
|
||||||
|
} else {
|
||||||
|
copies.insert(i, 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
result += num_copies
|
||||||
|
});
|
||||||
|
result
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -78,6 +104,6 @@ Card 5: 87 83 26 28 32 | 88 30 70 12 93 22 82 36
|
||||||
Card 6: 31 18 13 56 72 | 74 77 10 23 35 67 36 11"#;
|
Card 6: 31 18 13 56 72 | 74 77 10 23 35 67 36 11"#;
|
||||||
println!("input:\n{input}");
|
println!("input:\n{input}");
|
||||||
assert_eq!(Day4::part1(input.into()), 13);
|
assert_eq!(Day4::part1(input.into()), 13);
|
||||||
assert_eq!(Day4::part2(input.into()), 0);
|
assert_eq!(Day4::part2(input.into()), 30);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue