3/4
This commit is contained in:
63
4/4.py
Executable file
63
4/4.py
Executable file
@@ -0,0 +1,63 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
import re
|
||||
import sys
|
||||
|
||||
L = []
|
||||
with open(sys.argv[1], 'r') as f:
|
||||
L = f.readlines()
|
||||
L = [x.strip() for x in L]
|
||||
|
||||
|
||||
ACCEPTED_FIELDS = {'byr', 'iyr', 'eyr', 'hgt', 'hcl', 'ecl', 'pid'}
|
||||
|
||||
|
||||
# part 1
|
||||
j = 0
|
||||
people = [0]
|
||||
for i in L:
|
||||
if i == '':
|
||||
people.append(0)
|
||||
continue
|
||||
fields = i.split(' ')
|
||||
for f in fields:
|
||||
if f.split(':')[0] in ACCEPTED_FIELDS:
|
||||
people[-1] += 1
|
||||
valid = 0
|
||||
for p in people:
|
||||
if p == len(ACCEPTED_FIELDS):
|
||||
valid += 1
|
||||
print(valid)
|
||||
|
||||
# part 2
|
||||
VALID_ECL = {'amb', 'blu', 'brn', 'gry', 'grn', 'hzl', 'oth'}
|
||||
|
||||
j = 0
|
||||
people = [{'valid': 0, 'byr': '', 'iyr': '', 'eyr': '', 'hgt': '', 'ecl': '', 'pid': ''}]
|
||||
for i in L:
|
||||
if i == '':
|
||||
people.append({'valid': 0, 'byr': '', 'iyr': '', 'eyr': '', 'hgt': '', 'ecl': '', 'pid': ''})
|
||||
continue
|
||||
fields = i.split(' ')
|
||||
for f in fields:
|
||||
if f.split(':')[0] in ACCEPTED_FIELDS:
|
||||
people[-1]['valid'] += 1
|
||||
people[-1][f.split(':')[0]] = f.split(':')[1]
|
||||
|
||||
valid_people = []
|
||||
for p in people:
|
||||
if p['valid'] == len(ACCEPTED_FIELDS):
|
||||
valid_people.append(p)
|
||||
|
||||
valid = 0
|
||||
for v in valid_people:
|
||||
if v['byr'].isdigit() and int(v['byr']) >= 1920 and int(v['byr']) <= 2002 and \
|
||||
v['iyr'].isdigit() and int(v['iyr']) >= 2010 and int(v['iyr']) <= 2020 and \
|
||||
v['eyr'].isdigit() and int(v['eyr']) >= 2020 and int(v['eyr']) <= 2030 and \
|
||||
((v['hgt'].endswith('cm') and (int(v['hgt'].split('cm')[0]) >= 150 and int(v['hgt'].split('cm')[0]) <= 193)) or \
|
||||
(v['hgt'].endswith('in') and (int(v['hgt'].split('in')[0]) >= 59 and int(v['hgt'].split('in')[0]) <= 76 ))) and \
|
||||
(v['hcl'].startswith('#') and len(v['hcl'].split('#')[1]) == 6 and bool(re.match(r'^[0-9a-f]*$', v['hcl'].split('#')[1]))) and \
|
||||
v['ecl'] in VALID_ECL and \
|
||||
len(v['pid']) == 9 and bool(re.match(r'^[0-9]*$', v['pid'])):
|
||||
valid += 1
|
||||
print(valid)
|
||||
1000
4/input.txt
Normal file
1000
4/input.txt
Normal file
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user