[WIP] Solution to problem 4 part 2 in Python
This commit is contained in:
parent
65720af19d
commit
d9f3206e1d
160
src/P4.py
160
src/P4.py
@ -83,5 +83,165 @@ def part_1() -> None:
|
||||
print(f"There are {valid_passports} valid passports")
|
||||
|
||||
|
||||
# --- Part Two ---
|
||||
|
||||
# The line is moving more quickly now, but you overhear airport security
|
||||
# talking about how passports with invalid data are getting through. Better add
|
||||
# some data validation, quick!
|
||||
|
||||
# You can continue to ignore the cid field, but each other field has strict
|
||||
# rules about what values are valid for automatic validation:
|
||||
|
||||
# byr (Birth Year) - four digits; at least 1920 and at most 2002.
|
||||
# iyr (Issue Year) - four digits; at least 2010 and at most 2020.
|
||||
# eyr (Expiration Year) - four digits; at least 2020 and at most 2030.
|
||||
# hgt (Height) - a number followed by either cm or in:
|
||||
# If cm, the number must be at least 150 and at most 193.
|
||||
# If in, the number must be at least 59 and at most 76.
|
||||
# hcl (Hair Color) - a # followed by exactly six characters 0-9 or a-f.
|
||||
# ecl (Eye Color) - exactly one of: amb blu brn gry grn hzl oth.
|
||||
# pid (Passport ID) - a nine-digit number, including leading zeroes.
|
||||
# cid (Country ID) - ignored, missing or not.
|
||||
|
||||
# Your job is to count the passports where all required fields are both present
|
||||
# and valid according to the above rules. Here are some example values:
|
||||
|
||||
# byr valid: 2002
|
||||
# byr invalid: 2003
|
||||
|
||||
# hgt valid: 60in
|
||||
# hgt valid: 190cm
|
||||
# hgt invalid: 190in
|
||||
# hgt invalid: 190
|
||||
|
||||
# hcl valid: #123abc
|
||||
# hcl invalid: #123abz
|
||||
# hcl invalid: 123abc
|
||||
|
||||
# ecl valid: brn
|
||||
# ecl invalid: wat
|
||||
|
||||
# pid valid: 000000001
|
||||
# pid invalid: 0123456789
|
||||
|
||||
# Here are some invalid passports:
|
||||
|
||||
# eyr:1972 cid:100
|
||||
# hcl:#18171d ecl:amb hgt:170 pid:186cm iyr:2018 byr:1926
|
||||
|
||||
# iyr:2019
|
||||
# hcl:#602927 eyr:1967 hgt:170cm
|
||||
# ecl:grn pid:012533040 byr:1946
|
||||
|
||||
# hcl:dab227 iyr:2012
|
||||
# ecl:brn hgt:182cm pid:021572410 eyr:2020 byr:1992 cid:277
|
||||
|
||||
# hgt:59cm ecl:zzz
|
||||
# eyr:2038 hcl:74454a iyr:2023
|
||||
# pid:3556412378 byr:2007
|
||||
|
||||
# Here are some valid passports:
|
||||
|
||||
# pid:087499704 hgt:74in ecl:grn iyr:2012 eyr:2030 byr:1980
|
||||
# hcl:#623a2f
|
||||
|
||||
# eyr:2029 ecl:blu cid:129 byr:1989
|
||||
# iyr:2014 pid:896056539 hcl:#a97842 hgt:165cm
|
||||
|
||||
# hcl:#888785
|
||||
# hgt:164cm byr:2001 iyr:2015 cid:88
|
||||
# pid:545766238 ecl:hzl
|
||||
# eyr:2022
|
||||
|
||||
# iyr:2010 hgt:158cm hcl:#b6652a ecl:blu byr:1944 eyr:2021 pid:093154719
|
||||
|
||||
# Count the number of valid passports - those that have all required fields and
|
||||
# valid values. Continue to treat cid as optional. In your batch file, how many
|
||||
# passports are valid?
|
||||
|
||||
|
||||
# def is_valid(field: str) -> bool:
|
||||
# # print(f"checking {field}")
|
||||
# if field[:3] == "byr" and len(field[4:]) == 4:
|
||||
# # print("byr?")
|
||||
# if int(field[4:]) > 1920 or int(field[4:]) < 2002:
|
||||
# # print("passed")
|
||||
# return True
|
||||
# if field[:3] == "iyr" and len(field[4:]) == 4:
|
||||
# # print("iyr?")
|
||||
# if int(field[4:]) > 2010 or int(field[4:]) < 2020:
|
||||
# # print("passed")
|
||||
# return True
|
||||
# if field[:3] == "eyr" and len(field[4:]) == 4:
|
||||
# # print("eyr?")
|
||||
# if int(field[4:]) > 2020 or int(field[4:]) < 2030:
|
||||
# # print("passed")
|
||||
# return True
|
||||
# if (
|
||||
# field[:3] == "hgt"
|
||||
# and len(field[4:-2]) > 0
|
||||
# and type(int(field[4:-2])) == int
|
||||
# ):
|
||||
# # print("hgt?")
|
||||
# if field[-2:] == "cm":
|
||||
# # print("cm?")
|
||||
# if int(field[4:-2]) > 150 or int(field[4:-2]) < 193:
|
||||
# # print("passed")
|
||||
# return True
|
||||
# if field[-2:] == "in":
|
||||
# # print("in?")
|
||||
# if int(field[4:-2]) > 59 or int(field[4:-2]) < 76:
|
||||
# # print("passed")
|
||||
# return True
|
||||
# if field[:3] == "hcl" and len(field[4:]) == 7:
|
||||
# # print("hcl?")
|
||||
# valid_char = 0
|
||||
# for c in field[5:]:
|
||||
# if c in "0123456789abcdef":
|
||||
# valid_char += 1
|
||||
# if valid_char == 6:
|
||||
# # print("passed")
|
||||
# return True
|
||||
# if field[:3] == "ecl":
|
||||
# # print("ecl?")
|
||||
# if field[4:] in ["amb", "blu", "brn", "gry", "grn", "hzl", "oth"]:
|
||||
# # print("passed")
|
||||
# return True
|
||||
# if field[:3] == "pid":
|
||||
# # print("pid?")
|
||||
# if len(field[4:]) == 9 and field[4:].isdigit():
|
||||
# # print("passed")
|
||||
# return True
|
||||
|
||||
|
||||
# def part_2() -> None:
|
||||
# valid_passports = 0
|
||||
# for passport in passports:
|
||||
# if len(passport) > 7:
|
||||
# # print(f"checking passport: {passport}")
|
||||
# valid_fields = 0
|
||||
# for field in passport:
|
||||
# if is_valid(field):
|
||||
# valid_fields += 1
|
||||
# if valid_fields > 7:
|
||||
# # print("passed")
|
||||
# valid_passports += 1
|
||||
# if len(passport) == 7:
|
||||
# # print(f"checking passport: {passport}")
|
||||
# valid_fields = 0
|
||||
# for field in passport:
|
||||
# if is_valid(field):
|
||||
# valid_fields += 1
|
||||
# if "cid" in field:
|
||||
# pass
|
||||
# if valid_fields == 7:
|
||||
# # print("valid passport")
|
||||
# valid_passports += 1
|
||||
# # break
|
||||
|
||||
# print(f"There are {valid_passports} valid passports")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
part_1()
|
||||
# part_2()
|
||||
|
Loading…
Reference in New Issue
Block a user