about summary refs log tree commit diff
path: root/day10.mew
blob: 20e1285e01676b076cbd3ddfcfac1454a6efb7b9 (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
(define (gscan f i g)
  (gcombine (lambda (x i)
              (let ((v (f i x)))
                (values v v)))
            i
            g))

(def xs 
  (op=> (lines "day10")
        (gmap (fun (line)
                (if (=? line "noop")
                  (generator 0)
                  (generator 0 (=> (~? line "-?\\d+") car string->number)))) _)
        gconcatenate
        (gscan + 1 _)
        (into #(1) _)))

(op=> (range 20 221 40)
      (gmap (op * (get xs (dec _)) _) _)
      (inject +)
      prn)

(op=> (gen xs)
      (ggroup _ 40)
      (gtake _ 6)
      (gmap (fun (line)
              (into "" (gmap (fun (a b)
                               (if (<= (abs (- a b)) 1) #\@ #\space))
                             (gen line) (range 0))))
            _)
      (generator-for-each print _))