blob: a78f5b5487d29879e3f76dc0b98058dde83f3006 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
#lang racket
(require advent-of-code
threading)
(define starting-chain
(~> (fetch-aoc-input (find-session) 2018 5 #:cache #true) string-trim string->list))
(define (reactive-pair? ch1 ch2)
(and (equal? (char-downcase ch1) (char-downcase ch2)) (not (equal? ch1 ch2))))
(define (remove-reactive-pairs chs [acc '()])
(match chs
[(list* ch1 ch2 rest-chs)
#:when (reactive-pair? ch1 ch2)
(remove-reactive-pairs rest-chs acc)]
[(list* ch rest-chs) (remove-reactive-pairs rest-chs (cons ch acc))]
[(list) (reverse acc)]))
(define (keep-removing-reactive-pairs chs)
(define chs* (remove-reactive-pairs chs))
(if (equal? chs chs*) (length chs) (keep-removing-reactive-pairs chs*)))
;; part 1
(keep-removing-reactive-pairs starting-chain)
;; part 2
(~>> (for/list ([letter (in-string "abcdefghijklmnopqrstuvwxyz")])
(define tweaked-chain (filter (λ (c) (not (equal? (char-downcase c) letter))) starting-chain))
(keep-removing-reactive-pairs tweaked-chain))
(apply min))
|