Day 4 part 2 brute force
This commit is contained in:
parent
02e78aea8f
commit
99b0fd06be
1 changed files with 33 additions and 7 deletions
|
@ -9,7 +9,10 @@ use nom::{
|
|||
sequence::tuple,
|
||||
IResult,
|
||||
};
|
||||
use std::{collections::HashSet, iter::FromIterator};
|
||||
use std::{
|
||||
collections::{HashMap, HashSet},
|
||||
iter::FromIterator,
|
||||
};
|
||||
|
||||
use crate::prelude::*;
|
||||
|
||||
|
@ -25,11 +28,14 @@ struct Card {
|
|||
}
|
||||
|
||||
impl Card {
|
||||
fn num_winning(&self) -> usize {
|
||||
self.has.iter().filter(|n| self.winning.contains(n)).count() as usize
|
||||
}
|
||||
|
||||
fn points(&self) -> usize {
|
||||
let num_winning = self.has.iter().filter(|n| self.winning.contains(n)).count() as u32;
|
||||
println!("{self:?} num_winning -> {num_winning}");
|
||||
if num_winning >= 1 {
|
||||
2_u64.pow(num_winning - 1) as usize
|
||||
let n = self.num_winning();
|
||||
if n >= 1 {
|
||||
2_u64.pow((n - 1) as u32) as usize
|
||||
} else {
|
||||
0
|
||||
}
|
||||
|
@ -60,7 +66,27 @@ impl AoCSolution for Day4 {
|
|||
}
|
||||
|
||||
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"#;
|
||||
println!("input:\n{input}");
|
||||
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