day4 so far + formatz
This commit is contained in:
117
day4/day4.py
Normal file
117
day4/day4.py
Normal file
@@ -0,0 +1,117 @@
|
||||
import re
|
||||
|
||||
lines = []
|
||||
|
||||
|
||||
def load():
|
||||
global lines
|
||||
file = open("input_test.txt")
|
||||
lines = file.readlines()
|
||||
|
||||
|
||||
def resetCheck():
|
||||
return {
|
||||
'byr': False,
|
||||
'iyr': False,
|
||||
'eyr': False,
|
||||
'hgt': False,
|
||||
'hcl': False,
|
||||
'ecl': False,
|
||||
'pid': False,
|
||||
'cid': False
|
||||
}
|
||||
|
||||
|
||||
def valid(password):
|
||||
if not password['byr']:
|
||||
return False
|
||||
if not password['iyr']:
|
||||
return False
|
||||
if not password['eyr']:
|
||||
return False
|
||||
if not password['hgt']:
|
||||
return False
|
||||
if not password['hcl']:
|
||||
return False
|
||||
if not password['ecl']:
|
||||
return False
|
||||
if not password['pid']:
|
||||
return False
|
||||
return True
|
||||
|
||||
|
||||
def validate_field(field, value):
|
||||
if field == 'byr':
|
||||
return 1920 <= int(value) <= 2002
|
||||
elif field == 'iyr':
|
||||
return 2010 <= int(value) <= 2020
|
||||
elif field == 'eyr':
|
||||
return 2020 <= int(value) <= 2030
|
||||
elif field == 'hgt':
|
||||
height = re.split('([0-9]+)([a-z]+)', value)
|
||||
if len(height) < 3:
|
||||
return False
|
||||
if height[2] == 'cm':
|
||||
return 150 <= int(height[1]) <= 193
|
||||
elif height[2] == 'in':
|
||||
return 59 <= int(height[1]) <= 76
|
||||
else:
|
||||
return False
|
||||
elif field == 'hcl':
|
||||
if re.match('#([0-9a-f]{6})', value):
|
||||
return True
|
||||
elif field == 'ecl':
|
||||
return value == "amb" or value == "blu" or value == "brn" or value == "gry" or value == "grn" or value == "hzl" or value == "oth"
|
||||
elif field == 'pid':
|
||||
if re.match('([0-9]{9})', value):
|
||||
return True
|
||||
|
||||
def part1():
|
||||
file = open("input.txt")
|
||||
count = 0
|
||||
passport = resetCheck()
|
||||
for line in file:
|
||||
|
||||
if line == "\n":
|
||||
if valid(passport):
|
||||
count += 1
|
||||
passport = resetCheck()
|
||||
|
||||
passport_line = line.split(" ")
|
||||
for field in passport_line:
|
||||
field = field.split(':')[0]
|
||||
passport[field] = True
|
||||
|
||||
if valid(passport):
|
||||
count += 1
|
||||
print("Part 1: %d" % count)
|
||||
|
||||
|
||||
def part2():
|
||||
file = open("input.txt")
|
||||
|
||||
count = 0
|
||||
passport = resetCheck()
|
||||
|
||||
for line in file:
|
||||
|
||||
if line == "\n":
|
||||
if valid(passport):
|
||||
count += 1
|
||||
passport = resetCheck()
|
||||
|
||||
else:
|
||||
passport_line = line.split(" ")
|
||||
for field in passport_line:
|
||||
field = field.split(':')
|
||||
passport[field[0]] = validate_field(field[0], field[1])
|
||||
|
||||
if valid(passport):
|
||||
count += 1
|
||||
print("Part 2: %d" % count)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
load()
|
||||
part1()
|
||||
part2()
|
||||
Reference in New Issue
Block a user