mirror of
https://github.com/chylex/Advent-of-Code.git
synced 2025-06-01 21:34:04 +02:00
Add 2020 - Day 2 - Part 2
This commit is contained in:
parent
cb2c6becbf
commit
f8bc38182f
@ -1,3 +1,4 @@
|
||||
use std::collections::HashSet;
|
||||
use std::error::Error;
|
||||
use std::str::FromStr;
|
||||
|
||||
@ -9,8 +10,8 @@ mod utils;
|
||||
fn main() -> Result<(), Box<dyn Error>> {
|
||||
let lines = utils::parse_input_lines::<PasswordRule>()?;
|
||||
|
||||
let valid_passwords = lines.iter().filter(|x| x.is_valid()).count();
|
||||
println!("Valid passwords: {}", valid_passwords);
|
||||
println!("Valid passwords according to part 1 rules: {}", lines.iter().filter(|x| x.is_valid_part1()).count());
|
||||
println!("Valid passwords according to part 2 rules: {}", lines.iter().filter(|x| x.is_valid_part2()).count());
|
||||
|
||||
Ok(())
|
||||
}
|
||||
@ -23,10 +24,17 @@ struct PasswordRule {
|
||||
}
|
||||
|
||||
impl PasswordRule {
|
||||
fn is_valid(&self) -> bool {
|
||||
fn is_valid_part1(&self) -> bool {
|
||||
let count = self.actual_password.matches(self.required_char.as_str()).count();
|
||||
return count >= self.left_value && count <= self.right_value;
|
||||
}
|
||||
|
||||
fn is_valid_part2(&self) -> bool {
|
||||
let positions = self.actual_password.match_indices(self.required_char.as_str()).map(|(index, _)| index + 1).collect::<HashSet<usize>>();
|
||||
let is_in_first_position = positions.contains(&self.left_value);
|
||||
let is_in_second_position = positions.contains(&self.right_value);
|
||||
return (is_in_first_position && !is_in_second_position) || (!is_in_first_position && is_in_second_position);
|
||||
}
|
||||
}
|
||||
|
||||
impl FromStr for PasswordRule {
|
||||
|
Loading…
Reference in New Issue
Block a user