Browse Source

Day 4

main
Noëlle 4 years ago
parent
commit
d732fe1a36
2 changed files with 174 additions and 0 deletions
  1. 87
    0
      day4a.py
  2. 87
    0
      day4b.py

+ 87
- 0
day4a.py View File

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

+ 87
- 0
day4b.py View File

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

Loading…
Cancel
Save