1 divert(-1)dnl -*- m4 -*-
2 # Usage: m4 [-Dfile=day12.input] day12.m4
4 include(`common.m4')ifelse(common(12), `ok', `',
5 `errprint(`Missing common initialization
8 define(`input', translit((include(defn(`file'))), nl`,()', `;'))
10 define(`_inc_', ```$1''')
11 define(`line', `_$0(translit(`$1', ` ', `,'))')
12 define(`_line', `define(`i'cnt, `$1_(`$2', `$3')')ifelse(`$1$3', `jnz-2',
13 `pushdef(`i'cnt, `hck_('first(`_'defn(`i'decr(decr(cnt))))`, `$2')')')define(
16 patsubst(defn(`input'), `\([^;]*\);', `line(`\1')')
18 define(`_chew', `line(substr(`$1', 0, index(`$1', `;')))define(`tail',
19 substr(`$1', incr(index(`$1', `;'))))ifelse(index(defn(`tail'), `;'), -1,
20 `', `$0(defn(`tail'))')')
21 define(`chew', `ifelse(eval($1 < 20), 1, `_$0(`$2')', `$0(eval($1/2),
22 substr(`$2', 0, eval($1/2)))$0(eval(len(defn(`tail')) + $1 - $1/2),
23 defn(`tail')substr(`$2', eval($1/2)))')')
24 chew(len(defn(`input')), defn(`input'))
27 define(`r', `ifdef(`r$1', `r$1', `$1')')
28 define(`cpy_', `define(`r$2', r(`$1'))1')
29 define(`inc_', `define(`r$1', incr(r$1))1')
30 define(`dec_', `define(`r$1', decr(r$1))1')
31 define(`jnz_', `ifelse(r(`$1'), 0, 1, $2)')
32 define(`hck_', `define(`r$1', eval(r$1 + r$2))define(`r$2', 0)1')
33 define(`run', `ifdef(`i'pc, `_$0(pc)$0`'')')
34 define(`_run', `define(`pc', eval(pc + i$1()))')
36 define(`ra', 0)define(`rb', 0)define(`rc', 0)define(`rd', 0)define(`pc', 0)
39 define(`ra', 0)define(`rb', 0)define(`rc', 1)define(`rd', 0)define(`pc', 0)