diff --git a/src/bin/p03.rs b/src/bin/p03.rs index e6b647a..e8a5af5 100644 --- a/src/bin/p03.rs +++ b/src/bin/p03.rs @@ -46,7 +46,7 @@ fn part1(lines: &[String]) { .expect("Expected at least one duplicate item"); let priority = to_priority(outlier).unwrap(); - println!("{} ({})", outlier, priority); + dbg!(outlier, priority); sum += priority; left_set.clear(); @@ -56,9 +56,35 @@ fn part1(lines: &[String]) { println!("Sum: {}", sum); } -fn part2(_lines: &[String]) {} +fn part2(lines: &[String]) { + const GROUP_SIZE: usize = 3; + let mut sets = Vec::with_capacity(GROUP_SIZE - 1); + for _ in 0..GROUP_SIZE - 1 { + sets.push(HashSet::::new()) + } -#[cfg(test)] -mod tests { - use super::*; + let mut sum: u32 = 0; + for chunk in lines.chunks(GROUP_SIZE) { + let mut outlier: Option = None; + 'outlier_search: for i in 0..GROUP_SIZE { + if i != GROUP_SIZE - 1 { + sets[i].clear(); + chunk[i].chars().collect_into(&mut sets[i]); + } else { + for c in chunk[i].chars() { + if sets[0..GROUP_SIZE - 1].into_iter().all(|s| s.contains(&c)) { + outlier = Some(c); + break 'outlier_search; + } + } + } + } + + let outlier = outlier.expect("Expect at least one outlier"); + let priority = to_priority(outlier).unwrap(); + dbg!(outlier, priority); + sum += priority; + } + + println!("Sum: {}", sum); }