day 25 solved in C
[aoc_eblake.git] / 2018 / day10.m4
blob85c2255391818c471b9451f9667532357939b576
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 include(`ocr.m4')
9 define(`cnt', 0)define(`miny', 0)define(`maxy', 0)
10 define(`pos', `define(`p'cnt, ``$1',`$2'')ifelse(eval($2 > maxy), 1,
11   `define(`maxy', `$2')', eval($2 < miny), 1, `define(`miny',
12   `$2')define(`botp', cnt)')')
13 define(`vel', `define(`v'cnt, ``$1',`$2'')define(`cnt', incr(cnt))')
14 translit((include(defn(`file'))), `<>=', `()'define(`position',
15   defn(`pos'))define(`velocity', defn(`vel')))
16 define(`part2', eval((maxy - miny)/10))
17 define(`_adjust', `$0_(`$1', eval(`$2+$6*$4'), eval(`$3+$6*$5'))')
18 define(`_adjust_', `define(`p$1', ``$2',`$3'')ifelse(ifdef(`minx',
19   `eval($2 < minx)', 1), 1, `define(`minx', `$2')')ifelse(`$1', 'botp`,
20   `define(`miny', `$3')')')
21 define(`adjust', `_$0(`$1', p$1, v$1, 'part2`)')
22 forloop_arg(0, decr(cnt), `adjust')
23 define(`_adjust_', `define(`g$2_$3')')
24 define(`adjust', `_$0(`$1', p$1, 'minx`, 'miny`, `-1')')
25 forloop_arg(0, decr(cnt), `adjust')
27 define(`_grab', `forloop($2, eval($2+6), `ifdef(`g'', ``_$1', `X', ` ')')')
28 define(`grab', `ocr(forloop(0, 9, `_$0(', `, 'eval($1*8)`)'))')
29 define(`part1', forloop_arg(0, 7, `grab'))
31 divert`'part1
32 part2