about summary refs log tree commit diff
path: root/day03.rkt
diff options
context:
space:
mode:
Diffstat (limited to 'day03.rkt')
-rw-r--r--day03.rkt27
1 files changed, 27 insertions, 0 deletions
diff --git a/day03.rkt b/day03.rkt
new file mode 100644
index 0000000..5277ab5
--- /dev/null
+++ b/day03.rkt
@@ -0,0 +1,27 @@
+#lang racket
+(require srfi/1)
+
+(define (priority c)
+  (cond [(char<=? #\a c #\z) (- (char->integer c) (char->integer #\a) -1)]
+        [(char<=? #\A c #\Z) (- (char->integer c) (char->integer #\A) -1 -26)]))
+
+(for/sum ([line (file->lines "day03")])
+  (let* ([len (string-length line)]
+         [mid (/ len 2)]
+         [p1 (substring line 0 mid)]
+         [p2 (substring line mid)]
+         [dup (car (lset-intersection eq?
+                                      (string->list p1)
+                                      (string->list p2)))])
+    (priority dup)))
+;; 8243
+
+(let loop ([lines (file->lines "day03")]
+           [sum 0])
+  (if (null? lines)
+    sum
+    (let*-values ([(group rest) (split-at lines 3)]
+                  [(badge) (car (apply lset-intersection eq?
+                                       (map string->list group)))])
+      (loop rest (+ sum (priority badge))))))
+;; 2631