Complete day 4
This commit is contained in:
parent
9cc0c3f8d6
commit
d277f13647
|
@ -0,0 +1,18 @@
|
||||||
|
#!/usr/bin/python3
|
||||||
|
|
||||||
|
required_fields = { "byr", "iyr", "eyr", "hgt", "hcl", "ecl", "pid",}
|
||||||
|
|
||||||
|
valid = 0
|
||||||
|
with open("input") as fh:
|
||||||
|
all_data = fh.read()
|
||||||
|
passport_strings = all_data.split("\n\n")
|
||||||
|
for ps in passport_strings:
|
||||||
|
fields = ps.split()
|
||||||
|
passport = {}
|
||||||
|
for f in fields:
|
||||||
|
k, v = f.split(":")
|
||||||
|
passport[k] = v
|
||||||
|
if required_fields - set(passport.keys()) == set():
|
||||||
|
valid += 1
|
||||||
|
print(valid)
|
||||||
|
|
|
@ -0,0 +1,66 @@
|
||||||
|
#!/usr/bin/python3
|
||||||
|
import re
|
||||||
|
|
||||||
|
def byr_valid(s):
|
||||||
|
try:
|
||||||
|
yr = int(s)
|
||||||
|
return 1920 <= yr <= 2002
|
||||||
|
except:
|
||||||
|
return False
|
||||||
|
|
||||||
|
def iyr_valid(s):
|
||||||
|
try:
|
||||||
|
yr = int(s)
|
||||||
|
return 2010 <= yr <= 2020
|
||||||
|
except:
|
||||||
|
return False
|
||||||
|
|
||||||
|
def eyr_valid(s):
|
||||||
|
try:
|
||||||
|
yr = int(s)
|
||||||
|
return 2020 <= yr <= 2030
|
||||||
|
except:
|
||||||
|
return False
|
||||||
|
|
||||||
|
def hgt_valid(s):
|
||||||
|
try:
|
||||||
|
m = re.fullmatch(r"(\d+)(cm|in)", s)
|
||||||
|
if m.group(2) == "cm":
|
||||||
|
return 150 <= int(m.group(1)) <= 193
|
||||||
|
elif m.group(2) == "in":
|
||||||
|
return 59 <= int(m.group(1)) <= 76
|
||||||
|
else:
|
||||||
|
return False
|
||||||
|
except:
|
||||||
|
return False
|
||||||
|
|
||||||
|
def hcl_valid(s):
|
||||||
|
return bool(re.fullmatch(r"#[0-9a-f]{6}", s))
|
||||||
|
|
||||||
|
def ecl_valid(s):
|
||||||
|
return s in ("amb", "blu", "brn", "gry", "grn", "hzl", "oth")
|
||||||
|
|
||||||
|
def pid_valid(s):
|
||||||
|
return bool(re.fullmatch(r"[0-9]{9}", s))
|
||||||
|
|
||||||
|
checks = {
|
||||||
|
"byr": byr_valid, "iyr": iyr_valid, "eyr": eyr_valid,
|
||||||
|
"hgt": hgt_valid, "hcl": hcl_valid, "ecl": ecl_valid,
|
||||||
|
"pid": pid_valid,}
|
||||||
|
|
||||||
|
valid_count = 0
|
||||||
|
with open("input") as fh:
|
||||||
|
all_data = fh.read()
|
||||||
|
passport_strings = all_data.split("\n\n")
|
||||||
|
for ps in passport_strings:
|
||||||
|
fields = ps.split()
|
||||||
|
passport = {}
|
||||||
|
for f in fields:
|
||||||
|
k, v = f.split(":")
|
||||||
|
passport[k] = v
|
||||||
|
is_valid = True
|
||||||
|
for f, c in checks.items():
|
||||||
|
is_valid = is_valid and f in passport and c(passport[f])
|
||||||
|
valid_count += is_valid
|
||||||
|
print(valid_count)
|
||||||
|
|
Loading…
Reference in New Issue