aboutsummaryrefslogtreecommitdiff
path: root/2021/day-08/day-08.rkt
diff options
context:
space:
mode:
Diffstat (limited to '2021/day-08/day-08.rkt')
-rw-r--r--2021/day-08/day-08.rkt77
1 files changed, 29 insertions, 48 deletions
diff --git a/2021/day-08/day-08.rkt b/2021/day-08/day-08.rkt
index ff54817..6476eae 100644
--- a/2021/day-08/day-08.rkt
+++ b/2021/day-08/day-08.rkt
@@ -1,67 +1,48 @@
#lang racket
(require threading
- awesome-list
+ list-utils
"../../jj-aoc.rkt")
(struct trial-data (signal output) #:transparent)
(define (string->sets s)
- (~> s
- string-split
- (map (λ~> string->list
- list->set) _)))
+ (~> s string-split (map (λ~> string->list list->set) _)))
(define data
- (for/list ([l (in-lines (open-day 8))]
- #:unless (equal? l ""))
- (~> l
- (string-split _ " | ")
- (map string->sets _)
- (apply trial-data _))))
+ (for/list ([l (in-lines (open-day 8))] #:unless (equal? l ""))
+ (~> l (string-split _ " | ") (map string->sets _) (apply trial-data _))))
;; part 1
-(for*/sum ([trial (in-list data)]
- [output (in-list (trial-data-output trial))]
- #:when (ormap (λ~> (= (set-count output))) '(2 3 4 7)))
- 1)
+(for*/sum ([trial (in-list data)] [output (in-list (trial-data-output trial))]
+ #:when (ormap (λ~> (= (set-count output))) '(2 3 4 7)))
+ 1)
;; part 2
(define (matching-pattern len trial)
(define solution-set
- (for*/list ([signal (in-list (trial-data-signal trial))]
- #:when (= (set-count signal) len))
+ (for*/list ([signal (in-list (trial-data-signal trial))] #:when (= (set-count signal) len))
signal))
(match solution-set
[(list s) s]
[s (apply set-intersect s)]))
(define (determine-arrangement t)
- (let*
- ([pattern-1 (matching-pattern 2 t)]
- [pattern-4 (matching-pattern 4 t)]
- [pattern-7 (matching-pattern 3 t)]
- [pattern-8 (matching-pattern 7 t)]
- [pattern-shared-235 (matching-pattern 5 t)]
- [pattern-3 (set-union pattern-1
- pattern-shared-235)]
- [pattern-9 (set-union pattern-4
- pattern-shared-235)]
- [pattern-shared-069 (matching-pattern 6 t)]
- [pattern-just-f (set-subtract pattern-shared-069 pattern-shared-235)]
- [pattern-just-e (set-subtract pattern-8
- (set-union pattern-4
- pattern-shared-235
- pattern-shared-069))]
- [pattern-2 (set-union (set-subtract pattern-3 pattern-just-f)
- pattern-just-e)]
- [pattern-just-c (set-subtract (set-intersect pattern-4 pattern-7)
- pattern-just-f)]
- [pattern-6 (set-subtract pattern-8 pattern-just-c)]
- [pattern-5 (set-subtract pattern-6 pattern-just-e)]
- [pattern-0 (set-union (set-subtract pattern-8
- pattern-shared-235)
- pattern-shared-069)]
- )
+ (let* ([pattern-1 (matching-pattern 2 t)]
+ [pattern-4 (matching-pattern 4 t)]
+ [pattern-7 (matching-pattern 3 t)]
+ [pattern-8 (matching-pattern 7 t)]
+ [pattern-shared-235 (matching-pattern 5 t)]
+ [pattern-3 (set-union pattern-1 pattern-shared-235)]
+ [pattern-9 (set-union pattern-4 pattern-shared-235)]
+ [pattern-shared-069 (matching-pattern 6 t)]
+ [pattern-just-f (set-subtract pattern-shared-069 pattern-shared-235)]
+ [pattern-just-e
+ (set-subtract pattern-8 (set-union pattern-4 pattern-shared-235 pattern-shared-069))]
+ [pattern-2 (set-union (set-subtract pattern-3 pattern-just-f) pattern-just-e)]
+ [pattern-just-c (set-subtract (set-intersect pattern-4 pattern-7) pattern-just-f)]
+ [pattern-6 (set-subtract pattern-8 pattern-just-c)]
+ [pattern-5 (set-subtract pattern-6 pattern-just-e)]
+ [pattern-0 (set-union (set-subtract pattern-8 pattern-shared-235) pattern-shared-069)])
(~> (list pattern-0
pattern-1
pattern-2
@@ -76,8 +57,8 @@
make-hash)))
(for/sum ([trial (in-list data)])
- (~>> trial
- trial-data-output
- (map (λ~>> (hash-ref (determine-arrangement trial))))
- (apply ~a)
- string->number))
+ (~>> trial
+ trial-data-output
+ (map (λ~>> (hash-ref (determine-arrangement trial))))
+ (apply ~a)
+ string->number))