day 25 optimize and improve heuristics
[aoc_eblake.git] / 2019 / day4.m4
blob5dd49fc9b81d34882813d307349365ad66f28ada
1 divert(-1)dnl -*- m4 -*-
2 # Usage: m4 { -Dlo=val -Dhi=val | -Dfile=day4.input } day4.m4
3 # If day4.input exists, its contents should be "lo-hi"
5 include(`common.m4')ifelse(common(4), `ok', `',
6 `errprint(`Missing common initialization
7 ')m4exit(1)')
9 define(`parse', `define(`lo', $1)define(`hi', $2)')
10 exists(defn(`file'), `parse(translit(include(defn(`file')), `-'nl(), `,'))')
11 ifdef(`lo', `', `errprint(`Missing definition of lo
12 ')m4exit(1)')
13 ifdef(`hi', `', `errprint(`Missing definition of hi
14 ')m4exit(1)')
15 ifelse(len(lo).len(hi).eval(lo >= 100000 && lo < hi), 6.6.1, `',
16   `errprint(`Inconsistent definition of lo/hi
17 ')m4exit(1)')
19 define(`eq', `ifelse($1, $2, 1, 0)')
20 define(`check', `ifelse(eval($1$2$3$4$5$6 >= lo && $1$2$3$4$5$6 <= hi), 1,
21   `_$0(0eq($1, $2)eq($2, $3)eq($3, $4)eq($4, $5)eq($5, $6)0, $1$2$3$4$5$6)')')
22 define(`_check', `ifelse(index($1, 1), -1, `',
23   index($1, 010), -1, `define(`part1', incr(part1))',
24   `define(`part2', incr(part2))')')
26 define(`part1', 0)
27 define(`part2', 0)
28 forloop_var(`a', 1, 9, `forloop_var(`b', a, 9, `forloop_var(`c', b, 9,
29   `forloop_var(`d', c, 9, `forloop_var(`e', d, 9, `forloop_var(`f', e, 9,
30   `check(a, b, c, d, e, f)')')')')')')
32 define(`part1', eval(part1 + part2))
34 divert`'part1
35 part2