1 divert(-1)dnl -*- m4 -*-
2 # Usage: m4 [-Dfile=day14.input] day14.m4
4 include(`common.m4')ifelse(common(14), `ok', `',
5 `errprint(`Missing common initialization
8 define(`input', translit(include(defn(`file')), `.#'nl, `123'))
9 define(`x', 0)define(`y', 0)define(`part1', 0)
10 define(`maxx', index(defn(`input'), 3))
11 define(`maxy', len(translit(defn(`input'), `O12')))
12 forloop(0, decr(maxx), `define(`c'', `, 0)')
13 define(`doO', `define(`part1', eval(part1+'maxy`-c$1))define(`c$1',
15 define(`do1', `define(`x', incr($1))')
16 define(`do2', `define(`c$1', incr($2))do1($@)')
17 define(`do3', `define(`x', 0)define(`y', incr($2))')
20 patsubst(defn(`input'), `.', `do\&(x, y)')
22 define(`chew', `ifelse($1, 1, `do$2(x, y)', `$0(eval($1/2), substr(
23 `$2', 0, eval($1/2)))$0(eval($1-$1/2), substr(`$2', eval($1/2)))')')
24 chew(len(defn(`input')), defn(`input'))