1234567891011121314151617181920212223 |
- #!/usr/bin/python3
-
- import collections
-
- with open('data/10.txt', 'r') as file:
- targets = collections.defaultdict(lambda: {'inputs': [], 'low': -1, 'high': -1})
- lines = list(map(str.split, map(str.strip, file.readlines())))
- for instr in lines:
- if instr[0] == 'value':
- targets[' '.join(instr[4:6])]['inputs'].append(int(instr[1]))
- else:
- targets[' '.join(instr[0:2])]['low'] = ' '.join(instr[5:7])
- targets[' '.join(instr[0:2])]['high'] = ' '.join(instr[10:12])
-
- pending = set(targets.keys())
- while len(pending):
- for k, bot in [(k, targets[k]) for k in pending if len(targets[k]['inputs']) == 2]:
- targets[bot['low']]['inputs'].append(min(bot['inputs']))
- targets[bot['high']]['inputs'].append(max(bot['inputs']))
- pending.remove(k)
-
- print("Part 1: %s" % [k for k,v in targets.items() if 61 in v['inputs'] and 17 in v['inputs']][0])
- print("Part 2: %i" % (targets['output 0']['inputs'][0] * targets['output 1']['inputs'][0] * targets['output 2']['inputs'][0]))
|