day 8 part 2 finished
[aoc_eblake.git] / 2015 / day23.m4
blob74fa5584e824e54d439eb7afb50979629e1da97c
1 divert(-1)dnl -*- m4 -*-
2 # Usage: m4 [-Dfile=day23.input] day23.m4
4 include(`common.m4')ifelse(common(23), `ok', `',
5 `errprint(`Missing common initialization
6 ')m4exit(1)')
8 include(`math64.m4')
9 define(`input', translit((include(defn(`file'))), nl`,()', `;'))
10 define(`cnt', 0)
11 define(`line', `_$0(translit(`$1', ` ', `,'))')
12 define(`_line', `define(`i'cnt, `$1_(`$2', $3)')define(`cnt', incr(cnt))')
13 ifdef(`__gnu__', `
14   patsubst(defn(`input'), `\([^;]*\);', `line(`\1')')
15 ', `
16   define(`_chew', `line(substr(`$1', 0, index(`$1', `;')))define(`tail',
17     substr(`$1', incr(index(`$1', `;'))))ifelse(index(defn(`tail'), `;'), -1,
18     `', `$0(defn(`tail'))')')
19   define(`chew', `ifelse(eval($1 < 20), 1, `_$0(`$2')', `$0(eval($1/2),
20     substr(`$2', 0, eval($1/2)))$0(eval(len(defn(`tail')) + $1 - $1/2),
21     defn(`tail')substr(`$2', eval($1/2)))')')
22   chew(len(defn(`input')), defn(`input'))
25 define(`div10', `substr(`$1', 0, decr(len(`$1')))')
26 define(`hlf_', `define(`r$1', div10(mul64(r$1, 5)))1')
27 define(`tpl_', `define(`r$1', mul64(r$1, 3))1')
28 define(`inc_', `define(`r$1', add64(r$1, 1))1')
29 define(`jmp_', `$1')
30 define(`jie_', `ifelse(eval(substr(r$1, decr(len(r$1))) & 1), 0, $2, 1)')
31 define(`jio_', `ifelse(r$1, 1, $2, 1)')
32 define(`run', `define(`steps', incr(steps))ifdef(`i'pc, `_$0(pc)$0`'')')
33 define(`_run', `define(`pc', eval(pc + i$1()))')
35 define(`ra', 0)define(`rb', 0)define(`pc', 0)define(`steps', 0)
36 run()
37 define(`part1', rb)
38 define(`ra', 1)define(`rb', 0)define(`pc', 0)define(`steps', 0)
39 run()
40 define(`part2', rb)
42 divert`'part1
43 part2