a shitty day4 attempt
This commit is contained in:
parent
986a35d0fc
commit
e9bc83227e
10
2020/day_4/Cargo.toml
Normal file
10
2020/day_4/Cargo.toml
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
[package]
|
||||||
|
name = "day_4"
|
||||||
|
version = "0.1.0"
|
||||||
|
authors = ["Ray Slakinski <ray.slakinski@gmail.com>"]
|
||||||
|
edition = "2018"
|
||||||
|
|
||||||
|
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
|
scan_fmt = "0.2.5"
|
1070
2020/day_4/input
Normal file
1070
2020/day_4/input
Normal file
File diff suppressed because it is too large
Load Diff
137
2020/day_4/src/main.rs
Normal file
137
2020/day_4/src/main.rs
Normal file
@ -0,0 +1,137 @@
|
|||||||
|
use std::{collections::BTreeMap, println};
|
||||||
|
#[macro_use]
|
||||||
|
extern crate scan_fmt;
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
let required_fields = ["byr", "iyr", "eyr", "hgt", "hcl", "ecl", "pid"];
|
||||||
|
let contents = std::fs::read_to_string("input").unwrap();
|
||||||
|
let mut d = BTreeMap::new();
|
||||||
|
let mut valid_count = 0;
|
||||||
|
for line in contents.lines() {
|
||||||
|
if line.len() > 0 {
|
||||||
|
let seg = line.split(" ");
|
||||||
|
for s in seg {
|
||||||
|
let kv: Vec<_> = s.split(":").collect();
|
||||||
|
d.insert(kv[0].to_string(), kv[1].to_string());
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
let mut approved = true;
|
||||||
|
for field in required_fields.iter() {
|
||||||
|
if !d.contains_key(field.to_string().as_str()) {
|
||||||
|
println!("Didn't find key {}", field);
|
||||||
|
approved = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (key, val) in &d {
|
||||||
|
if !approved {
|
||||||
|
println!("Not Approved! {:?}", d);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
match key.as_str() {
|
||||||
|
"byr" => {
|
||||||
|
let byr = val.parse::<i32>().unwrap();
|
||||||
|
let minmax = 1920..=2002;
|
||||||
|
if !minmax.contains(&byr) {
|
||||||
|
approved = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
"iyr" => {
|
||||||
|
let iyr = val.parse::<i32>().unwrap();
|
||||||
|
let minmax = 2010..=2020;
|
||||||
|
if !minmax.contains(&iyr) {
|
||||||
|
approved = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
"eyr" => {
|
||||||
|
let eyr = val.parse::<i32>().unwrap();
|
||||||
|
let minmax = 2020..=2030;
|
||||||
|
if !minmax.contains(&eyr) {
|
||||||
|
approved = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
"hgt" => {
|
||||||
|
if let Ok((hgt, unit)) = scan_fmt!(&val, "{d}{}", i32, String) {
|
||||||
|
match unit.as_str() {
|
||||||
|
"cm" => {
|
||||||
|
let minmax = 150..=193;
|
||||||
|
if !minmax.contains(&hgt) {
|
||||||
|
approved = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
"in" => {
|
||||||
|
let minmax = 59..=76;
|
||||||
|
if !minmax.contains(&hgt) {
|
||||||
|
approved = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
_ => {
|
||||||
|
println!("malformed hgt value: {}:{}", key, val);
|
||||||
|
approved = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
"hcl" => {
|
||||||
|
let hcl = scan_fmt!(&val, "#{[0-9a-f]}", String);
|
||||||
|
match hcl {
|
||||||
|
Ok(v) => {
|
||||||
|
if !v.len() == 6 {
|
||||||
|
approved = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Err(_) => {
|
||||||
|
println!("malformed hcl value: {}:{}", key, val);
|
||||||
|
approved = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
"ecl" => {
|
||||||
|
let valid_ecl = ["amb", "blu", "brn", "gry", "grn", "hzl", "oth"];
|
||||||
|
if !valid_ecl.contains(&val.as_str()) {
|
||||||
|
approved = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
"pid" => {
|
||||||
|
let pid = scan_fmt!(&val, "{[0-9]}", String);
|
||||||
|
match pid {
|
||||||
|
Ok(v) => {
|
||||||
|
if v.len() < 9 || v.len() > 9 {
|
||||||
|
approved = false;
|
||||||
|
} else {
|
||||||
|
println!("pid = {:?} {}", v, v.len());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Err(_) => {
|
||||||
|
println!("malformed pid value: {}:{}", key, val);
|
||||||
|
approved = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
"cid" => println!("cid"),
|
||||||
|
_ => approved = false,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if approved && (d.len() >= 7 && d.len() <= 8) {
|
||||||
|
valid_count += 1;
|
||||||
|
// if d.contains_key("cid") {
|
||||||
|
println!("Approved! {:?}", d);
|
||||||
|
// }
|
||||||
|
}
|
||||||
|
println!("clearing {:?}", d);
|
||||||
|
d.clear();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// past guesses:
|
||||||
|
// 264, <
|
||||||
|
// 195, <
|
||||||
|
// 191
|
||||||
|
// 187
|
||||||
|
// 186
|
||||||
|
// 185
|
||||||
|
// 156
|
||||||
|
// 152
|
||||||
|
// 148
|
||||||
|
// 102
|
||||||
|
// 78
|
||||||
|
println!("Found {} approved passports", valid_count - 1);
|
||||||
|
}
|
14
2020/day_4/test
Normal file
14
2020/day_4/test
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
ecl:gry pid:860033327 eyr:2020 hcl:#fffffd
|
||||||
|
byr:1937 iyr:2017 cid:147 hgt:183cm
|
||||||
|
|
||||||
|
iyr:2013 ecl:amb cid:350 eyr:2023 pid:028048884
|
||||||
|
hcl:#cfa07d byr:1929
|
||||||
|
|
||||||
|
hcl:#ae17e1 iyr:2013
|
||||||
|
eyr:2024
|
||||||
|
ecl:brn pid:760753108 byr:1931
|
||||||
|
hgt:179cm
|
||||||
|
|
||||||
|
hcl:#cfa07d eyr:2025 pid:166559648
|
||||||
|
iyr:2011 ecl:brn hgt:59in
|
||||||
|
|
27
2020/day_4/test2
Normal file
27
2020/day_4/test2
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
eyr:1972 cid:100
|
||||||
|
hcl:#18171d ecl:amb hgt:170 pid:186cm iyr:2018 byr:1926
|
||||||
|
|
||||||
|
iyr:2019
|
||||||
|
hcl:#602927 eyr:1967 hgt:170cm
|
||||||
|
ecl:grn pid:012533040 byr:1946
|
||||||
|
|
||||||
|
hcl:dab227 iyr:2012
|
||||||
|
ecl:brn hgt:182cm pid:021572410 eyr:2020 byr:1992 cid:277
|
||||||
|
|
||||||
|
hgt:59cm ecl:zzz
|
||||||
|
eyr:2038 hcl:74454a iyr:2023
|
||||||
|
pid:3556412378 byr:2007
|
||||||
|
|
||||||
|
pid:087499704 hgt:74in ecl:grn iyr:2012 eyr:2030 byr:1980
|
||||||
|
hcl:#623a2f
|
||||||
|
|
||||||
|
eyr:2029 ecl:blu cid:129 byr:1989
|
||||||
|
iyr:2014 pid:896056539 hcl:#a97842 hgt:165cm
|
||||||
|
|
||||||
|
hcl:#888785
|
||||||
|
hgt:164cm byr:2001 iyr:2015 cid:88
|
||||||
|
pid:545766238 ecl:hzl
|
||||||
|
eyr:2022
|
||||||
|
|
||||||
|
iyr:2010 hgt:158cm hcl:#b6652a ecl:blu byr:1944 eyr:2021 pid:093154719
|
||||||
|
|
Reference in New Issue
Block a user