fn main [ var lines := list_break_to_lines(read_lazy(h[0])); const x := len(lines[0]) + 2; const y := len(lines) + 2; var a := array_fill(byte, '.', [x, y]); for j := 1 to y - 1 do [ var line := lines[j - 1]; for i := 1 to x - 1 do [ a[i, j] := line[i - 1]; ] ] var sum := 0; fn is_digit(i j : int) := a[i, j] >= '0' and a[i, j] <= '9'; fn is_symbol(i j : int) := not is_digit(i, j) and a[i, j] <> '.'; for j := 1 to y - 1 do [ for i := 1 to x - 1 do [ if is_digit(i, j) then [ var num : int := a[i, j] - '0'; var si := i; i += 1; while is_digit(i, j) do [ num := num * 10 + a[i, j] - '0'; i += 1; ] if is_symbol(si - 1, j) or is_symbol(i, j) then goto got_it; for q := si - 1 to i + 1 do if is_symbol(q, j - 1) or is_symbol(q, j + 1) then goto got_it; continue; got_it: sum += num; ] ] ] write(h[1], ntos(sum) + nl); ]