From e1b0047d2e8e148d021eb4678e20dcac11533baf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thorben=20G=C3=BCnther?= Date: Wed, 7 Apr 2021 23:49:40 +0200 Subject: [PATCH] Solve day 2 part 2 --- src/days/day02.rs | 31 +++++++++++++++++++++++++++---- 1 file changed, 27 insertions(+), 4 deletions(-) diff --git a/src/days/day02.rs b/src/days/day02.rs index ef63291..a03d4d0 100644 --- a/src/days/day02.rs +++ b/src/days/day02.rs @@ -28,7 +28,7 @@ fn parse_contents(contents: String) -> Vec { policies } -fn count_valid_passwords(policies: &Vec) -> i32 { +fn count_valid_passwords1(policies: &Vec) -> i32 { let mut count_valid = 0; for policy in policies { let count = policy.password.matches(policy.letter).count(); @@ -39,12 +39,25 @@ fn count_valid_passwords(policies: &Vec) -> i32 { count_valid } +fn count_valid_passwords2(policies: &Vec) -> i32 { + let mut count_valid = 0; + for policy in policies { + let first = policy.password.chars().nth(policy.min - 1).unwrap(); + let second = policy.password.chars().nth(policy.max - 1).unwrap(); + if (first == policy.letter) ^ (second == policy.letter) { + count_valid += 1; + } + } + count_valid +} + pub fn get_solution() { let contents = fs::read_to_string("data/day02.dat").expect("Could not read data"); let policies = parse_contents(contents); - let count_valid = count_valid_passwords(&policies); + let count_valid1 = count_valid_passwords1(&policies); + let count_valid2 = count_valid_passwords2(&policies); - println!("Day 2, part 1: {}", count_valid); + println!("Day 2, part 1: {}, part 2: {}", count_valid1, count_valid2); } #[cfg(test)] @@ -58,6 +71,16 @@ mod tests { 1-3 b: cdefg 2-9 c: ccccccccc", ); - assert_eq!(count_valid_passwords(&parse_contents(contents)), 2); + assert_eq!(count_valid_passwords1(&parse_contents(contents)), 2); + } + + #[test] + fn part2() { + let contents = String::from( + "1-3 a: abcde + 1-3 b: cdefg + 2-9 c: ccccccccc", + ); + assert_eq!(count_valid_passwords2(&parse_contents(contents)), 1); } } -- 2.44.0