171 lines
		
	
	
		
			5.7 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			171 lines
		
	
	
		
			5.7 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| # Advent of Code
 | ||
| 
 | ||
| --- Day 4: Passport Processing ---
 | ||
| 
 | ||
|    You arrive at the airport only to realize that you grabbed your North Pole Credentials
 | ||
|    instead of your passport. While these documents are extremely similar, North Pole
 | ||
|    Credentials aren't issued by a country and therefore aren't actually valid documentation
 | ||
|    for travel in most of the world.
 | ||
| 
 | ||
|    It seems like you're not the only one having problems, though; a very long line has formed
 | ||
|    for the automatic passport scanners, and the delay could upset your travel itinerary.
 | ||
| 
 | ||
|    Due to some questionable network security, you realize you might be able to solve both of
 | ||
|    these problems at the same time.
 | ||
| 
 | ||
|    The automatic passport scanners are slow because they're having trouble detecting which
 | ||
|    passports have all required fields. The expected fields are as follows:
 | ||
| 
 | ||
|      • byr (Birth Year)
 | ||
|      • iyr (Issue Year)
 | ||
|      • eyr (Expiration Year)
 | ||
|      • hgt (Height)
 | ||
|      • hcl (Hair Color)
 | ||
|      • ecl (Eye Color)
 | ||
|      • pid (Passport ID)
 | ||
|      • cid (Country ID)
 | ||
| 
 | ||
|    Passport data is validated in batch files (your puzzle input). Each passport is represented
 | ||
|    as a sequence of key:value pairs separated by spaces or newlines. Passports are separated
 | ||
|    by blank lines.
 | ||
| 
 | ||
|    Here is an example batch file containing four passports:
 | ||
| 
 | ||
|  ecl:gry pid:860033327 eyr:2020 hcl:#fffffd
 | ||
|  byr:1937 iyr:2017 cid:147 hgt:183cm
 | ||
| 
 | ||
|  iyr:2013 ecl:amb cid:350 eyr:2023 pid:028048884
 | ||
|  hcl:#cfa07d byr:1929
 | ||
| 
 | ||
|  hcl:#ae17e1 iyr:2013
 | ||
|  eyr:2024
 | ||
|  ecl:brn pid:760753108 byr:1931
 | ||
|  hgt:179cm
 | ||
| 
 | ||
|  hcl:#cfa07d eyr:2025 pid:166559648
 | ||
|  iyr:2011 ecl:brn hgt:59in
 | ||
| 
 | ||
|    The first passport is valid - all eight fields are present. The second passport is invalid
 | ||
|    - it is missing hgt (the Height field).
 | ||
| 
 | ||
|    The third passport is interesting; the only missing field is cid, so it looks like data
 | ||
|    from North Pole Credentials, not a passport at all! Surely, nobody would mind if you made
 | ||
|    the system temporarily ignore missing cid fields. Treat this "passport" as valid.
 | ||
| 
 | ||
|    The fourth passport is missing two fields, cid and byr. Missing cid is fine, but missing
 | ||
|    any other field is not, so this passport is invalid.
 | ||
| 
 | ||
|    According to the above rules, your improved system would report 2 valid passports.
 | ||
| 
 | ||
|    Count the number of valid passports - those that have all required fields. Treat cid as
 | ||
|    optional. In your batch file, how many passports are valid?
 | ||
| 
 | ||
|    Your puzzle answer was 256.
 | ||
| 
 | ||
| --- 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?
 | ||
| 
 | ||
|    Your puzzle answer was 198.
 | ||
| 
 | ||
|    Both parts of this puzzle are complete! They provide two gold stars: **
 | ||
| 
 | ||
|    At this point, you should return to your Advent calendar and try another puzzle.
 | ||
| 
 | ||
|    If you still want to see it, you can get your puzzle input.
 | ||
| 
 | ||
|    You can also [Shareon Twitter Mastodon] this puzzle.
 | ||
| 
 | ||
| References
 | ||
| 
 | ||
|    Visible links
 | ||
|    . https://adventofcode.com/
 | ||
|    . https://adventofcode.com/2020/about
 | ||
|    . https://adventofcode.com/2020/events
 | ||
|    . https://adventofcode.com/2020/settings
 | ||
|    . https://adventofcode.com/2020/auth/logout
 | ||
|    . Advent of Code Supporter
 | ||
| 	https://adventofcode.com/2020/support
 | ||
|    . https://adventofcode.com/2020
 | ||
|    . https://adventofcode.com/2020
 | ||
|    . https://adventofcode.com/2020/support
 | ||
|    . https://adventofcode.com/2020/sponsors
 | ||
|    . https://adventofcode.com/2020/leaderboard
 | ||
|    . https://adventofcode.com/2020/stats
 | ||
|    . https://adventofcode.com/2020/sponsors
 | ||
|    . https://github.com/
 | ||
|    . https://adventofcode.com/2020
 | ||
|    . https://adventofcode.com/2020/day/4/input
 |