day 23 optimize again
[aoc_eblake.git] / 2016 / day8.m4
blob38d946a93f2ea881dc65f20da5a3d6781171ae85
1 divert(-1)dnl -*- m4 -*-
2 # Usage: m4 [-Dfile=day8.input] day8.m4
4 include(`common.m4')ifelse(common(8), `ok', `',
5 `errprint(`Missing common initialization
6 ')m4exit(1)')
8 define(`prep', `forloop(0, 5, `define(`d$1_'', `)')')
9 forloop_arg(0, 49, `prep')
10 define(`set', `forloop(0, decr($2), `define(`d$1_'', `, 1)')')
11 define(`Rect', `forloop(0, decr($2), `set(', `, $3)')')
12 define(`Row', `first(forloop(0, 49, `_$0(', `, $3, $5)'))')
13 define(`_Row', ``define(`d$1_$2', 'defn(`d'eval((50+$1-$3)%50)`_$2')`)'')
14 define(`Col', `first(forloop(0, 5, `_$0(', `, $4, $6)'))')
15 define(`_Col', ``define(`d$2_$1', 'defn(`d$2_'eval((6+$1-$3)%6))`)'')
16 translit(include(defn(`file')), `x= 'nl, `,,,)'define(`rect',
17   `Rect(')define(`row', `Row(')define(`column', `Col('))
18 define(`cnt', `forloop(0, 5, `defn(`d$1_'', `)')')
19 define(`part1', len(forloop_arg(0, 49, `cnt')))
20 include(`ocr.m4')
21 define(`char', `forloop(0, 5, `_$0(', `, $1)')')
22 define(`_char', `forloop($2, eval($2+4), `ifelse(defn(`d'', ``_$1'), 1,
23   ``X'', `` '')')')
24 define(`part2', forloop(0, 9, `ocr(char(eval(', `*5)))'))
26 divert`'part1
27 part2