add solution 4, parts 1 and 2
This commit is contained in:
parent
e3daad9d75
commit
ef268438b6
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,13 @@
|
||||||
|
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
|
|
@ -0,0 +1,138 @@
|
||||||
|
#!/usr/bin/python
|
||||||
|
|
||||||
|
import re
|
||||||
|
|
||||||
|
class Passport:
|
||||||
|
def __init__(self):
|
||||||
|
self.info = {
|
||||||
|
"byr": "",
|
||||||
|
"iyr": "",
|
||||||
|
"eyr": "",
|
||||||
|
"hgt": "",
|
||||||
|
"hcl": "",
|
||||||
|
"ecl": "",
|
||||||
|
"pid": "",
|
||||||
|
"cid": "",
|
||||||
|
}
|
||||||
|
def set(self, info, data):
|
||||||
|
self.info[info] = data
|
||||||
|
def exist(self, info):
|
||||||
|
return not self.info[info] == ""
|
||||||
|
def ret(self, info):
|
||||||
|
return self.info[info]
|
||||||
|
|
||||||
|
def reader(line):
|
||||||
|
p = Passport()
|
||||||
|
spaced = line.split(' ')
|
||||||
|
for i in spaced:
|
||||||
|
pairs = i.split(':')
|
||||||
|
p.set(pairs[0], pairs[1])
|
||||||
|
return p
|
||||||
|
|
||||||
|
def alphasplit(s):
|
||||||
|
return (''.join(filter(str.isdigit, s)) or None,
|
||||||
|
''.join(filter(str.isalpha, s)) or None)
|
||||||
|
|
||||||
|
def color(line):
|
||||||
|
if not line[0] == "#": return False
|
||||||
|
if not len(line) == 7: return False
|
||||||
|
line.lower()
|
||||||
|
gcnt = 0
|
||||||
|
for i in line[1:]:
|
||||||
|
cnt = 0
|
||||||
|
for j in [c for c in 'abcdef1234567890']:
|
||||||
|
if i == j: cnt += 1
|
||||||
|
if cnt > 1: gcnt += 1
|
||||||
|
if not gcnt == 7: return False
|
||||||
|
return True
|
||||||
|
|
||||||
|
def mcolor(line):
|
||||||
|
if not line[0] == "#": return False
|
||||||
|
if not len(line) == 7: return False
|
||||||
|
acceptable = [c for c in 'abcdef1234567890']
|
||||||
|
line = line.lower().rstrip()
|
||||||
|
m = re.search(r'^#(?:[0-9a-fA-F]{3}){1,2}$', line)
|
||||||
|
if not m: return False
|
||||||
|
return True
|
||||||
|
|
||||||
|
def s_verify(p):
|
||||||
|
if p.exist('byr') and \
|
||||||
|
p.exist('iyr') and \
|
||||||
|
p.exist('eyr') and \
|
||||||
|
p.exist('hgt') and \
|
||||||
|
p.exist('hcl') and \
|
||||||
|
p.exist('ecl') and \
|
||||||
|
p.exist('pid'): return True
|
||||||
|
return False
|
||||||
|
|
||||||
|
def c_verify(p):
|
||||||
|
if not s_verify(p): return False
|
||||||
|
for i in ['byr', 'iyr', 'eyr']:
|
||||||
|
if not len(p.ret(i)) == 4: return False
|
||||||
|
if int(p.ret('byr')) >= 1920 and \
|
||||||
|
int(p.ret('byr')) <= 2002: pass
|
||||||
|
else:
|
||||||
|
return False
|
||||||
|
if int(p.ret('iyr')) >= 2010 and \
|
||||||
|
int(p.ret('iyr')) <= 2020: pass
|
||||||
|
else:
|
||||||
|
return False
|
||||||
|
if int(p.ret('eyr')) >= 2020 and \
|
||||||
|
int(p.ret('eyr')) <= 2030: pass
|
||||||
|
else:
|
||||||
|
return False
|
||||||
|
|
||||||
|
spl = alphasplit(p.ret('hgt'))
|
||||||
|
units = spl[1]
|
||||||
|
if units == None:
|
||||||
|
return False
|
||||||
|
num = spl[0]
|
||||||
|
if units == "cm":
|
||||||
|
if int(num) >= 150 and int(num) <= 193: pass
|
||||||
|
else: return False
|
||||||
|
elif units == "in":
|
||||||
|
if int(num) >= 59 and int(num) <= 76: pass
|
||||||
|
else: return False
|
||||||
|
else:
|
||||||
|
return False
|
||||||
|
|
||||||
|
if not mcolor(p.ret('hcl')): return False
|
||||||
|
|
||||||
|
if not p.ret('ecl') in 'amb blu brn gry grn hzl oth'.split(' '): return False
|
||||||
|
if not len(p.ret('pid')) == 9: return False
|
||||||
|
|
||||||
|
return True
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
fd = open('input', 'r')
|
||||||
|
lines = fd.readlines()
|
||||||
|
buf = [""]
|
||||||
|
|
||||||
|
for i in lines:
|
||||||
|
i = i.rstrip()
|
||||||
|
if len(i) == 0:
|
||||||
|
buf.append("")
|
||||||
|
continue
|
||||||
|
if buf[-1] == "":
|
||||||
|
buf[-1] = i
|
||||||
|
else:
|
||||||
|
buf[-1] += " "
|
||||||
|
buf[-1] += i
|
||||||
|
|
||||||
|
passports = []
|
||||||
|
|
||||||
|
for i in buf:
|
||||||
|
passports.append(reader(i))
|
||||||
|
|
||||||
|
cnt = 0
|
||||||
|
for i in passports:
|
||||||
|
if s_verify(i): cnt += 1
|
||||||
|
|
||||||
|
print(cnt)
|
||||||
|
|
||||||
|
cnt = 0
|
||||||
|
for i in passports:
|
||||||
|
if c_verify(i): cnt += 1
|
||||||
|
|
||||||
|
print(cnt)
|
Loading…
Reference in New Issue