Advent of Code solutions

more micro optimizations

+20 -20
+20 -20
2025/9/p2.tri
··· 12 func is_vertical [x1, _]:[x2, _] = x1 == x2 13 14 func 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 18 19 func x [a, _] = a ··· 58 dbg!(min_x:max_x) 59 dbg!(min_y:max_y) 60 61 - 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)) 90 91 # 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 103 } 104 j += 1 105 }
··· 12 func is_vertical [x1, _]:[x2, _] = x1 == x2 13 14 func 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 18 19 func x [a, _] = a ··· 58 dbg!(min_x:max_x) 59 dbg!(min_y:max_y) 60 61 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) 70 push!(illegal, [min_x, y1]:[x1, y2]) 71 push!(illegal, [x2, y1]:[max_x, y2]) 72 } 73 dbg!('illegal(length illegal)) 74 75 + 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 }