day 6 fix bug
[aoc_eblake.git] / 2022 / day01.m4
blobab9d88b4073f5cd7d8f8f0124def08066151e34c
1 divert(-1)dnl -*- m4 -*-
2 # Usage: m4 [-Dfile=day01.input] day01.m4
4 include(`common.m4')ifelse(common(01), `ok', `',
5 `errprint(`Missing common initialization
6 ')m4exit(1)')
8 define(`best1', 0)define(`best2', 0)define(`best3', 0)define(`acc', 0)
9 define(`swp', `ifelse(eval($2>$1), 1, `define(`$1', $2`'define(`$2', $1))')')
10 define(`do', `ifelse(`$1', `', `swp(`best1', `acc')swp(`best2', `acc')swp(
11 `best3', `acc')define(`acc', 0)', `define(`acc', eval(acc+$1))')')
13 define(`input', translit(include(defn(`file')), nl, `;');)
14 ifdef(`__gnu__', `
15   patsubst(defn(`input'), `\([^;]*\);', `do(`\1')')
16 ', `
17   define(`_chew', `do(substr(`$1', 0, index(`$1', `;')))define(
18     `tail', substr(`$1', incr(index(`$1', `;'))))ifelse(index(defn(`tail'),
19     `;'), -1, `', `$0(defn(`tail'))')')
20   define(`chew', `ifelse(eval($1 < 12), 1, `_$0(`$2')', `$0(eval($1/2),
21     substr(`$2', 0, eval($1/2)))$0(eval(len(defn(`tail')) + $1 - $1/2),
22     defn(`tail')substr(`$2', eval($1/2)))')')
23   chew(len(defn(`input')), defn(`input'))
25 define(`part1', best1)
26 define(`part2', eval(best1 + best2 + best3))
28 ifelse(`dnl golfing variants, only the newline between `' is essential
29 dnl part1
30 define(_,`ifelse($2,,`eval($1',$3,,`_(eval(($2>$1)*$2+($2<=$1)*$1)',`_($1,
31 eval($3+$2)'),shift(shift(shift($@))))')_(0,translit(include(i),`
32 ',`,'))
33 dnl both parts
34 define(_,`ifelse($4,,`$1 eval($1+$2+$3',$5,,`_(eval(($4>$1)*$4+($4<=$1)*$1),
35 eval(($4>$1)*$1+($4<=$1&$4>$2)*$4+($4<=$2)*$2),eval(($4>$2)*$2+($4<=$2&$4>$3)
36 *$4+($4<=$3)*$3)',`_($1,$2,$3,eval($5+$4)'),shift(shift(shift(shift(shift(
37 $@))))))')_(0,0,0,translit(include(f),`
38 ',`,'))
41 divert`'part1
42 part2