add remaining code and input files from 2020
This commit is contained in:
1 parent
c10382b0c0
commit
23b2e01280
41 files changed
+11320
-37
No files matched your search
@@ -0,0 +1,78 @@
|
||||
import re
|
||||
|
||||
|
||||
# Valid Passport if all fields on it
|
||||
def valid_passport(line):
|
||||
# Must contain "byr:", "pid:", "iyr:". "eyr:", "hgt:" "hcl:" und "ecl:"
|
||||
contains = ["byr:", "pid:", "iyr:", "eyr:", "hgt:", "hcl:", "ecl:"]
|
||||
return all(i in line for i in contains)
|
||||
|
||||
|
||||
# Bene's function for height
|
||||
def valid_height(height):
|
||||
match = re.compile(r"(\d+)(cm|in)").search(height)
|
||||
if match is None: return False
|
||||
num, unit = match.groups()
|
||||
if unit == 'cm': return 150 <= int(num) <= 193
|
||||
if unit == 'in': return 59 <= int(num) <= 76
|
||||
return False
|
||||
|
||||
|
||||
# Valid passport if fields also contain fitting values
|
||||
def valid_passport2(line):
|
||||
# Must contain "byr:", "pid:", "iyr:". "eyr:", "hgt:" "hcl:" und "ecl:"
|
||||
contains = ["byr:", "pid:", "iyr:", "eyr:", "hgt:", "hcl:", "ecl:"]
|
||||
if all(i in line for i in contains):
|
||||
groups = re.compile(r"(?P<key>\w+):(?P<value>\S+)")
|
||||
for (key, value) in groups.findall(line):
|
||||
if key == "byr":
|
||||
if not (len(value) == 4 and (1920 <= int(value) <= 2002)):
|
||||
return False
|
||||
elif key == "iyr":
|
||||
if not (len(value) == 4 and (2010 <= int(value) <= 2020)):
|
||||
return False
|
||||
elif key == "eyr":
|
||||
if not (len(value) == 4 and (2020 <= int(value) <= 2030)):
|
||||
return False
|
||||
elif key == "hgt":
|
||||
pattern1 = re.compile(r"(1[5-8][0-9]|19[0-3])cm")
|
||||
pattern2 = re.compile(r"(59|6[0-9]|7[0-6])in")
|
||||
if not valid_height(value):
|
||||
return False
|
||||
elif key == "hcl":
|
||||
pattern = re.compile(r"#([0-9]|[a-f]){6}")
|
||||
if not pattern.match(value):
|
||||
return False
|
||||
elif key == "ecl":
|
||||
if value not in ["amb", "blu", "brn", "gry", "grn", "hzl", "oth"]:
|
||||
return False
|
||||
elif key == "pid":
|
||||
pattern = re.compile(r"\d{9}")
|
||||
if not (pattern.match(value) and len(value) == 9):
|
||||
return False
|
||||
else:
|
||||
if not key == "cid":
|
||||
return False
|
||||
return True
|
||||
return False
|
||||
|
||||
|
||||
with open(r"C:\Users\Maya\Desktop\Uni\WS_2021\AoC\input04") as f:
|
||||
lines = f.read()
|
||||
lines = lines.replace("\n\n", '\t').replace("\n", " ").split("\t")
|
||||
|
||||
sum(valid_passport(p) for p in lines)
|
||||
|
||||
# count for challenge 1
|
||||
count = 0
|
||||
for l in lines:
|
||||
if valid_passport(l):
|
||||
count += 1
|
||||
print(count)
|
||||
|
||||
# count for challenge 2
|
||||
count2 = 0
|
||||
for l in lines:
|
||||
if valid_passport2(l):
|
||||
count2 += 1
|
||||
print(count2)
|
||||
Reference in new issue
Block a user