day 15 golf more, 710 effective bytes
[aoc_eblake.git] / 2017 / day11.m4
blob2b71363f21a92e09ba8dc82937b665d5734ad133
1 divert(-1)dnl -*- m4 -*-
2 # Usage: m4 [-Dfile=day11.input] day11.m4
4 include(`common.m4')ifelse(common(11), `ok', `',
5 `errprint(`Missing common initialization
6 ')m4exit(1)')
8 define(`input', translit((include(defn(`file'))), nl`,()', `;;'))
9 define(`x', 0)define(`y', 0)define(`part2', 0)
10 define(`abs', `ifelse(index(`$1', `-'), 0, `substr(`$1', 1)', `$1')')
11 define(`dist', `_$0(abs($1), abs($2))')
12 define(`_dist', `eval($1 + ($2 > $1) * ($2 - $1) / 2)')
13 define(`check', `_$0(dist(x, y))')
14 define(`_check', `ifelse(eval($1 > part2), 1, `define(`part2', $1)')')
15 define(`n_', `define(`y', decr(decr(y)))check()')
16 define(`ne_', `define(`x', incr(x))define(`y', decr(y))check()')
17 define(`se_', `define(`x', incr(x))define(`y', incr(y))check()')
18 define(`s_', `define(`y', incr(incr(y)))check()')
19 define(`sw_', `define(`x', decr(x))define(`y', incr(y))check()')
20 define(`nw_', `define(`x', decr(x))define(`y', decr(y))check()')
21 ifdef(`__gnu__', `
22   patsubst(defn(`input'), `\([^;]*\);', `\1_()')
23 ',`
24   define(`chew', `substr(`$1', 0, index(`$1', `;'))_()define(`tail',
25     substr(`$1', incr(index(`$1', `;'))))ifelse(index(defn(`tail'), `;'),
26     -1, `', `$0(defn(`tail'))')')
27   define(`split', `ifelse(eval($1 < 6), 1, `chew(`$2')', `$0(eval($1/2),
28     substr(`$2', 0, eval($1/2)))$0(eval(len(defn(`tail')) + $1 - $1/2),
29     defn(`tail')substr(`$2', eval($1/2)))')')
30   split(len(defn(`input')), defn(`input'))
32 define(`part1', dist(x, y))
34 divert`'part1
35 part2