|
|
@@ -0,0 +1,30 @@ |
|
|
|
import re |
|
|
|
import sys |
|
|
|
|
|
|
|
|
|
|
|
def checks(byr, iyr, eyr, hgt, hcl, ecl, pid, cid=None): |
|
|
|
yield 1920 <= int(byr) <= 2002 |
|
|
|
yield 2010 <= int(iyr) <= 2020 |
|
|
|
yield 2020 <= int(eyr) <= 2030 |
|
|
|
if hgt.endswith('cm'): |
|
|
|
yield 150 <= int(hgt[:-2]) <= 193 |
|
|
|
elif hgt.endswith('in'): |
|
|
|
yield 59 <= int(hgt[:-2]) <= 76 |
|
|
|
else: |
|
|
|
yield False |
|
|
|
yield re.match(r'^#[0-9a-f]{6}$', hcl) |
|
|
|
yield re.match(r'^(amb|blu|brn|gry|grn|hzl|oth)$', ecl) |
|
|
|
yield re.match(r'^\d{9}$', pid) |
|
|
|
|
|
|
|
|
|
|
|
ans1 = 0 |
|
|
|
ans2 = 0 |
|
|
|
fields = {'byr', 'iyr', 'eyr', 'hgt', 'hcl', 'ecl', 'pid'} |
|
|
|
for blob in sys.stdin.read().split('\n\n'): |
|
|
|
passport = dict(re.findall(r'(\S+):(\S+)', blob)) |
|
|
|
valid = not fields.difference(passport) |
|
|
|
ans1 += valid |
|
|
|
if valid: |
|
|
|
ans2 += all(checks(**passport)) |
|
|
|
print(ans1) |
|
|
|
print(ans2) |