package day12 import ( "encoding/json" "fmt" "tools" ) func getNumberSum(input interface{}, ignoreRed bool) (sum float64) { switch input.(type) { case float64: sum += input.(float64) case string: case []interface{}: for _, v := range input.([]interface{}) { sum += getNumberSum(v, ignoreRed) } case map[string]interface{}: for k, v := range input.(map[string]interface{}) { if k == "red" || v == "red" { return 0 } sum += getNumberSum(v, ignoreRed) } default: fmt.Printf("Don't know how to handle type %T\n", input) } return sum } func Part1(puzzle tools.AoCPuzzle) interface{} { jsonInput := []byte(puzzle.GetInputArray()[0]) var jsonData map[string]interface{} sum := 0.0 err := json.Unmarshal(jsonInput, &jsonData) if err != nil { fmt.Println(err) } else { for _, v := range jsonData { sum += getNumberSum(v, false) } } return sum } func Part2(puzzle tools.AoCPuzzle) interface{} { jsonInput := []byte(puzzle.GetInputArray()[0]) var jsonData map[string]interface{} sum := 0.0 err := json.Unmarshal(jsonInput, &jsonData) if err != nil { fmt.Println(err) } else { for _, v := range jsonData { sum += getNumberSum(v, true) } } return sum }