day 2
This commit is contained in:
parent
dd87be81ed
commit
efd5484204
|
@ -7,3 +7,4 @@ edition = "2018"
|
||||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
|
regex = "1"
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
59
src/lib.rs
59
src/lib.rs
|
@ -1,11 +1,13 @@
|
||||||
|
use std::fs;
|
||||||
use std::fs::File;
|
use std::fs::File;
|
||||||
use std::io::{prelude::*, BufReader, Error};
|
use std::io::{prelude::*, BufReader};
|
||||||
|
use std::error::Error;
|
||||||
|
use regex::Regex;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
pub fn aoc_01_01(filename: &str) -> Result<(), Error> {
|
|
||||||
|
|
||||||
|
pub fn aoc_01_both(filename: &str) -> Result<(), Box<dyn Error>> {
|
||||||
let file = File::open(filename).expect("No file");
|
let file = File::open(filename).expect("No file");
|
||||||
let br = BufReader::new(file);
|
let br = BufReader::new(file);
|
||||||
let mut v: Vec<i64> = vec![];
|
let mut v: Vec<i64> = vec![];
|
||||||
|
@ -35,5 +37,54 @@ pub fn aoc_01_01(filename: &str) -> Result<(), Error> {
|
||||||
}
|
}
|
||||||
|
|
||||||
return Ok(());
|
return Ok(());
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn aoc_02(filename: &str) -> Result<(), Box<dyn Error>> {
|
||||||
|
let contents = fs::read_to_string(filename)?;
|
||||||
|
|
||||||
|
|
||||||
|
let pairs: Vec<Vec<String>> = contents.lines().map(|line| {
|
||||||
|
line.split(":").map(|s| String::from(s)).collect()
|
||||||
|
}).collect();
|
||||||
|
|
||||||
|
aoc_02_01(&pairs).unwrap();
|
||||||
|
aoc_02_02(&pairs).unwrap();
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
|
fn aoc_02_01(pairs: &Vec<Vec<String>>) -> Result<(), Box<dyn Error>> {
|
||||||
|
let mut valid = 0;
|
||||||
|
let rules_re = Regex::new(r"(\d*)-(\d*) ([a-z])").unwrap();
|
||||||
|
for i in 0..pairs.len() {
|
||||||
|
let rule = rules_re.captures(&pairs[i][0]).unwrap();
|
||||||
|
let min = rule[1].parse::<usize>().unwrap();
|
||||||
|
let max = rule[2].parse::<usize>().unwrap();
|
||||||
|
let matches: usize = pairs[i][1].matches(&rule[3]).count();
|
||||||
|
if matches >= min && matches <= max {
|
||||||
|
valid += 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
println!("2_1 had {}/{} valid passwords", valid, pairs.len());
|
||||||
|
return Ok(());
|
||||||
|
}
|
||||||
|
|
||||||
|
fn aoc_02_02(pairs: &Vec<Vec<String>>) -> Result<(), Box<dyn Error>> {
|
||||||
|
let mut valid = 0;
|
||||||
|
let rules_re = Regex::new(r"(\d*)-(\d*) ([a-z])").unwrap();
|
||||||
|
for i in 0..pairs.len() {
|
||||||
|
let rule = rules_re.captures(&pairs[i][0]).unwrap();
|
||||||
|
let first = rule[1].parse::<usize>().unwrap();
|
||||||
|
let sec = rule[2].parse::<usize>().unwrap();
|
||||||
|
|
||||||
|
let m1 = pairs[i][1].as_bytes()[first] == rule[3].as_bytes()[0];
|
||||||
|
let m2 = pairs[i][1].as_bytes()[sec] == rule[3].as_bytes()[0];
|
||||||
|
if (m1 || m2) && !(m1 && m2) {
|
||||||
|
valid += 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
println!("2_2 had {}/{} valid passwords", valid, pairs.len());
|
||||||
|
return Ok(());
|
||||||
}
|
}
|
20
src/main.rs
20
src/main.rs
|
@ -1,8 +1,20 @@
|
||||||
|
use std::env;
|
||||||
|
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
//let filename = env::args().nth(1).expect("input filename required");
|
let day = match env::args().nth(1) {
|
||||||
|
Some(arg) => arg.parse().unwrap(),
|
||||||
|
None => 1
|
||||||
|
};
|
||||||
|
|
||||||
|
let result = match day {
|
||||||
|
1 => advent_of_code::aoc_01_both("./inputs/01-01.txt"),
|
||||||
|
2 => advent_of_code::aoc_02("./inputs/02-01.txt"),
|
||||||
|
_ => Err(format!("unsupported day {}", day).into()),
|
||||||
|
};
|
||||||
|
|
||||||
|
match result {
|
||||||
|
Ok(_) => (),
|
||||||
|
Err(e) => println!("Error executing day {}: {}", day, e),
|
||||||
|
}
|
||||||
|
|
||||||
advent_of_code::aoc_01_01("./inputs/01-01.txt");
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue