#!/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")