day 15 golfed m4, 829 effective bytes
[aoc_eblake.git] / 2017 / day19.m4
blobf230d8c6cb066b4a929f69886f0bca4739c82c60
1 divert(-1)dnl -*- m4 -*-
2 # Usage: m4 [-Dhashsize=H] [-Dfile=day19.input] day19.m4
4 include(`common.m4')ifelse(common(19, 65537), `ok', `',
5 `errprint(`Missing common initialization
6 ')m4exit(1)')
8 define(`s', defn(`define'))define(`f', defn(`ifelse'))
9 define(`i', defn(`incr'))define(`c', defn(`decr'))
10 define(`input', translit(include(defn(`file')), ` 'nl, `.;'))
11 define(`x', 1)define(`y', 1)
12 define(`v', `f(`$1',;,`s(`x',1)s(`y',i(`$3'))',`f(`$1',.,,`ifdef(`b',,
13   `s(`b',`$2,$3')')s(`g$2_$3',`$1')')s(`x',i(`$2'))')')
14 ifdef(`__gnu__', `
15   patsubst(defn(`input'), `.', `v(`\&',x,y)')
16 ',`
17   define(`split', `ifelse($1, 1, `v(`$2',x,y)', `$0(eval($1/2),
18     substr(`$2', 0, eval($1/2)), `$3')$0(eval($1 - $1/2), substr(`$2',
19     eval($1/2)), `$3')')')
20   split(len(defn(`input')), defn(`input'))
22 define(`let', `define(`part1', defn(`part1')`$0')-')
23 forloop(0, 25, `define(substr(ALPHA, ', `, 1), defn(`let'))')
24 define(`part1')define(`part2', 0)
25 define(`do', `ifdef(`g$1_$2',`_$0(`$1',`$2',`$3',g$1_$2,i(`$4'))',`$4')')
26 define(`_do', `do(f(`$4',+,`t',`n')$3(`$1',`$2',`$3'),`$5')')
27 define(`td', `ifdef(`g'i(`$1')`_$2',`i(`$1'),`$2',`r'',`c(`$1'),`$2',`l'')')
28 define(`tl', `ifdef(`g$1_'i(`$2'),``$1',i(`$2'),`d'',``$1',c(`$2'),`u'')')
29 define(`tu', defn(`td'))
30 define(`tr', defn(`tl'))
31 define(`nd', ``$1',i(`$2'),`d'')
32 define(`nl', `c(`$1'),`$2',`l'')
33 define(`nu', ``$1',c(`$2'),`u'')
34 define(`nr', `i(`$1'),`$2',`r'')
35 define(`part2', do(b, `d', 0))
37 divert`'part1
38 part2