···12func is_vertical [x1, _]:[x2, _] = x1 == x2
1314func collide p1:p2 [bx1, by1]:[bx2, by2] =
15- let [px1, px2] = sort [x p1, x p2],
16- let [py1, py2] = sort [y p1, y p2],
17 px1 < bx2 && px2 > bx1 && py1 < by2 && py2 > by1
1819func x [a, _] = a
···58 dbg!(min_x:max_x)
59 dbg!(min_y:max_y)
6061- let x_ranges = zip xs (tail xs)
62- let mut i = 0
63- while i < length x_ranges {
64- let x1:x2 and range = x_ranges.i
65- i += 1
66- if x1 == x2 { continue unit }
67- let [y1, .._, y2] = horizontals
68- |> filter (contains_by x range)
69- |> map (y << left)
70- |> sort
71- push!(illegal, [x1, min_y]:[x2, y1])
72- push!(illegal, [x1, y2]:[x2, max_y])
73- }
74- dbg!('illegal(length illegal))
75-76 let y_ranges = zip ys (tail ys)
77 let mut i = 0
78 while i < length y_ranges {
···82 let [x1, .._, x2] = verticals
83 |> filter (contains_by y range)
84 |> map (x << left)
85- |> sort
86 push!(illegal, [min_x, y1]:[x1, y2])
87 push!(illegal, [x2, y1]:[max_x, y2])
88 }
89 dbg!('illegal(length illegal))
900000000000000091 # Then we just run standard collision of the area boxes with those
92 let mut best = 0
93 let mut i = 0
···98 let a = points.i
99 let b = points.j
100 let candidate = area a b
101- if candidate > best && !(any (collide (a:b)) illegal) {
102- best = candidate
00103 }
104 j += 1
105 }
···12func is_vertical [x1, _]:[x2, _] = x1 == x2
1314func collide p1:p2 [bx1, by1]:[bx2, by2] =
15+ let px1:px2 = if x p1 < x p2 then x p1:x p2 else x p2:x p1,
16+ let py1:py2 = if y p1 < y p2 then y p1:y p2 else y p2:y p1,
17 px1 < bx2 && px2 > bx1 && py1 < by2 && py2 > by1
1819func x [a, _] = a
···58 dbg!(min_x:max_x)
59 dbg!(min_y:max_y)
6000000000000000061 let y_ranges = zip ys (tail ys)
62 let mut i = 0
63 while i < length y_ranges {
···67 let [x1, .._, x2] = verticals
68 |> filter (contains_by y range)
69 |> map (x << left)
070 push!(illegal, [min_x, y1]:[x1, y2])
71 push!(illegal, [x2, y1]:[max_x, y2])
72 }
73 dbg!('illegal(length illegal))
7475+ let x_ranges = zip xs (tail xs)
76+ let mut i = 0
77+ while i < length x_ranges {
78+ let x1:x2 and range = x_ranges.i
79+ i += 1
80+ if x1 == x2 { continue unit }
81+ let [y1, .._, y2] = horizontals
82+ |> filter (contains_by x range)
83+ |> map (y << left)
84+ push!(illegal, [x1, min_y]:[x2, y1])
85+ push!(illegal, [x1, y2]:[x2, max_y])
86+ }
87+ dbg!('illegal(length illegal))
88+89 # Then we just run standard collision of the area boxes with those
90 let mut best = 0
91 let mut i = 0
···96 let a = points.i
97 let b = points.j
98 let candidate = area a b
99+ if candidate > best {
100+ if !(any (collide (a:b)) illegal) {
101+ best = candidate
102+ }
103 }
104 j += 1
105 }