aboutsummaryrefslogtreecommitdiff
path: root/racket/aoc2022/day-25/day-25.rkt
blob: 078cef44f3135758213404f7d43a25639f6555bc (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
#lang racket
(require advent-of-code
         threading)

(define fuel-requirements (port->lines (open-aoc-input (find-session) 2022 25 #:cache #true)))

(define (snafu->decimal snafu)
  (for/sum ([digit (in-list (~> snafu string->list reverse))] [place (in-naturals)])
           (define value
             (match digit
               [#\= -2]
               [#\- -1]
               [c (~> c string string->number)]))
           (* value (expt 5 place))))

(define (decimal->snafu n [acc '()])
  (match n
    [0 (list->string acc)]
    [n (decimal->snafu (quotient (+ n 2) 5) (cons (string-ref "012=-" (modulo n 5)) acc))]))

;; part 1
(~> (for/sum ([fuel (in-list fuel-requirements)]) (snafu->decimal fuel)) decimal->snafu)

;; no part 2 メリークリスマス