1
0

Added Day 5 Part 1

This commit is contained in:
Ishan Jain 2020-12-05 10:46:08 +05:30
parent 992a5586ec
commit 2c6be28d86
No known key found for this signature in database
GPG Key ID: F261A0E73038D89D
3 changed files with 917 additions and 1225 deletions

2003
input

File diff suppressed because it is too large Load Diff

View File

@ -1,13 +1,4 @@
ecl:gry pid:860033327 eyr:2020 hcl:#fffffd FBFBBFFRLR
byr:1937 iyr:2017 cid:147 hgt:183cm BFFFBBFRRR
FFFBBBFRRR
iyr:2013 ecl:amb cid:350 eyr:2023 pid:028048884 BBFFBBFRLL
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

View File

@ -1,88 +1,58 @@
use std::collections::HashMap;
use std::io::{stdin, Read}; use std::io::{stdin, Read};
fn main() { fn main() {
let mut input = String::new(); let mut input = String::new();
stdin().read_to_string(&mut input).unwrap(); stdin().read_to_string(&mut input).unwrap();
let passports: usize = input let max_seat_id: usize = input
.split("\n\n") .split('\n')
.filter(|x| !x.is_empty()) .filter(|x| !x.is_empty())
.into_iter() .into_iter()
.map(|x| x.replace('\n', " ")) .map(|seat| {
.map(|x| { let seat = seat.as_bytes();
let mut map = HashMap::new(); let (region, columns) = seat.split_at(7);
x.split(' ').filter(|x| !x.is_empty()).for_each(|y| { let mut lower = 0;
let mut y = y.split(':'); let mut upper = 127;
let key = y.next().unwrap();
let value = y.next().unwrap();
map.insert(key.to_owned(), value.to_owned()); for r in region {
}); match r {
b'F' => {
map let mid = (lower + upper) / 2;
}) upper = mid;
.filter(|map| { }
validate(&map, "byr") b'B' => {
&& validate(&map, "iyr") let mid = (lower + upper + 1) / 2;
&& validate(&map, "eyr") lower = mid;
&& validate(&map, "hgt") }
&& validate(&map, "hcl") _ => unreachable!(),
&& validate(&map, "ecl") }
&& validate(&map, "pid")
})
.count();
println!("{:?}", passports);
}
fn validate(map: &HashMap<String, String>, key: &str) -> bool {
match (key, map.get(key)) {
("byr", Some(v)) => {
let byr = v.parse::<i32>().unwrap();
byr >= 1920 && byr <= 2002
}
("iyr", Some(v)) => {
let iyr = v.parse::<i32>().unwrap();
iyr >= 2010 && iyr <= 2020
}
("eyr", Some(v)) => {
let eyr = v.parse::<i32>().unwrap();
eyr >= 2020 && eyr <= 2030
}
("hgt", Some(v)) => {
if v.contains("cm") {
let v = v.trim_end_matches(char::is_alphabetic);
let v = v.parse::<i32>().unwrap();
v >= 150 && v <= 193
} else if v.contains("in") {
let v = v.trim_end_matches(char::is_alphabetic);
let v = v.parse::<i32>().unwrap();
v >= 59 && v <= 76
} else {
false
} }
}
("hcl", Some(v)) => { let region = lower;
v.starts_with('#') lower = 0;
&& v.chars() upper = 7;
.skip(1)
.filter(|x| match x { for col in columns {
'0'..='9' => true, match col {
'a'..='f' => true, b'L' => {
_ => false, let mid = (lower + upper) / 2;
}) upper = mid;
.count() }
== 6 b'R' => {
} let mid = (lower + upper + 1) / 2;
("ecl", Some(v)) => match v.as_ref() { lower = mid;
"amb" | "blu" | "brn" | "gry" | "grn" | "hzl" | "oth" => true, }
_ => false, _ => unreachable!(),
}, }
("pid", Some(v)) => v.len() == 9 && v.chars().filter(|&x| char::is_numeric(x)).count() == 9, }
("cid", _) => true,
(_, None) => false, let col = lower;
(_, _) => unreachable!(),
} region * 8 + col
})
.max()
.unwrap();
println!("{:?}", max_seat_id);
} }