day 17 optimize again
[aoc_eblake.git] / 2020 / day1.m4
blob38d94cdcc797050c640601de82f44946c3a4164e
1 divert(-1)dnl -*- m4 -*-
2 # Usage: m4 [-Dfile=day1.input] day1.m4
4 include(`common.m4')ifelse(common(1), `ok', `',
5 `errprint(`Missing common initialization
6 ')m4exit(1)')
8 define(`list', quote(translit(include(defn(`file')), nl, `,')2021))
9 _foreach(`pushdef(`row', ', `)', `', list)
10 define(`do', `ifdef(`l'eval(2020 - $1), `define(`part1',
11   eval($1 * (2020 - $1)))')define(`l$1')')
12 stack_foreach(`row', `do')
13 define(`_inner', `ifelse($1, $3, `', $2, $3, `', `ifdef(`l$3',
14   `define(`part2', eval($1 * $2 * $3))')')')
15 define(`inner', `ifelse($1, $2, `', `_$0($1, $2, eval(2020 - $1 - $2))')')
16 define(`do', `ifelse(len($1), 3, `stack_reverse(`t', `t2')stack_reverse(`t2',
17   `t', `inner($1, defn(`t'))')')')
18 stack_foreach(`row', `do')dnl common.m4 uses `t' for rest of stack
20 divert`'part1
21 part2