day 21 preliminary refactoring
[aoc_eblake.git] / 2020 / day15.m4
blobc692b45707a71d617734981f1c83bc1bb9a21ca3
1 divert(-1)dnl -*- m4 -*-
2 # Usage: m4 [-Dfile=day15.input | -Dinput=1,2,...,] [-Dhashsize=H] \
3 # [-Dmax=N] [-Dverbose=V] day15.m4
5 include(`common.m4')ifelse(common(15, 30000001), `ok', `',
6 `errprint(`Missing common initialization
7 ')m4exit(1)')
9 ifdef(`max', `', `define(`max', 30000000)')
10 ifdef(`input', `', `define(`input', quote(translit((include(defn(`file'))),
11   nl`()', `,')))')
12 define(`D', defn(`define'))
13 define(`I', defn(`incr'))
14 define(`i', defn(`ifdef'))
15 define(`E', defn(`eval'))
16 define(`t', `i(`t$1',`t$1',`T')($1,$2,i(`m$2',`E($1-m$2)',0))')
17 define(`T', `D(`m$2',$1)t(I($1),$3)')
18 define(`t2020', `define(`part1', $3)T($@)')
19 define(`rename', `ifdef(`$2', `', `define(`$2', defn(`$1'))')popdef(`$1')')
20 define(`t100000', `output(1, `...$1')rename(`$0', `t'eval($1 + 100000))T($@)')
21 define(`t'max, `define(`part2', $3)')
22 define(`prep', `ifelse(`$1', `', `', `$0(shift($@))pushdef(`t',
23   `popdef(`t')define(`m$1', incr($'1`))t(incr($'1`), $1)')')')
24 prep(input)
25 t(1)
27 divert`'part1
28 part2