···1212func is_vertical [x1, _]:[x2, _] = x1 == x2
13131414func collide p1:p2 [bx1, by1]:[bx2, by2] =
1515- let [px1, px2] = sort [x p1, x p2],
1616- let [py1, py2] = sort [y p1, y p2],
1515+ let px1:px2 = if x p1 < x p2 then x p1:x p2 else x p2:x p1,
1616+ let py1:py2 = if y p1 < y p2 then y p1:y p2 else y p2:y p1,
1717 px1 < bx2 && px2 > bx1 && py1 < by2 && py2 > by1
18181919func x [a, _] = a
···5858 dbg!(min_x:max_x)
5959 dbg!(min_y:max_y)
60606161- let x_ranges = zip xs (tail xs)
6262- let mut i = 0
6363- while i < length x_ranges {
6464- let x1:x2 and range = x_ranges.i
6565- i += 1
6666- if x1 == x2 { continue unit }
6767- let [y1, .._, y2] = horizontals
6868- |> filter (contains_by x range)
6969- |> map (y << left)
7070- |> sort
7171- push!(illegal, [x1, min_y]:[x2, y1])
7272- push!(illegal, [x1, y2]:[x2, max_y])
7373- }
7474- dbg!('illegal(length illegal))
7575-7661 let y_ranges = zip ys (tail ys)
7762 let mut i = 0
7863 while i < length y_ranges {
···8267 let [x1, .._, x2] = verticals
8368 |> filter (contains_by y range)
8469 |> map (x << left)
8585- |> sort
8670 push!(illegal, [min_x, y1]:[x1, y2])
8771 push!(illegal, [x2, y1]:[max_x, y2])
8872 }
8973 dbg!('illegal(length illegal))
90747575+ let x_ranges = zip xs (tail xs)
7676+ let mut i = 0
7777+ while i < length x_ranges {
7878+ let x1:x2 and range = x_ranges.i
7979+ i += 1
8080+ if x1 == x2 { continue unit }
8181+ let [y1, .._, y2] = horizontals
8282+ |> filter (contains_by x range)
8383+ |> map (y << left)
8484+ push!(illegal, [x1, min_y]:[x2, y1])
8585+ push!(illegal, [x1, y2]:[x2, max_y])
8686+ }
8787+ dbg!('illegal(length illegal))
8888+9189 # Then we just run standard collision of the area boxes with those
9290 let mut best = 0
9391 let mut i = 0
···9896 let a = points.i
9997 let b = points.j
10098 let candidate = area a b
101101- if candidate > best && !(any (collide (a:b)) illegal) {
102102- best = candidate
9999+ if candidate > best {
100100+ if !(any (collide (a:b)) illegal) {
101101+ best = candidate
102102+ }
103103 }
104104 j += 1
105105 }