diff --git a/2019/10.rkt b/2019/10.rkt index 5436cb9..e47e3af 100644 --- a/2019/10.rkt +++ b/2019/10.rkt @@ -1,5 +1,5 @@ #lang br -(require racket/file rackunit) +(require racket/file rackunit racket/math ) (define (string->asteroids str) (for*/list ([(row ridx) (in-indexed (string-split str))] @@ -71,6 +71,28 @@ ;; 1 (define roids (string->asteroids (file->string "10.rktd"))) +(define best-roid (find-best roids)) +(check-eq? ((count-visible roids) best-roid) 214) + +(define (radians roid) + (match (+ pi (angle (* -i (- roid best-roid)))) + [(== (* pi 2)) 0] + [res res])) + +(check-= (radians 8) 0 0.1) +(check-= (radians 16+16i) (/ pi 2) 0.1) +(check-= (radians 8+24i) pi 0.1) +(check-= (radians +16i) (* 1.5 pi) 0.1) + +;; 2 +(define (complex->solution c) (+ (* 100 (real-part c)) (imag-part c))) (check-eq? - ((count-visible roids) (find-best roids)) - 214) + (complex->solution + (car + (list-ref + (sort + (group-by radians (sort (remove best-roid roids) < #:key magnitude)) + < + #:key (λ (i) (radians (car i)))) + 199))) + 502) \ No newline at end of file