fn main [ var lines := list_break_to_lines(read_lazy(h[0])); var seeds_str := list_break(lines[0], ' ')[1 .. ]; var s := map(seeds_str, ston); var seeds := list_filter_idx(s, lambda(idx v : int) [ return not idx bt 0; ]); var seeds_len := list_filter_idx(s, lambda(idx v : int) [ return idx bt 0; ]); lines := lines[1 .. ]; while len_greater_than(lines, 0) do [ lines := lines[2 .. ]; var mp := infinite(0); var gaps := treeset_init(int); while len_greater_than(lines, 0), lines[0] <> "" do [ var rng := map(list_break(lines[0], ' '), ston); mp := mp[ .. rng[1]] + sparse(rng[0] - rng[1], rng[2]) + mp[rng[1] + rng[2] .. ]; lines := lines[1 .. ]; gaps := treeset_set(gaps, rng[1]); gaps := treeset_set(gaps, rng[1] + rng[2]); ] for g in gaps do [ for i := 0 to len(seeds) do [ if g > seeds[i], g < seeds[i] + seeds_len[i] then [ seeds_len +<= seeds[i] + seeds_len[i] - g; seeds +<= g; seeds_len[i] := g - seeds[i]; ] ] ] seeds := map(seeds, lambda(i : int) [ return i + mp[i]; ]); ] seeds := list_sort(seeds); write(h[1], ntos(seeds[0]) + nl); ]