day 15 golfed m4, 829 effective bytes
[aoc_eblake.git] / 2017 / day24.m4
blob48d0791b04b1b7dd1d160e7dc3e543f084f16f7c
1 divert(-1)dnl -*- m4 -*-
2 # Usage: m4 [-Dfile=day24.input] day24.m4
4 include(`common.m4')ifelse(common(24), `ok', `',
5 `errprint(`Missing common initialization
6 ')m4exit(1)')
8 define(`input', translit(include(defn(`file')), nl, `;'))
9 define(`line', `_$0(translit(`$1', `/', `,'))')
10 define(`_line', `ifelse(`$1', `$2', `define(`d$1')', `define(`l$1',
11   defn(`l$1')`,`$2'')define(`l$2', defn(`l$2')`,`$1'')')')
12 ifdef(`__gnu__', `
13   patsubst(defn(`input'), `\([^;]*\);', `line(`\1')')
14 ', `
15   define(`_chew', `line(substr(`$1', 0, index(`$1', `;')))define(`tail',
16     substr(`$1', incr(index(`$1', `;'))))ifelse(index(defn(`tail'), `;'), -1,
17     `', `$0(defn(`tail'))')')
18   define(`chew', `ifelse(eval($1 < 12), 1, `_$0(`$2')', `$0(eval($1/2),
19     substr(`$2', 0, eval($1/2)))$0(eval(len(defn(`tail')) + $1 - $1/2),
20     defn(`tail')substr(`$2', eval($1/2)))')')
21   chew(len(defn(`input')), defn(`input'))
24 define(`X', 0)define(`B', 0)define(`Y', 0)
25 define(`D', defn(`define'))define(`P', defn(`popdef'))define(`A', defn(`incr'))
26 define(`E', defn(`eval'))define(`F', defn(`ifelse'))define(`I', defn(`ifdef'))
27 define(`V', `I(`n$1_$2',,`D(`n$1_$2')D(`n$2_$1')_$0(`$1',`$2',''dnl
28 ``F(I(`d$2',-)I(`n$2',=),`-',`D(`n$2')E(`$1+$2*3+$3'),A(A(`$4')),`P(`n$2')'',
29 `E(`$1+$2+$3'),A(`$4')'))P(`n$1_$2')P(`n$2_$1')')')
30 define(`_V', `F(E(`$3>'X),1,`D(`X',`$3')')F(E(`$4>'B`||($3>'Y`&&$4=='B`)'),
31 1,`D(`B',`$4')D(`Y',`$3')')_foreach(`V(`$2',',`,`$3',`$4')',l$2)$5')
32 V(0, 0, 0, 0)
33 define(`part1', X)
34 define(`part2', Y)
36 divert`'part1
37 part2