diff options
| author | Reiner Herrmann <reiner@reiner-h.de> | 2020-12-06 12:42:04 +0100 |
|---|---|---|
| committer | Reiner Herrmann <reiner@reiner-h.de> | 2020-12-06 12:42:04 +0100 |
| commit | 9e4839e0e77bba8e69ef14a257dbe257ad0b31b9 (patch) | |
| tree | 488c549967b90b5fa5adb80625db6d7157dcf598 /src/main.rs | |
| parent | 2c6f5a81e99144e6e7ecbd896e110016aed1eaa6 (diff) | |
day6
Diffstat (limited to 'src/main.rs')
| -rw-r--r-- | src/main.rs | 50 |
1 files changed, 49 insertions, 1 deletions
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); + } } |
