Solve 2020/04
parent
f16dccdee6
commit
573ac5b393
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,41 @@
|
|||||||
|
"""
|
||||||
|
Solution to 2020/04
|
||||||
|
"""
|
||||||
|
import re
|
||||||
|
|
||||||
|
passports = []
|
||||||
|
|
||||||
|
with open('input', 'r') as f:
|
||||||
|
for passportRaw in f.read().strip().split('\n\n'):
|
||||||
|
passport = {}
|
||||||
|
for [key, value] in re.findall(r'([\w]{3}):(\S*)', passportRaw):
|
||||||
|
passport[key] = value
|
||||||
|
# print(passportRaw)
|
||||||
|
# print(passport)
|
||||||
|
# print()
|
||||||
|
passports.append(passport)
|
||||||
|
|
||||||
|
print('Passports:', len(passports))
|
||||||
|
required_fields = [
|
||||||
|
'byr',
|
||||||
|
'iyr',
|
||||||
|
'eyr',
|
||||||
|
'hgt',
|
||||||
|
'hcl',
|
||||||
|
'ecl',
|
||||||
|
'pid'
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
def is_valid(passport):
|
||||||
|
print()
|
||||||
|
print(passport)
|
||||||
|
for field in required_fields:
|
||||||
|
print('field in passport:', field, field in passport)
|
||||||
|
if field not in passport:
|
||||||
|
return False
|
||||||
|
return True
|
||||||
|
|
||||||
|
|
||||||
|
print('Count:')
|
||||||
|
print(len(list(x for x in passports if is_valid(x))))
|
@ -0,0 +1,72 @@
|
|||||||
|
"""
|
||||||
|
Solution to 2020/04
|
||||||
|
"""
|
||||||
|
import re
|
||||||
|
|
||||||
|
passports = []
|
||||||
|
|
||||||
|
with open('input', 'r') as f:
|
||||||
|
for passportRaw in f.read().strip().split('\n\n'):
|
||||||
|
passport = {}
|
||||||
|
for [key, value] in re.findall(r'([\w]{3}):(\S*)', passportRaw):
|
||||||
|
passport[key] = value
|
||||||
|
# print(passportRaw)
|
||||||
|
# print(passport)
|
||||||
|
# print()
|
||||||
|
passports.append(passport)
|
||||||
|
|
||||||
|
print('Passports:', len(passports))
|
||||||
|
|
||||||
|
required_fields = [
|
||||||
|
'byr',
|
||||||
|
'iyr',
|
||||||
|
'eyr',
|
||||||
|
'hgt',
|
||||||
|
'hcl',
|
||||||
|
'ecl',
|
||||||
|
'pid'
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
def validate_int(value, min, max):
|
||||||
|
try:
|
||||||
|
value = int(value)
|
||||||
|
if value < min or value > max:
|
||||||
|
return False
|
||||||
|
return True
|
||||||
|
except:
|
||||||
|
return False
|
||||||
|
|
||||||
|
|
||||||
|
def is_valid(passport):
|
||||||
|
for field in required_fields:
|
||||||
|
if field not in passport:
|
||||||
|
return False
|
||||||
|
if not validate_int(passport['byr'], 1920, 2002):
|
||||||
|
return False
|
||||||
|
if not validate_int(passport['iyr'], 2010, 2020):
|
||||||
|
return False
|
||||||
|
if not validate_int(passport['eyr'], 2020, 2030):
|
||||||
|
return False
|
||||||
|
hgt_val = passport['hgt'][:-2]
|
||||||
|
hgt_type = passport['hgt'][-2:]
|
||||||
|
if hgt_type == 'cm':
|
||||||
|
if not validate_int(hgt_val, 150, 193):
|
||||||
|
return False
|
||||||
|
elif hgt_type == 'in':
|
||||||
|
if not validate_int(hgt_val, 59, 76):
|
||||||
|
return False
|
||||||
|
else:
|
||||||
|
return False
|
||||||
|
if not re.match('#[0-9a-f]{6}', passport['hcl']):
|
||||||
|
return False
|
||||||
|
if not passport['ecl'] in ['amb', 'blu', 'brn', 'gry', 'grn', 'hzl', 'oth']:
|
||||||
|
return False
|
||||||
|
print(passport['pid'])
|
||||||
|
if not len(passport['pid']) == 9 or not validate_int(passport['pid'], 0, 999999999):
|
||||||
|
return False
|
||||||
|
return True
|
||||||
|
|
||||||
|
|
||||||
|
print('Count:')
|
||||||
|
print(len(list(x for x in passports if is_valid(x))))
|
Loading…
Reference in New Issue