day 25 optimize and improve heuristics
[aoc_eblake.git] / 2018 / day2.m4
blobd9e4c07f6ea08988ddd86b6699c70b3ff2ff8733
1 divert(-1)dnl -*- m4 -*-
2 # Usage: m4 [-Dhashsize=H] [-Dfile=day2.input] day2.m4
4 include(`common.m4')ifelse(common(2, 65537), `ok', `',
5 `errprint(`Missing common initialization
6 ')m4exit(1)')
8 define(`list', translit(include(defn(`file')), alpha`'nl, ALPHA`;'))
9 define(`d2', 0)define(`d3', 0)
10 define(`visit', `_$0(forloop(0, 25, `count(', `, `$1')').)')
11 define(`_visit', `ifelse(index(`$1', `.2.'), `-1', `', `define(`d2',
12   incr(d2))')ifelse(index(`$1', `.3.'), `-1', `', `define(`d3', incr(d3))')')
13 define(`count', `.len(translit(`$2', substr('dquote(ALPHA)`, `$1',
14   1)`''dquote(ALPHA)`, `-'))_$0(substr(`$2', 0, `$1')`_'substr(`$2',
15   incr(`$1')))')
16 define(`_count', `ifdef(`$1', `define(`part2', translit(`$1',
17   ALPHA`_', alpha))', `define(`$1')')')
18 ifdef(`__gnu__', `
19   patsubst(defn(`list'), `\([^;]*\);', `visit(`\1')')
20 ', `
21   define(`half', `eval($1/26/2*26)')
22   define(`chew', `ifelse(`$1', `26', `visit(`$2')', `$0(half(`$1'), substr(
23     `$2', 0, half(`$1')))$0(eval($1-half(`$1')), substr(`$2', half(`$1')))')')
24   chew(eval(len(defn(`list'))/27*26), translit(defn(`list'), `;'))
26 define(`part1', eval(d2*d3))
28 divert`'part1
29 part2