summaryrefslogtreecommitdiffstats
path: root/2021/06/sim.tl
blob: 69d9ac284f8aa9d0b37781f33fdeadb5958b533d (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
25
26
27
28
29
30
31
(defun read-fish (name)
  (flow
    (file-get-string name)
    (tok #/\d+/)
    (mapcar toint)))

(defun sim-naive (input n)
  (while (plusp (pdec n))
    (upd input (mappend [iff zerop (ret '(6 8)) [chain pred list]])))
  (len input))

(defun sim (input n)
  (let ((phase (vector 9 0)))
    (each ((i input))
      (inc [phase i]))
    (while (plusp (pdec n))
      (rotate [phase 0] [phase 1] [phase 2]
              [phase 3] [phase 4] [phase 5]
              [phase 6] [phase 7] [phase 8])
      (inc [phase 6] [phase 8]))
    (sum phase)))

(defun sim2 (input n)
  (let ((phase (vector 9 0)))
    (each ((i input))
      (inc [phase i]))
    (while (plusp (pdec n))
      (pset [phase 8] [phase 0]
            [phase 0..8] [phase 1..9])
      (inc [phase 6] [phase 8]))
    (sum phase)))