1
0
Fork 0
adventofcode/src/03.rkt

32 lines
880 B
Racket
Raw Normal View History

2022-12-03 05:39:22 +00:00
#lang racket
(require "../lib.rkt")
(define input (map string->list (problem-input 3)))
;; priority : char? -> natural?
(define (priority c)
(define lower-offset (sub1 (char->integer #\a)))
(define upper-offset (sub1 (char->integer #\A)))
(if (char-lower-case? c)
(- (char->integer c) lower-offset)
(+ 26 (- (char->integer c) upper-offset))))
;; unique : (listof char?) -> char?
(define (unique rucksack)
(define len (/ (length rucksack) 2))
(first (set-intersect (take rucksack len) (drop rucksack len))))
;; unique : (list/c (listof char?) (listof char?) (listof char?)) -> char?
(define (badge rucksacks)
(first (apply set-intersect rucksacks)))
(define part1
(for/sum ([rucksack input])
(priority (unique rucksack))))
(define part2
(for/sum ([rucksacks (in-slice 3 input)])
2022-12-03 05:39:22 +00:00
(priority (badge rucksacks))))
(show-solution part1 part2)