type t := real128; record hail [ x y z : t; dx dy dz : t; ] fn main [ var lines := list_break_to_lines(read_lazy(h[0])); var test_area_start : t := select(len(lines) <> 5, 7, 200000000000000); var test_area_end : t := select(len(lines) <> 5, 27, 400000000000000); var hails := empty(hail); for line in lines do [ line := list_replace_substring(line, " @ ", ","); line := list_replace_substring(line, " ", ""); var num := map(list_break(line, ','), ston); hails +<= hail.[ x : num[0], y : num[1], z : num[2], dx : num[3], dy : num[4], dz : num[5], ]; ] var sum := 0; for i := 0 to len(hails) do [ var h1 := hails[i]; var x1 := h1.x; var dx1 := h1.dx; var y1 := h1.y; var dy1 := h1.dy; for j := i + 1 to len(hails) do [ var h2 := hails[j]; var x2 := h2.x; var dx2 := h2.dx; var y2 := h2.y; var dy2 := h2.dy; var t1 := ((y1 - y2) * dx2 - (x1 - x2) * dy2) / (dx1 * dy2 - dy1 * dx2); var t2 := ((y2 - y1) * dx1 - (x2 - x1) * dy1) / (dx2 * dy1 - dy2 * dx1); if t1 > 0, t2 > 0 then [ var xr1 := x1 + dx1 * t1; var yr1 := y1 + dy1 * t1; var xr2 := x2 + dx2 * t2; var yr2 := y2 + dy2 * t2; if xr1 >= test_area_start, xr1 <= test_area_end, yr1 >= test_area_start, yr1 <= test_area_end then sum += 1; ] ] ] write(h[1], ntos(sum) + nl); ]