Advent of Code solutions

more micro optimizations

+20 -20
+20 -20
2025/9/p2.tri
··· 12 12 func is_vertical [x1, _]:[x2, _] = x1 == x2 13 13 14 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], 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 17 px1 < bx2 && px2 > bx1 && py1 < by2 && py2 > by1 18 18 19 19 func x [a, _] = a ··· 58 58 dbg!(min_x:max_x) 59 59 dbg!(min_y:max_y) 60 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 61 let y_ranges = zip ys (tail ys) 77 62 let mut i = 0 78 63 while i < length y_ranges { ··· 82 67 let [x1, .._, x2] = verticals 83 68 |> filter (contains_by y range) 84 69 |> map (x << left) 85 - |> sort 86 70 push!(illegal, [min_x, y1]:[x1, y2]) 87 71 push!(illegal, [x2, y1]:[max_x, y2]) 88 72 } 89 73 dbg!('illegal(length illegal)) 90 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 + 91 89 # Then we just run standard collision of the area boxes with those 92 90 let mut best = 0 93 91 let mut i = 0 ··· 98 96 let a = points.i 99 97 let b = points.j 100 98 let candidate = area a b 101 - if candidate > best && !(any (collide (a:b)) illegal) { 102 - best = candidate 99 + if candidate > best { 100 + if !(any (collide (a:b)) illegal) { 101 + best = candidate 102 + } 103 103 } 104 104 j += 1 105 105 }