Add solution for 2020 day 02

This commit is contained in:
Patrick Auernig 2021-12-04 19:18:12 +01:00
parent 793f6e4fcc
commit c995c3c472
7 changed files with 1091 additions and 1 deletions

View File

@ -5,7 +5,7 @@
| Day | Part 1 | Part 2 | Language |
| :-: | :----: | :----: | :------- |
| 01 | ✓ | ✓ | Rust |
| 02 | | | |
| 02 | ✓ | ✓ | Rust |
| 03 | | | |
| 04 | | | |
| 05 | | | |

2
2020/day-02/.gitignore vendored Normal file
View File

@ -0,0 +1,2 @@
part_one
part_two

30
2020/day-02/common.rs Normal file
View File

@ -0,0 +1,30 @@
use std::env;
use std::fs::File;
use std::io::Read;
pub type Result<T> = std::result::Result<T, Box<dyn std::error::Error>>;
pub fn read_file() -> Result<Vec<(usize, usize, char, String)>> {
let path = env::args().skip(1).next().unwrap();
let mut file = File::open(path)?;
let mut content = String::new();
file.read_to_string(&mut content)?;
let result = content
.lines()
.map(|line| {
let tokens = line
.split(&[' ', ':', '-'][..])
.filter(|&x| x != "")
.collect::<Vec<_>>();
(
tokens[0].parse().unwrap(),
tokens[1].parse().unwrap(),
tokens[2].chars().next().unwrap(),
tokens[3].into(),
)
})
.collect();
Ok(result)
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,3 @@
1-3 a: abcde
1-3 b: cdefg
2-9 c: ccccccccc

33
2020/day-02/part_one.rs Normal file
View File

@ -0,0 +1,33 @@
mod common;
use common::{read_file, Result};
fn main() -> Result<()> {
let entries = read_file()?;
let mut valid_passwords = 0;
'entries: for (min, max, req_char, password) in entries {
let mut char_counter = 0;
for character in password.chars() {
if character == req_char {
char_counter += 1;
}
if char_counter > max {
continue 'entries;
}
}
if char_counter < min {
continue;
}
valid_passwords += 1;
}
println!("{}", valid_passwords);
Ok(())
}

22
2020/day-02/part_two.rs Normal file
View File

@ -0,0 +1,22 @@
mod common;
use common::{read_file, Result};
fn main() -> Result<()> {
let entries = read_file()?;
let mut valid_passwords = 0;
for (pos1, pos2, req_char, password) in entries {
let a = password.chars().nth(pos1 - 1).unwrap() == req_char;
let b = password.chars().nth(pos2 - 1).unwrap() == req_char;
if a ^ b {
valid_passwords += 1;
}
}
println!("{}", valid_passwords);
Ok(())
}