feat(users/Profpatsch): add advent of code 2020 day 1 2 3
Change-Id: I99d2882ac9ef5ede85032132f6727e7bad8f24eb Reviewed-on: https://cl.tvl.fyi/c/depot/+/2564 Tested-by: BuildkiteCI Reviewed-by: Profpatsch <mail@profpatsch.de>
This commit is contained in:
parent
f3d00b84bb
commit
ace8c656be
3 changed files with 165 additions and 0 deletions
77
users/Profpatsch/advent-of-code/2020/02/main.py
Normal file
77
users/Profpatsch/advent-of-code/2020/02/main.py
Normal file
|
@ -0,0 +1,77 @@
|
|||
import sys
|
||||
|
||||
def parse(line):
|
||||
a = line.split(sep=" ", maxsplit=1)
|
||||
assert len(a) == 2
|
||||
fromto = a[0].split(sep="-")
|
||||
assert len(fromto) == 2
|
||||
(from_, to) = (int(fromto[0]), int(fromto[1]))
|
||||
charpass = a[1].split(sep=": ")
|
||||
assert len(charpass) == 2
|
||||
char = charpass[0]
|
||||
assert len(char) == 1
|
||||
pass_ = charpass[1]
|
||||
assert pass_.endswith("\n")
|
||||
pass_ = pass_[:-1]
|
||||
return {
|
||||
"from": from_,
|
||||
"to": to,
|
||||
"char": char,
|
||||
"pass": pass_
|
||||
}
|
||||
|
||||
def char_in_pass(char, pass_):
|
||||
return pass_.count(char)
|
||||
|
||||
def validate_01(entry):
|
||||
no = char_in_pass(entry["char"], entry["pass"])
|
||||
if no < entry["from"]:
|
||||
return { "too-small": entry }
|
||||
elif no > entry["to"]:
|
||||
return { "too-big": entry }
|
||||
else:
|
||||
return { "ok": entry }
|
||||
|
||||
def char_at_pos(char, pos, pass_):
|
||||
assert pos <= len(pass_)
|
||||
return pass_[pos-1] == char
|
||||
|
||||
def validate_02(entry):
|
||||
one = char_at_pos(entry["char"], entry["from"], entry["pass"])
|
||||
two = char_at_pos(entry["char"], entry["to"], entry["pass"])
|
||||
if one and two:
|
||||
return { "both": entry }
|
||||
elif one:
|
||||
return { "one": entry }
|
||||
elif two:
|
||||
return { "two": entry }
|
||||
else:
|
||||
return { "none": entry }
|
||||
|
||||
|
||||
res01 = []
|
||||
res02 = []
|
||||
with open("./input", 'r') as f:
|
||||
for line in f:
|
||||
p = parse(line)
|
||||
res01.append(validate_01(p))
|
||||
res02.append(validate_02(p))
|
||||
|
||||
count01=0
|
||||
for r in res01:
|
||||
print(r)
|
||||
if r.get("ok", False):
|
||||
count01=count01+1
|
||||
|
||||
count02=0
|
||||
for r in res02:
|
||||
print(r)
|
||||
if r.get("one", False):
|
||||
count02=count02+1
|
||||
elif r.get("two", False):
|
||||
count02=count02+1
|
||||
else:
|
||||
pass
|
||||
|
||||
print("count 1: {}".format(count01))
|
||||
print("count 2: {}".format(count02))
|
Loading…
Add table
Add a link
Reference in a new issue