-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path4b.py
More file actions
120 lines (112 loc) · 3.75 KB
/
4b.py
File metadata and controls
120 lines (112 loc) · 3.75 KB
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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
#Advent of code
# 12/9/2020 day4 4b
def isHexLower( char ):
valid = False
if (char >= "0" and char <= "9") or (char >= "a" and char <= "f"):
valid = True
return valid
def validate( b ):
# "byr:" in b
# "iyr:" in b
# "eyr:" in b
# "hgt:" in b
# "hcl:" in b
# "ecl:" in b
# "pid:" in b
# ecl:lzr cid:279 pid:192cm hcl:1f7352 iyr:2014 hgt:70cm eyr:1983 byr:2004
b_split = b.split()
#print(b_split)
#['ecl:lzr', 'cid:279', 'pid:192cm', 'hcl:1f7352', 'iyr:2014', 'hgt:70cm', 'eyr:1983', 'byr:2004']
#['byr:1937', 'eyr:2021', 'iyr:2017', 'cid:91', 'hgt:183cm', 'hcl:#a97842', 'ecl:blu', 'pid:149192621']
valid = True
for field in b_split:
val = field.split(":")
field_type = val[0]
field_val = val[1]
if field_type == "byr":
year = int(field_val)
if year < 1920 or year > 2002:
valid = False
break
elif field_type == "iyr":
year = int(field_val)
if year < 2010 or year > 2020:
valid = False
break
elif field_type == "eyr":
year = int(field_val)
if year < 2020 or year > 2030:
valid = False
break
elif field_type == "hgt":
#print(f"len units = {field_val[-2:]}")
if field_val[-2:] == "cm":
height = int(field_val[:-2])
#print(f"val string = {field_val[:-2]}, height = {height}")
if height < 150 or height > 193:
valid = False
break
elif field_val[-2:] == "in":
height = int(field_val[:-2])
#print(f"val string = {field_val[:-2]}, height = {height}")
if height < 59 or height > 76:
valid = False
break
else:
valid = False
break
elif field_type == "hcl":
if field_val[0] != "#":
valid = False
break
color = field_val[1:]
if len(color) != 6:
valid = False
break
for char in color:
if not isHexLower(char):
valid = False
break
elif field_type == "ecl":
if field_val != "amb" and field_val != "blu" and field_val != "brn" and field_val != "gry" and field_val != "grn" and field_val != "hzl" and field_val != "oth":
valid = False
break
elif field_type == "pid":
if len(field_val) != 9:
valid = False
break
if not field_val.isdigit():
valid = False
break
elif field_type == "cid":
# skip
pass
else:
valid = False
break
# temp debug
if not valid:
print(f"not valid field_type = {field_type} field_val = {field_val}")
return valid
filename = "data4.txt"
file = open(filename)
filestr = file.read()
a_list = filestr.split("\n\n")
maxindex = len(a_list)
#print(a_list)
print(f"maxindex={maxindex}, maxcolumns={len(a_list[0])}")
b_list = []
for b in a_list:
b_new = b.replace("\n", " ")
b_list.append(b_new)
#print(b_list)
num_valid = 0
for b in b_list:
if "ecl:" in b and "pid:" in b and "eyr:" in b and "hcl:" in b and "byr:" in b and "iyr:" in b and "hgt:" in b:
if validate( b ):
num_valid = num_valid + 1
#print(f"{b}\n")
print(f"Number of valid passports = {num_valid}")
#ecl:gry pid:860033327 eyr:2020 hcl:#fffffd
#byr:1937 iyr:2017 cid:147 hgt:183cm
#hcl:#341e13 ecl:brn iyr:2019 pid:589837530 cid:157 byr:1925 hgt:183cm eyr:2020