From 5eb58ad076f2cd435b11b140820da224b60b73d5 Mon Sep 17 00:00:00 2001 From: Aria Date: Mon, 2 Jan 2023 21:58:56 +0000 Subject: initial commit --- 2021/day3/03a.rkt | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 2021/day3/03a.rkt (limited to '2021/day3/03a.rkt') 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) -- cgit v1.2.3