From 9e4839e0e77bba8e69ef14a257dbe257ad0b31b9 Mon Sep 17 00:00:00 2001 From: Reiner Herrmann Date: Sun, 6 Dec 2020 12:42:04 +0100 Subject: day6 --- src/main.rs | 50 +++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 49 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/main.rs b/src/main.rs index 45df584..f792ade 100644 --- a/src/main.rs +++ b/src/main.rs @@ -350,8 +350,42 @@ fn day5() { println!("5b: {}", your_seat); } +fn count_unique_answers(input: &str) -> usize { + let mut chars = HashSet::new(); + for c in input.chars().filter(|x| x.is_ascii_lowercase()) { + chars.insert(c); + } + chars.len() +} + +fn count_common_answers(input: &str) -> usize { + let mut answers = HashMap::new(); + let mut person_count = 0; + for person in input.trim_end().split('\n') { + person_count += 1; + for answer in person.chars() { + let count = answers.entry(answer).or_insert(0); + *count += 1; + } + } + answers.values().filter(|&x| *x == person_count).count() +} + +fn day6() { + let input = read_file("input06"); + let sum : usize = input.split("\n\n") + .map(|x| count_unique_answers(x)) + .sum(); + println!("6a: {}", sum); + + let sum : usize = input.split("\n\n") + .map(|x| count_common_answers(x)) + .sum(); + println!("6b: {}", sum); +} + fn main() { - day5(); + day6(); } #[cfg(test)] @@ -460,4 +494,18 @@ mod tests { assert_eq!(BoardingPass::new("FFFBBBFRRR").seat_id(), 119); assert_eq!(BoardingPass::new("BBFFBBFRLL").seat_id(), 820); } + + #[test] + fn test_day6() { + let input = "abc\n\na\nb\nc\n\nab\nac\n\na\na\na\na\n\nb\n"; + let sum : usize = input.split("\n\n") + .map(|x| count_unique_answers(x)) + .sum(); + assert_eq!(sum, 11); + + let sum : usize = input.split("\n\n") + .map(|x| count_common_answers(x)) + .sum(); + assert_eq!(sum, 6); + } } -- cgit v1.2.3