# Advent of Code: Day 12

Source

Part 1: Sum all integer values in a JSON object.

def js_sum(js):
if isinstance(js, dict):
return sum(map(js_sum, js.values()))
elif isinstance(js, list):
return sum(map(js_sum, js))
elif isinstance(js, int):
return js
else:
return 0



Due to the nature of JSON, this is very much a recursive problem. There’s really not much else to say. If you have a complex data structure (dict or list), recur into it. Otherwise, if it’s a number add it, if not don’t.

Part 2: Do not recur into any dict that contains the value "red".

Given the structure we already had, the tweak for this is straight forward (if not terribly efficient):

def js_sum(js):
if isinstance(js, dict) and not 'red' in js.values():
return sum(map(js_sum, js.values()))
elif isinstance(js, list):
return sum(map(js_sum, js))
elif isinstance(js, int):
return js
else:
return 0