|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
- 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()
|