day 25 solved in C
[aoc_eblake.git] / 2018 / day4.m4
blobd19d4aec6aadcc78b901a7d92fda593e2b988c36
1 divert(-1)dnl -*- m4 -*-
2 # Usage: m4 [-Dhashsize=H] [-Dfile=day4.input] day4.m4
4 include(`common.m4')ifelse(common(4, 65537), `ok', `',
5 `errprint(`Missing common initialization
6 ')m4exit(1)')
8 define(`n0228', `0301')
9 define(`n0331', `0401')
10 define(`n0430', `0501')
11 define(`n0531', `0601')
12 define(`n0630', `0701')
13 define(`n0731', `0801')
14 define(`n0831', `0901')
15 define(`n0930', `1001')
16 define(`n1031', `1101')
17 define(`norm', `ifelse(`$3', `23', `ifdef(`n$1$2', `n$1$2',
18   `$1eval(`(1$2+1)%100', 10, 2)')', `$1$2')')
19 define(`sort', `ifelse(`$2', `', ``,`$1''', `ifelse(eval(`$1 < $2'), 1,
20   ``,$@'', ``,`$2''$0(`$1', shift(shift($@)))')')')
21 define(`line', `ifelse(`$6', `Guard', `guard(norm($2, $3, $4), $7)',
22   `time($2$3, incr(decr($5)))')')
23 define(`guard', `define(`g$1', `$2')ifdef(`G$2', `', `define(`G$2',
24   0)pushdef(`guards', `$2')')')
25 define(`time', `define(`l$1', sort(`$2'ifdef(`l$1', `l$1', `pushdef(`days',
26   `$1')')))')
27 define(`_1518', `line(')
28 translit(include(defn(`file')), `- :'nl`[]#', `,,,)_')
30 define(`bestt', 0)define(`bestv', 0)
31 define(`addg', `_$0(`$1', eval(G$1` + $3 - $2'))')
32 define(`_addg', `define(`G$1', `$2')ifelse(eval($2 > bestt), 1,
33   `define(`bestt', `$2')define(`bestg', `$1')')')
34 define(`bump', `define(`m$1_$2', incr(0defn(`m$1_$2')))ifelse(eval(
35   m$1_$2 > bestv), 1, `define(`bestv', m$1_$2)define(`bestG',
36   `$1')define(`bestm', `$2')')')
37 define(`map', `_$0(g$1()l$1)')
38 define(`_map', `ifelse(`$2', `', `', `forloop($2, decr($3), `bump(`$1', ',
39   `)')addg(`$1', `$2', `$3')$0(`$1', shift(shift(shift($@))))')')
40 stack_foreach(`days', `map')
41 define(`part2', eval(bestG * bestm))
42 define(`bestv', 0)
43 define(`find', `ifdef(`m$1_$2', `ifelse(eval(m$1_$2 > bestv), 1,
44   `define(`bestv', m$1_$2)define(`bestm', `$2')')')')
45 forloop(0, 59, `find('bestg`, ', `)')
46 define(`part1', eval(bestg * bestm))
48 divert`'part1
49 part2