17
-
fn int_anywhere_decoder() -> decode.Decoder(Nested) {
17
+
fn nested_decoder() -> decode.Decoder(Nested) {
decode.one_of(decode.int |> decode.map(IntValue), or: [
20
-
decode.list(int_anywhere_decoder()) |> decode.map(NestedList),
21
-
decode.dict(decode.string, int_anywhere_decoder()) |> decode.map(NestedDict),
20
+
decode.list(nested_decoder()) |> decode.map(NestedList),
21
+
decode.dict(decode.string, nested_decoder()) |> decode.map(NestedDict),
decode.string |> decode.map(StringValue),
|> list.fold(0, fn(acc, data) { acc + get_total_number(data, no_red) })
32
-
let has_red = case no_red {
35
-
|> dict.fold(False, fn(state, _, data) {
37
-
StringValue("red") -> True
37
+
|> list.any(fn(data) { data == StringValue("red") })
read(from: "../input.json")
61
-
|> json.parse(int_anywhere_decoder())
57
+
|> json.parse(nested_decoder())
get_total_number(input, no_red: False)