day 14 finish
[aoc_eblake.git] / 2016 / day10.m4
blobac8a2a2547fb842939e493675dd30cf97807d341
1 divert(-1)dnl -*- m4 -*-
2 # Usage: m4 [-Dfile=day10.input] day10.m4
4 include(`common.m4')ifelse(common(10), `ok', `',
5 `errprint(`Missing common initialization
6 ')m4exit(1)')
8 define(`goes', `eat')define(`gives', `eat')define(`and', `eat')
9 pushdef(`output', `out')define(`eat', `Eat(')define(`to', `)')define(`Eat')
10 define(`list', translit(include(defn(`file')), nl, `;'))
11 define(`max', -1)
12 define(`givebot', `define(`b$1', ifdef(`b$1', `defn(`b$1')`,'')`$2')')
13 define(`giveout', `define(`o$1', `$2')ifelse(eval($1 > max), 1,
14   `define(`max', $1)')')
15 define(`line', `_$0(translit(`$1', ` ', `,'))')
16 define(`_line', `ifelse(`$1', `value', `give$4($5, $2)', `give$4($5,
17   `lo($2)')give$7($8, `hi($2)')')')
18 ifdef(`__gnu__', `
19   patsubst(defn(`list'), `\([^;]*\);', `line(`\1')')
20 ',`
21   define(`chew', `line(substr(`$1', 0, index(`$1', `;')))define(`tail',
22     substr(`$1', incr(index(`$1', `;'))))ifelse(index(defn(`tail'), `;'), -1,
23     `', `$0(defn(`tail'))')')
24   define(`split', `ifelse(eval($1 < 70), 1, `chew(`$2')', `$0(eval($1/2),
25     substr(`$2', 0, eval($1/2)))$0(eval(len(defn(`tail')) + $1 - $1/2),
26     defn(`tail')substr(`$2', eval($1/2)))')')
27   split(len(defn(`list')), defn(`list'))
29 define(`lo', `ifdef(`l$1', `', `define(`l$1', _$0(b$1, $1))')l$1')
30 define(`_lo', `ifelse(index(.17.61.17., .$1.$2.), -1, `', `define(`part1',
31   $3)')ifelse(eval($1 < $2), 1, $1, $2)')
32 define(`hi', `ifdef(`h$1', `', `define(`h$1', _$0(b$1, $1))')h$1')
33 define(`_hi', `ifelse(eval($1 > $2), 1, $1, $2)')
34 define(`o', `o$1')
35 forloop_arg(0, max, `o')
36 define(`part2', eval(o(0) * o(1) * o(2)))
38 divert`'part1
39 part2