about summary refs log tree commit diff
path: root/day25.rkt
blob: d3bc34a32ce228ca4cb139bba72094e76146f7de (plain) (blame)
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
32
#lang racket
(require srfi/1)

(define data (for/list ([line (file->lines "day25")])
               (for/list ([c line])
                 (match c
                   [#\2 2]
                   [#\1 1]
                   [#\0 0]
                   [#\- -1]
                   [#\= -2]))))

(define (base5 ns)
  (foldl (lambda (x a) (+ (* 5 a) x)) 0 ns))

(define (unbase5 n)
  (list->string (reverse (unfold zero?
                                 (lambda (n) (match (modulo (+ n 2) 5)
                                               [0 #\=]
                                               [1 #\-]
                                               [2 #\0]
                                               [3 #\1]
                                               [4 #\2]))
                                 (lambda (n) (quotient (+ n 2) 5))
                                 n))))

; (map base5 data)

(unbase5 (for/sum ([n data])
           (base5 n)))

;; "2-0-020-1==1021=--01"