You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
47 lines
1.4 KiB
47 lines
1.4 KiB
#!/usr/bin/env python3
|
|
|
|
import sys
|
|
|
|
def search_num(d, val):
|
|
for k,v in d.items():
|
|
if val == v:
|
|
return str(k)
|
|
|
|
def decode(inp, out):
|
|
nums = {}
|
|
for i in sorted(inp, key=len):
|
|
if len(i) == 2: nums[1] = set(i)
|
|
elif len(i) == 3: nums[7] = set(i)
|
|
elif len(i) == 4: nums[4] = set(i)
|
|
elif len(i) == 5: #2, 3, 5
|
|
if nums[1] <= set(i): nums[3] = set(i)
|
|
elif len(i) == 6: #0, 6, 9
|
|
if nums[4] <= set(i): nums[9] = set(i)
|
|
elif nums[1] <= set(i): nums[0] = set(i)
|
|
else: nums[6] = set(i)
|
|
elif len(i) == 7: nums[8] = set(i)
|
|
for i in inp:
|
|
if set(i) not in nums.values():
|
|
if set(i) <= nums[6]: nums[5] = set(i)
|
|
else: nums[2] = set(i)
|
|
return int(''.join([search_num(nums, set(o)) for o in out]))
|
|
|
|
if __name__ == '__main__':
|
|
lines = open(sys.argv[1]).read().strip('\n\n').split('\n') # or split \n\n or sth similar
|
|
inp = [i.split(' | ') for i in lines]
|
|
inout = [(i[0].split(' '), i[1].split(' ')) for i in inp]
|
|
|
|
# challenge 1
|
|
sums = 0
|
|
for _,out in inout:
|
|
for o in out:
|
|
if len(o) == 2 or len(o) == 3 or len(o) == 4 or len(o) == 7:
|
|
sums += 1
|
|
|
|
res1 = str(sums)
|
|
print("challenge 1:" +"\n" + res1 + "\n")
|
|
|
|
# challenge 2
|
|
res2 = str(sum([decode(i,o) for i,o in inout]))
|
|
print("challenge 2:" +"\n" + res2 + "\n")
|
|
|
|
|