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