-
Notifications
You must be signed in to change notification settings - Fork 0
/
passport.py
60 lines (56 loc) · 2.17 KB
/
passport.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
def valid(passport):
if 1920 <= int(passport['byr']) <= 2002:
if 2010 <= int(passport['iyr']) <= 2020:
if 2020 <= int(passport['eyr']) <= 2030:
height = passport['hgt']
if height[-2:] == 'cm':
lo = 150
hi = 193
else:
lo = 59
hi = 76
if len(height)> 3 and lo <= int(height[:-2]) <= hi:
hair_color = passport['hcl']
if hair_color[0] == '#' and len(hair_color) == 7:
if set(hair_color[1:]) <= {hex(num)[2:] for num in range(16)}:
eye_color = passport['ecl']
if eye_color in {'amb', 'blu', 'brn', 'gry', 'grn', 'hzl', 'oth'}:
id_num = passport['pid']
if len(id_num) == 9 and set(id_num) <= {str(num) for num in range(10)}:
return True
else:
return False
else:
return False
else:
return False
else:
return False
else:
return False
else:
return False
else:
return False
else:
return False
with open('/users/sysadmin/Documents/Prajwal/Programming/Competitions/Advent of Code/input.txt') as fin:
res = 0
finished = False
while not finished:
blank_line_found = False
passport = {}
line_num = 0
while not blank_line_found:
line = fin.readline().split()
if not line:
finished = not line_num
blank_line_found = True
else:
for pair_str in line:
pair = pair_str.split(':')
passport[pair[0]] = pair[1]
line_num += 1
if {'byr', 'iyr', 'eyr', 'hgt', 'hcl', 'ecl', 'pid'} <= set(passport):
res += valid(passport)
print(res)