day 6 fix bug
[aoc_eblake.git] / 2022 / day13.m4
blobec446d3df16a15cfa15027e7a971ef9c4ec3b4be
1 divert(-1)dnl -*- m4 -*-
2 # Usage: m4 [-Dfile=day13.input] day13.m4
4 include(`common.m4')ifelse(common(13), `ok', `',
5 `errprint(`Missing common initialization
6 ')m4exit(1)')
8 define(`input', translit((include(defn(`file'))), nl`,()', `;.');)
9 define(`part1', 0)define(`lo', 1)define(`hi', 1)define(`cnt', 1)
10 define(`eat')
11 define(`cmp', `ifelse(`$1', `$2', `$0(', `$1', (), `1eat(', `$2',
12   (), `0eat(', eat$1eat$2, `', `$0(first$1, first$2, (shift$1), (shift$2),',
13   eat$1, `', `$0(first$1, `$2', (shift$1), `()',', eat$2, `', `$0(`$1',
14   first$2, `()', (shift$2),', `eval(`$1<$2')eat(')shift(shift($@)))')
15 define(`arrange', `ifelse(cmp(`$2', `((2))'), 1, `define(`lo', incr(incr(lo)))',
16   `ifelse(cmp(`((6))', `$1'), 1, `', `ifelse(cmp(`$1', `((2))'), 1, `define(
17   `lo', incr(lo))define(`hi', eval(hi+cmp(`$2', `((6))')))', `define(`hi',
18   eval(hi+1+cmp(`$2', `((6))')))')')')')
19 define(`_do', `ifelse(cmp(`$2', `$3'), 1, `define(`part1',
20   eval(part1 + $1))arrange(`$2', `$3')', `arrange(`$3', `$2')')')
21 define(`do', `ifelse(`$1', `', `_$0(cnt`'translit(defn(`tmp'), `[.]',
22   `(,)'))define(`tmp')define(`cnt', incr(cnt))', `define(`tmp',
23   defn(`tmp')`.$1')')')
25 ifdef(`__gnu__', `
26   patsubst(defn(`input'), `\([^;]*\);', `do(`\1')')
27 ', `
28   define(`_chew', `do(substr(`$1', 0, index(`$1', `;')))define(
29     `tail', substr(`$1', incr(index(`$1', `;'))))ifelse(index(defn(
30     `tail'), `;'), -1, `', `$0(defn(`tail'))')')
31   define(`chew', `ifelse(eval($1 < 450), 1, `_$0(`$2')', `$0(eval($1/2),
32     substr(`$2', 0, eval($1/2)))$0(eval(len(defn(`tail')) + $1 - $1/2),
33     defn(`tail')substr(`$2', eval($1/2)))')')
34   chew(len(defn(`input')), defn(`input'))
36 define(`part2', eval(lo*(lo+hi)))
38 divert`'part1
39 part2