From 1e0e9c9e11ada11222f6f9276344deb8b6bb3279 Mon Sep 17 00:00:00 2001 From: xenia Date: Sat, 3 Dec 2022 00:38:41 -0500 Subject: [PATCH] day 3: less spaghet --- 3.rkt | 34 ++++++++++++++-------------------- 1 file changed, 14 insertions(+), 20 deletions(-) diff --git a/3.rkt b/3.rkt index 0457de9..40a4ed0 100644 --- a/3.rkt +++ b/3.rkt @@ -4,33 +4,27 @@ ;; solution for day 3 -(define prios (string->list "_abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ")) +(define priorities + (string->list "_abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ")) (define (part1 input) (for/sum ([line (in-list input)]) - (define len (string-length line)) - (define h1 (substring line 0 (/ len 2))) - (define h2 (substring line (/ len 2) len)) - (define g1 (list->set (string->list h1))) - (define g2 (list->set (string->list h2))) - (define both (set-intersect g1 g2)) - (index-of prios (first (set->list both))))) - + (define-values [left right] (split-at line (/ (length line) 2))) + (~>> (set-intersect left right) + (set-first) + (index-of priorities)))) (define (part2 input) - (displayln (length input)) - (for/sum ([i (in-range 0 (length input) 3)]) - (define l1 (list-ref input (+ i 0))) - (define l2 (list-ref input (+ i 1))) - (define l3 (list-ref input (+ i 2))) - (define g1 (list->set (string->list l1))) - (define g2 (list->set (string->list l2))) - (define g3 (list->set (string->list l3))) - (define both (set-intersect (set-intersect g1 g2 ) g3)) - (index-of prios (first (set->list both))))) + (match input + ['() 0] + [(list* a b c rst) + (+ (~>> (set-intersect a b c) + (set-first) + (index-of priorities)) + (part2 rst))])) (define (parse fname) - (file->lines fname)) + (map string->list (file->lines fname))) (module+ main (define input (parse "inputs/3"))