diff --git a/day3/src/main.rs b/day3/src/main.rs index 8b2a53a..ae06d6e 100644 --- a/day3/src/main.rs +++ b/day3/src/main.rs @@ -1,4 +1,4 @@ -fn get_rucksack_items(list: &str) -> (Vec, Vec) { +fn get_split_rucksack_items(list: &str) -> (Vec, Vec) { let all_chars: Vec<_> = list.chars().collect(); let half_index = all_chars.len() / 2; @@ -9,6 +9,10 @@ fn get_rucksack_items(list: &str) -> (Vec, Vec) { (halves.0.to_vec(), halves.1.to_vec()) } +fn get_rucksack_items(list: &str) -> Vec { + list.chars().collect() +} + fn get_priority(item: char) -> u32 { let is_uppercase = item.is_ascii_uppercase(); let char = if is_uppercase { @@ -64,14 +68,35 @@ fn find_same_item(a: Vec, b: Vec) -> char { panic!("We should have already found the item") } +fn find_same_item_in_three(a: &Vec, b: &Vec, c: &Vec) -> char { + for ch in a { + if b.contains(&ch) && c.contains(&ch) { + return *ch; + } + } + + panic!("We should have already found the common item"); +} + fn main() { let file_str = include_str!("input.txt"); let sum: u32 = file_str .lines() - .map(|line| get_rucksack_items(line)) + .map(|line| get_split_rucksack_items(line)) .map(|(a, b)| find_same_item(a, b)) .map(|item| get_priority(item)) .sum(); + let sacks: Vec> = file_str + .lines() + .map(|line| get_rucksack_items(line)) + .collect(); + let group_sum: u32 = sacks + .chunks(3) + .map(|chunk| find_same_item_in_three(&chunk[0], &chunk[1], &chunk[2])) + .map(|item| get_priority(item)) + .sum(); + println!("Part 1 Priority Sum: {}", sum); + println!("Part 2 Group Sum: {}", group_sum); }