Solve 2021 day 7-11
This commit is contained in:
65
2021/d8.py
Normal file
65
2021/d8.py
Normal file
@@ -0,0 +1,65 @@
|
||||
from lib import get_data
|
||||
from itertools import permutations
|
||||
|
||||
data = get_data(__file__).strip()
|
||||
|
||||
code_to_num = {
|
||||
"cf": 1,
|
||||
"acf": 7,
|
||||
"bcdf": 4,
|
||||
"acdeg": 2,
|
||||
"acdfg": 3,
|
||||
"abdfg": 5,
|
||||
"abcefg": 0,
|
||||
"abdefg": 6,
|
||||
"abcdfg": 9,
|
||||
"abcdefg": 8,
|
||||
}
|
||||
|
||||
|
||||
def translate(inn, mapping):
|
||||
out = ""
|
||||
for c in inn:
|
||||
out += mapping[c]
|
||||
return "".join(sorted(out))
|
||||
|
||||
|
||||
def decode(inn, out):
|
||||
s = "abcdefg"
|
||||
m = None
|
||||
for p in permutations(s):
|
||||
m = {k: v for k, v in zip(p, s)}
|
||||
all = set(code_to_num.keys())
|
||||
for in_code in inn:
|
||||
out_code = translate(in_code, m)
|
||||
if out_code in all:
|
||||
all.remove(out_code)
|
||||
|
||||
if len(all) == 0:
|
||||
break
|
||||
else:
|
||||
m = None
|
||||
|
||||
assert m is not None
|
||||
|
||||
o = 0
|
||||
d = 1000
|
||||
for out_code in out:
|
||||
out_code = translate(out_code, m)
|
||||
v = code_to_num[out_code]
|
||||
o += d * v
|
||||
d //= 10
|
||||
return o
|
||||
|
||||
|
||||
s1 = 0
|
||||
s2 = 0
|
||||
for line in data.splitlines():
|
||||
inn, out = line.strip().split(" | ")
|
||||
inn = inn.split()
|
||||
out = out.split()
|
||||
s1 += sum(1 for v in out if len(v) in [2, 3, 4, 7])
|
||||
s2 += decode(inn, out)
|
||||
|
||||
print(s1)
|
||||
print(s2)
|
||||
Reference in New Issue
Block a user