From bcffe4e5bf01bcbeef08ffe6f8f51c2408b7531d Mon Sep 17 00:00:00 2001 From: ajet Date: Mon, 8 Dec 2025 22:14:19 -1000 Subject: [PATCH] golf --- 2025/src/day09.clj | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/2025/src/day09.clj b/2025/src/day09.clj index d6e5fd4..8866287 100644 --- a/2025/src/day09.clj +++ b/2025/src/day09.clj @@ -21,30 +21,30 @@ last (apply area)) -;; wikipedia maths (defn normalize [x] (min 1 (max -1 x))) (defn orientation - "returns a value indicating if point A is to the left or right (or on) BC" + "returns a value indicating if point A is to the left, right, or on the line BC" [[ax ay] [bx by] [cx cy]] (normalize (- (* (- by ay) (- cx bx)) (* (- bx ax) (- cy by))))) -(defn intersect? [[ax ay] [bx by]] - (let [o1 (orientation ax ay bx) - o2 (orientation ax ay by) - o3 (orientation bx by ax) - o4 (orientation bx by ay)] +(defn intersect? + "Lines AB and CD intersect if A and B falls on different sides of CD and if C and D fall on different sides of AB" + [[a b] [c d]] + (let [o1 (orientation a b c) + o2 (orientation a b d) + o3 (orientation c d a) + o4 (orientation c d b)] (and (not= o1 o2) (not= o3 o4)))) ;; part 2 (def line-segments (map vector input (conj (vec (rest input)) (first input)))) (->> furthest-points (filter (fn [[a b]] - (let [segments (filter (fn [[seg-a seg-b]] - (and (not= a seg-a) - (not= a seg-b) - (not= b seg-a) - (not= b seg-b))) + (let [segments (filter (fn [[seg-a seg-b]] (and (not= a seg-a) + (not= a seg-b) + (not= b seg-a) + (not= b seg-b))) line-segments) [[cx cy] [dx dy]] [a b]] (and (not (some #(intersect? [a b] %) segments))