fn main [ var lines := list_break_to_lines(read_lazy(h[0])); var sum := 0; for line in lines do [ line := line[5 .. ]; var sc := list_search(line, ':'); line := line[sc + 2 .. ]; line := list_replace_substring(line, ", ", ","); line := list_replace_substring(line, "; ", ","); var entries := list_break(line, ','); var max_red := 0; var max_green := 0; var max_blue := 0; for e in entries do [ var sp := list_search(e, ' '); var n := ston(e[ .. sp]); e := e[sp + 1 .. ]; if e = "red" then max_red := max(max_red, n); else if e = "green" then max_green := max(max_green, n); else if e = "blue" then max_blue := max(max_blue, n); else abort; ] sum += max_red * max_green * max_blue; ] write(h[1], ntos(sum) + nl); ]