diff options
Diffstat (limited to 'aoc2023-other/day-24/day-24a.rkt')
-rw-r--r-- | aoc2023-other/day-24/day-24a.rkt | 20 |
1 files changed, 14 insertions, 6 deletions
diff --git a/aoc2023-other/day-24/day-24a.rkt b/aoc2023-other/day-24/day-24a.rkt index 39f559c..31f526d 100644 --- a/aoc2023-other/day-24/day-24a.rkt +++ b/aoc2023-other/day-24/day-24a.rkt @@ -12,10 +12,13 @@ (define LOWER-BOUND 200000000000000) (define UPPER-BOUND 400000000000000) +(define (->struct f str) + (~> str (string-split _ ",") (map (λ~> string-trim string->number) _) (apply f _))) + (define (parse-hail-record str) (match-define (list p v) (string-split str " @ ")) - (hail (~> p (string-split ",") (map (λ~> string-trim string->number) _) (apply posn _)) - (~> v (string-split ",") (map (λ~> string-trim string->number) _) (apply vel _)))) + (hail (->struct posn p) + (->struct vel v))) (define hail-paths (for/list ([hail (in-list (string-split input "\n"))]) @@ -28,16 +31,21 @@ (cond [(= (* vy1 vx2) (* vx1 vy2)) #f] [else - (define t1 (/ (- (* vy2 (- x1 x2)) (* vx2 (- y1 y2))) (- (* vy1 vx2) (* vx1 vy2)))) - (define t2 (/ (- (* vy1 (- x2 x1)) (* vx1 (- y2 y1))) (- (* vy2 vx1) (* vx2 vy1)))) + (define t1 (/ (- (* vy2 (- x1 x2)) (* vx2 (- y1 y2))) + (- (* vy1 vx2) (* vx1 vy2)))) + (define t2 (/ (- (* vy1 (- x2 x1)) (* vx1 (- y2 y1))) + (- (* vy2 vx1) (* vx2 vy1)))) (define x (+ x1 (* t1 vx1))) (define y (+ y1 (* t1 vy1))) - (and (<= LOWER-BOUND x UPPER-BOUND) (<= LOWER-BOUND y UPPER-BOUND) (<= 0 t1) (<= 0 t2))])) + (and (<= LOWER-BOUND x UPPER-BOUND) + (<= LOWER-BOUND y UPPER-BOUND) + (<= 0 t1) + (<= 0 t2))])) (for/sum ([(trial-paths) (in-combinations hail-paths 2)] ; #:when (apply valid-intersection? trial-paths)) - 1) + 1) ;; part 2 - see day-24b.rkt |