@@ -0,0 +1,87 @@ | |||
import re | |||
def valid(ppt): | |||
k = ppt.keys() | |||
for v in ["byr", "iyr", "eyr", "hgt", "hcl", "ecl", "pid"]: | |||
if v not in k: | |||
print(f"Missing {v}.") | |||
return False | |||
# byr = ppt["byr"] | |||
# byrm = re.match(r"^(\d{4})$", byr) | |||
# if byrm == None: | |||
# print(f"Bad BYR: {byr}.") | |||
# return False | |||
# byrn = int(byrm[1]) | |||
# if byrn < 1920 or byrn > 2002: | |||
# print(f"Bad BYR: {byr}.") | |||
# return False | |||
# iyr = ppt["iyr"] | |||
# iyrm = re.match(r"^(\d{4})$", iyr) | |||
# if iyrm == None: | |||
# print(f"Bad IYR: {iyr}.") | |||
# return False | |||
# iyrn = int(iyrm[1]) | |||
# if iyrn < 2010 or iyrn > 2020: | |||
# print(f"Bad IYR: {iyr}.") | |||
# return False | |||
# eyr = ppt["eyr"] | |||
# eyrm = re.match(r"^(\d{4})$", eyr) | |||
# if eyrm == None: | |||
# print(f"Bad EYR: {eyr}.") | |||
# return False | |||
# eyrn = int(eyrm[1]) | |||
# if eyrn < 2020 or eyrn > 2030: | |||
# print(f"Bad EYR: {eyr}.") | |||
# return False | |||
# hgt = ppt["hgt"] | |||
# hgtm = re.match(r"^(\d{2,3})(cm|in)$", hgt) | |||
# if hgtm == None: | |||
# print(f"Bad HGT: {hgt}.") | |||
# return False | |||
# hgtn = int(hgtm[1]) | |||
# hgtu = hgtm[2] | |||
# if (hgtu == "cm" and (hgtn < 150 or hgtn > 193)) or (hgtu == "in" and (hgtn < 59 or hgtn > 76)): | |||
# print(f"Bad HGT: {hgt}.") | |||
# return False | |||
# hcl = ppt["hcl"] | |||
# if re.search(r"^#[0-9a-f]{6}$", hcl) == None: | |||
# print(f"Bad HCL: {hcl}.") | |||
# return False | |||
# ecl = ppt["ecl"] | |||
# if ecl not in ["amb", "blu", "brn", "gry", "grn", "hzl", "oth"]: | |||
# print(f"Bad ECL: {ecl}.") | |||
# return False | |||
# pid = ppt["pid"] | |||
# if re.search(r"^[0-9]{9}$", pid) == None: | |||
# print(f"Bad PID: {pid}.") | |||
# return False | |||
return True | |||
def main(): | |||
with open("input4.txt") as file: | |||
text = file.read() | |||
ppts = text.split("\n\n") | |||
print(f"I have {len(ppts)} passports.") | |||
count = 0 | |||
cinv = 0 | |||
for ppt in ppts: | |||
ppt = ppt.replace("\n", " ") | |||
pptchunks = ppt.split(" ") | |||
pptdct = {} | |||
for chunk in pptchunks: | |||
try: | |||
bits = chunk.split(":") | |||
pptdct[bits[0]] = bits[1] | |||
except: | |||
print(ppt) | |||
# print(ppt) | |||
# print(pptdct) | |||
if valid(pptdct): | |||
count += 1 | |||
else: | |||
cinv += 1 | |||
print(f"There are {count} valid passports and {cinv} invalid ones.") | |||
if __name__ == "__main__": | |||
main() |
@@ -0,0 +1,87 @@ | |||
import re | |||
def valid(ppt): | |||
k = ppt.keys() | |||
for v in ["byr", "iyr", "eyr", "hgt", "hcl", "ecl", "pid"]: | |||
if v not in k: | |||
print(f"Missing {v}.") | |||
return False | |||
byr = ppt["byr"] | |||
byrm = re.match(r"^(\d{4})$", byr) | |||
if byrm == None: | |||
print(f"Bad BYR: {byr}.") | |||
return False | |||
byrn = int(byrm[1]) | |||
if byrn < 1920 or byrn > 2002: | |||
print(f"Bad BYR: {byr}.") | |||
return False | |||
iyr = ppt["iyr"] | |||
iyrm = re.match(r"^(\d{4})$", iyr) | |||
if iyrm == None: | |||
print(f"Bad IYR: {iyr}.") | |||
return False | |||
iyrn = int(iyrm[1]) | |||
if iyrn < 2010 or iyrn > 2020: | |||
print(f"Bad IYR: {iyr}.") | |||
return False | |||
eyr = ppt["eyr"] | |||
eyrm = re.match(r"^(\d{4})$", eyr) | |||
if eyrm == None: | |||
print(f"Bad EYR: {eyr}.") | |||
return False | |||
eyrn = int(eyrm[1]) | |||
if eyrn < 2020 or eyrn > 2030: | |||
print(f"Bad EYR: {eyr}.") | |||
return False | |||
hgt = ppt["hgt"] | |||
hgtm = re.match(r"^(\d{2,3})(cm|in)$", hgt) | |||
if hgtm == None: | |||
print(f"Bad HGT: {hgt}.") | |||
return False | |||
hgtn = int(hgtm[1]) | |||
hgtu = hgtm[2] | |||
if (hgtu == "cm" and (hgtn < 150 or hgtn > 193)) or (hgtu == "in" and (hgtn < 59 or hgtn > 76)): | |||
print(f"Bad HGT: {hgt}.") | |||
return False | |||
hcl = ppt["hcl"] | |||
if re.search(r"^#[0-9a-f]{6}$", hcl) == None: | |||
print(f"Bad HCL: {hcl}.") | |||
return False | |||
ecl = ppt["ecl"] | |||
if ecl not in ["amb", "blu", "brn", "gry", "grn", "hzl", "oth"]: | |||
print(f"Bad ECL: {ecl}.") | |||
return False | |||
pid = ppt["pid"] | |||
if re.search(r"^[0-9]{9}$", pid) == None: | |||
print(f"Bad PID: {pid}.") | |||
return False | |||
return True | |||
def main(): | |||
with open("input4.txt") as file: | |||
text = file.read() | |||
ppts = text.split("\n\n") | |||
print(f"I have {len(ppts)} passports.") | |||
count = 0 | |||
cinv = 0 | |||
for ppt in ppts: | |||
ppt = ppt.replace("\n", " ") | |||
pptchunks = ppt.split(" ") | |||
pptdct = {} | |||
for chunk in pptchunks: | |||
try: | |||
bits = chunk.split(":") | |||
pptdct[bits[0]] = bits[1] | |||
except: | |||
print(ppt) | |||
# print(ppt) | |||
# print(pptdct) | |||
if valid(pptdct): | |||
count += 1 | |||
else: | |||
cinv += 1 | |||
print(f"There are {count} valid passports and {cinv} invalid ones.") | |||
if __name__ == "__main__": | |||
main() |