some refactoring
This commit is contained in:
parent
4646147d04
commit
95cb290a6c
33
04/04_refactored.py
Normal file
33
04/04_refactored.py
Normal file
|
@ -0,0 +1,33 @@
|
||||||
|
import re
|
||||||
|
|
||||||
|
def read_file():
|
||||||
|
passports = []
|
||||||
|
with open("input.txt","r") as f:
|
||||||
|
raw_passports = f.read().strip().split('\n\n')
|
||||||
|
for passport in raw_passports:
|
||||||
|
parts = re.split('\s', passport)
|
||||||
|
passport_dict = dict(part.split(':') for part in parts) # use dictionary comprehension
|
||||||
|
passports.append(passport_dict)
|
||||||
|
return passports
|
||||||
|
|
||||||
|
validators = {
|
||||||
|
'byr': lambda x: len(x) == 4 and 2002 >= int(x) >= 1920,
|
||||||
|
'iyr': lambda x: len(x) == 4 and 2020 >= int(x) >= 2010,
|
||||||
|
'eyr': lambda x: len(x) == 4 and 2030 >= int(x) >= 2020,
|
||||||
|
'hgt': lambda x: (x[-2:] == 'cm' and 150 <= int(x[:-2]) <= 193) or (x[-2:] == 'in' and 59 <= int(x[:-2]) <= 76),
|
||||||
|
'hcl': lambda x: re.match('^#[\da-f]{6}$', x) != None,
|
||||||
|
'ecl': lambda x: x in ['amb','blu','brn','gry','grn','hzl','oth'],
|
||||||
|
'pid': lambda x: len(x) == 9 and x.isdigit(),
|
||||||
|
}
|
||||||
|
|
||||||
|
def main():
|
||||||
|
part1 = part2 = 0
|
||||||
|
passports = read_file()
|
||||||
|
for passport in passports:
|
||||||
|
if all(key in passport for key in validators): # TIL all() checks for iterable conditions
|
||||||
|
part1 += 1
|
||||||
|
if all(validators[key](passport[key]) for key in validators): # apply validators as function
|
||||||
|
part2 += 1
|
||||||
|
print(f'{part1=} {part2=}')
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
Loading…
Reference in a new issue