diff options
Diffstat (limited to '2021/day3/03a.rkt')
-rw-r--r-- | 2021/day3/03a.rkt | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/2021/day3/03a.rkt b/2021/day3/03a.rkt new file mode 100644 index 0000000..bb42d83 --- /dev/null +++ b/2021/day3/03a.rkt @@ -0,0 +1,30 @@ +#lang racket +(define (mode xs) + (define ht (make-hash)) + (define max-key '0) + (for ([x xs]) + (define new-val (+ 1 (hash-ref ht x 0))) + (hash-set! ht x new-val) + (if (> new-val (hash-ref ht max-key 0)) (set! max-key x) 3)) + max-key) + +(define (transpose xss) + (apply map list xss)) + +(define (flip x) + (cond [(string=? x "0") "1"] + [else "0"])) + +(define input (open-input-file "input")) +(define bit-positions + (transpose (map (lambda (xs) + (map (curry make-string 1) (string->list xs))) + (port->lines input)))) + +(define gamma-str (foldr string-append "" (map mode bit-positions))) +(define epsilon-str (foldr string-append "" (map (compose flip mode) bit-positions))) + +(define gamma (string->number gamma-str 2)) +(define epsilon (string->number epsilon-str 2)) + +(* gamma epsilon) |