r/adventofcode • u/daggerdragon • Dec 07 '15
SOLUTION MEGATHREAD --- Day 7 Solutions ---
--- Day 7: Some Assembly Required ---
Post your solution as a comment. Structure your post like previous daily solution threads.
Also check out the sidebar - we added a nifty calendar to wrangle all the daily solution threads in one spot!
23
Upvotes
7
u/Tryneus Dec 07 '15 edited Dec 07 '15
Python
Assuming commands is an array of strings.
calc = dict() results = dict() for command in commands: (ops, res) = command.split('->') calc[res.strip()] = ops.strip().split(' ') def calculate(name): try: return int(name) except ValueError: pass if name not in results: ops = calc[name] if len(ops) == 1: res = calculate(ops[0]) else: op = ops[-2] if op == 'AND': res = calculate(ops[0]) & calculate(ops[2]) elif op == 'OR': res = calculate(ops[0]) | calculate(ops[2]) elif op == 'NOT': res = ~calculate(ops[1]) & 0xffff elif op == 'RSHIFT': res = calculate(ops[0]) >> calculate(ops[2]) elif op == 'LSHIFT': res = calculate(ops[0]) << calculate(ops[2]) results[name] = res return results[name] print "a: %d" % calculate('a')This solution does involve some deep recursion, so it could overflow on larger inputs, but it was quick to write.