Finishz day4, fu regex
This commit is contained in:
28
day4/day4.py
28
day4/day4.py
@@ -49,27 +49,32 @@ def validate_field(field, value):
|
|||||||
return 2020 <= int(value) <= 2030
|
return 2020 <= int(value) <= 2030
|
||||||
elif field == 'hgt':
|
elif field == 'hgt':
|
||||||
height = re.split('([0-9]+)([a-z]+)', value)
|
height = re.split('([0-9]+)([a-z]+)', value)
|
||||||
if len(height) < 3:
|
if len(height) != 4:
|
||||||
return False
|
return False
|
||||||
if height[2] == 'cm':
|
if height[2] == 'cm':
|
||||||
return 150 <= int(height[1]) <= 193
|
return 150 <= int(height[1]) <= 193
|
||||||
elif height[2] == 'in':
|
elif height[2] == 'in':
|
||||||
return 59 <= int(height[1]) <= 76
|
return 59 <= int(height[1]) <= 76
|
||||||
else:
|
|
||||||
return False
|
|
||||||
elif field == 'hcl':
|
elif field == 'hcl':
|
||||||
if re.match('#([0-9a-f]{6})', value):
|
if re.match('#([0-9a-f]{6})', value):
|
||||||
return True
|
return True
|
||||||
elif field == 'ecl':
|
elif field == 'ecl':
|
||||||
return value == "amb" or value == "blu" or value == "brn" or value == "gry" or value == "grn" or value == "hzl" or value == "oth"
|
if 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
|
return True
|
||||||
|
elif field == 'pid':
|
||||||
|
if re.match('^[0-9]{9}$', value):
|
||||||
|
return True
|
||||||
|
else:
|
||||||
|
return False
|
||||||
|
|
||||||
|
return False
|
||||||
|
|
||||||
|
|
||||||
def part1():
|
def part1():
|
||||||
file = open("input.txt")
|
file = open("input.txt")
|
||||||
count = 0
|
count = 0
|
||||||
passport = resetCheck()
|
passport = resetCheck()
|
||||||
|
|
||||||
for line in file:
|
for line in file:
|
||||||
|
|
||||||
if line == "\n":
|
if line == "\n":
|
||||||
@@ -79,17 +84,17 @@ def part1():
|
|||||||
|
|
||||||
passport_line = line.split(" ")
|
passport_line = line.split(" ")
|
||||||
for field in passport_line:
|
for field in passport_line:
|
||||||
field = field.split(':')[0]
|
field = field.strip("\n").split(':')[0]
|
||||||
passport[field] = True
|
passport[field] = True
|
||||||
|
|
||||||
if valid(passport):
|
if valid(passport):
|
||||||
count += 1
|
count += 1
|
||||||
print("Part 1: %d" % count)
|
|
||||||
|
print("Part 1: %d valid" % count)
|
||||||
|
|
||||||
|
|
||||||
def part2():
|
def part2():
|
||||||
file = open("input.txt")
|
file = open("input.txt")
|
||||||
|
|
||||||
count = 0
|
count = 0
|
||||||
passport = resetCheck()
|
passport = resetCheck()
|
||||||
|
|
||||||
@@ -101,14 +106,15 @@ def part2():
|
|||||||
passport = resetCheck()
|
passport = resetCheck()
|
||||||
|
|
||||||
else:
|
else:
|
||||||
passport_line = line.split(" ")
|
passport_line = line.strip().split(" ")
|
||||||
for field in passport_line:
|
for field in passport_line:
|
||||||
field = field.split(':')
|
field = field.split(':')
|
||||||
passport[field[0]] = validate_field(field[0], field[1])
|
passport[field[0]] = validate_field(field[0], field[1])
|
||||||
|
|
||||||
if valid(passport):
|
if valid(passport):
|
||||||
count += 1
|
count += 1
|
||||||
print("Part 2: %d" % count)
|
|
||||||
|
print("Part 2: %d valid" % count)
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
|
|||||||
Reference in New Issue
Block a user