···
import gleam/dict.{type Dict}
import gleam/dynamic/decode
import gleam/int.{to_string}
import gleam/io.{println}
import gleam/result.{unwrap}
9
-
import gleam/string.{trim}
···
28
-
fn get_total_number_dict(data: Dict(String, Nested)) {
30
-
|> dict.fold(0, fn(acc, _, data) {
31
-
let add = case data {
32
-
NestedList(items) -> get_total_number_list(items)
33
-
NestedDict(items) -> get_total_number_dict(items)
41
-
fn get_total_number_list(data: List(Nested)) {
43
-
|> list.fold(0, fn(acc, data) {
44
-
let add = case data {
45
-
NestedList(items) -> get_total_number_list(items)
46
-
NestedDict(items) -> get_total_number_dict(items)
26
+
fn handle_calc(data: Nested, no_red) {
28
+
NestedList(items) -> get_total_number_list(items, no_red)
29
+
NestedDict(items) -> get_total_number_dict(items, no_red)
54
-
fn get_total_number_dict_no_red(data: Dict(String, Nested)) {
57
-
|> dict.fold(False, fn(state, _, data) {
59
-
StringValue("red") -> True
35
+
fn get_total_number_dict(data: Dict(String, Nested), no_red) {
36
+
let has_red = case no_red {
39
+
|> dict.fold(False, fn(state, _, data) {
41
+
StringValue("red") -> True
67
-
|> dict.fold(0, fn(acc, _, data) {
68
-
let add = case data {
69
-
NestedList(items) -> get_total_number_list_no_red(items)
70
-
NestedDict(items) -> get_total_number_dict_no_red(items)
51
+
|> dict.fold(0, fn(acc, _, data) { acc + handle_calc(data, no_red) })
79
-
fn get_total_number_list_no_red(data: List(Nested)) {
55
+
fn get_total_number_list(data: List(Nested), no_red no_red) {
81
-
|> list.fold(0, fn(acc, data) {
82
-
let add = case data {
83
-
NestedList(items) -> get_total_number_list_no_red(items)
84
-
NestedDict(items) -> get_total_number_dict_no_red(items)
57
+
|> list.fold(0, fn(acc, data) { acc + handle_calc(data, no_red) })
···
|> json.parse(int_anywhere_decoder())
99
-
get_total_number_list([input])
67
+
get_total_number_list([input], no_red: False)
103
-
get_total_number_list_no_red([input])
71
+
get_total_number_list([input], no_red: True)