Initial commit
This commit is contained in:
commit
f242d2b0df
420 changed files with 62521 additions and 0 deletions
58
2021/day14/day14.scm
Normal file
58
2021/day14/day14.scm
Normal file
|
@ -0,0 +1,58 @@
|
|||
(import (chicken io)
|
||||
srfi-69
|
||||
srfi-152
|
||||
matchable)
|
||||
|
||||
(define (parse-polymer str)
|
||||
(let ((str-lst (string->list str)))
|
||||
(map (lambda (c) (string->symbol (string c))) str-lst)))
|
||||
|
||||
(define (parse-rule str)
|
||||
(apply cons (apply cons (map parse-polymer (string-split str " -> ")))))
|
||||
|
||||
(define (read-input #!optional (port (current-input-port)))
|
||||
(let ((lines (read-lines port)))
|
||||
(values (parse-polymer (car lines))
|
||||
(alist->hash-table (map parse-rule (cdr (cdr lines)))))))
|
||||
|
||||
(define (template->pairs template)
|
||||
(define h (make-hash-table #:initial 0))
|
||||
(let lp ((polymer template))
|
||||
(match polymer
|
||||
((a b . rest) (hash-table-update! h (list a b) add1) (lp (cons b rest)))
|
||||
((a) h)
|
||||
(() h))))
|
||||
|
||||
(define (template->counts template)
|
||||
(define h (make-hash-table #:initial 0))
|
||||
(for-each (lambda (c) (hash-table-update! h c add1)) template)
|
||||
h)
|
||||
|
||||
(define (polymer-step pairs counts rules)
|
||||
(define new-pairs (make-hash-table #:initial 0))
|
||||
(define new-counts (hash-table-copy counts))
|
||||
(hash-table-for-each
|
||||
pairs
|
||||
(lambda (pair v)
|
||||
(let ((elt (hash-table-ref/default rules pair #f)))
|
||||
(if elt
|
||||
(begin (hash-table-update! new-pairs (list (car pair) elt) (lambda (x) (+ x v)))
|
||||
(hash-table-update! new-pairs (list elt (cadr pair)) (lambda (x) (+ x v)))
|
||||
(hash-table-update! new-counts elt (lambda (x) (+ x v))))
|
||||
(hash-table-update! new-pairs pair add1)))))
|
||||
(values new-pairs new-counts))
|
||||
|
||||
(define (update-polymer pairs counts rules steps)
|
||||
(if (= steps 0)
|
||||
(values pairs counts)
|
||||
(let-values (((new-pairs new-counts) (polymer-step pairs counts rules)))
|
||||
(update-polymer new-pairs new-counts rules (- steps 1)))))
|
||||
|
||||
(define (part12 template rules steps)
|
||||
(define-values (pairs counts) (update-polymer (template->pairs template) (template->counts template) rules steps))
|
||||
(let ((vals (hash-table-values counts)))
|
||||
(- (apply max vals) (apply min vals))))
|
||||
|
||||
(let-values (((template rules) (read-input)))
|
||||
(print (part12 template rules 10))
|
||||
(print (part12 template rules 40)))
|
102
2021/day14/input
Normal file
102
2021/day14/input
Normal file
|
@ -0,0 +1,102 @@
|
|||
PFVKOBSHPSPOOOCOOHBP
|
||||
|
||||
FV -> C
|
||||
CP -> K
|
||||
FS -> K
|
||||
VF -> N
|
||||
HN -> F
|
||||
FF -> N
|
||||
SS -> K
|
||||
VS -> V
|
||||
BV -> F
|
||||
HC -> K
|
||||
BP -> F
|
||||
OV -> N
|
||||
BF -> V
|
||||
VH -> V
|
||||
PF -> N
|
||||
FC -> S
|
||||
CS -> B
|
||||
FK -> N
|
||||
VK -> H
|
||||
FN -> P
|
||||
SH -> V
|
||||
CV -> K
|
||||
HP -> K
|
||||
HO -> C
|
||||
NO -> V
|
||||
CK -> C
|
||||
VB -> S
|
||||
OC -> N
|
||||
NS -> C
|
||||
NF -> H
|
||||
SF -> N
|
||||
NK -> S
|
||||
NP -> P
|
||||
OO -> S
|
||||
NH -> C
|
||||
BC -> H
|
||||
KS -> H
|
||||
PV -> O
|
||||
KO -> K
|
||||
OK -> H
|
||||
OH -> H
|
||||
BH -> F
|
||||
NB -> B
|
||||
FH -> N
|
||||
HV -> F
|
||||
BN -> S
|
||||
ON -> V
|
||||
CB -> V
|
||||
CF -> H
|
||||
FB -> S
|
||||
KF -> S
|
||||
PS -> P
|
||||
OB -> C
|
||||
NN -> K
|
||||
KV -> C
|
||||
BK -> H
|
||||
SN -> S
|
||||
NC -> H
|
||||
PK -> B
|
||||
PC -> H
|
||||
KN -> S
|
||||
VO -> V
|
||||
FO -> K
|
||||
CH -> B
|
||||
PH -> N
|
||||
SO -> C
|
||||
KH -> S
|
||||
HB -> V
|
||||
HH -> B
|
||||
BB -> H
|
||||
SC -> V
|
||||
HS -> K
|
||||
SP -> V
|
||||
KB -> N
|
||||
VN -> H
|
||||
HK -> H
|
||||
KP -> K
|
||||
OP -> F
|
||||
CO -> B
|
||||
VP -> H
|
||||
OS -> N
|
||||
OF -> H
|
||||
KK -> N
|
||||
CC -> K
|
||||
BS -> C
|
||||
VV -> O
|
||||
CN -> H
|
||||
PB -> P
|
||||
BO -> N
|
||||
SB -> H
|
||||
FP -> F
|
||||
SK -> F
|
||||
PO -> S
|
||||
KC -> H
|
||||
VC -> H
|
||||
NV -> N
|
||||
HF -> B
|
||||
PN -> F
|
||||
SV -> K
|
||||
PP -> K
|
18
2021/day14/test
Normal file
18
2021/day14/test
Normal file
|
@ -0,0 +1,18 @@
|
|||
NNCB
|
||||
|
||||
CH -> B
|
||||
HH -> N
|
||||
CB -> H
|
||||
NH -> C
|
||||
HB -> C
|
||||
HC -> B
|
||||
HN -> C
|
||||
NN -> C
|
||||
BH -> H
|
||||
NC -> B
|
||||
NB -> B
|
||||
BN -> B
|
||||
BB -> N
|
||||
BC -> B
|
||||
CC -> N
|
||||
CN -> C
|
Loading…
Add table
Add a link
Reference in a new issue