Initial commit

This commit is contained in:
Dimitri Lozeve 2024-11-12 21:43:32 +01:00
commit f242d2b0df
420 changed files with 62521 additions and 0 deletions

58
2021/day14/day14.scm Normal file
View 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
View 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
View 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