day 6 fix bug
[aoc_eblake.git] / 2015 / day15.m4
blob403d2a7ee26999fced4ab3745441ef3b3c814e06
1 divert(-1)dnl -*- m4 -*-
2 # Usage: m4 [-Dfile=day15.input] day15.m4
4 include(`common.m4')ifelse(common(15), `ok', `',
5 `errprint(`Missing common initialization
6 ')m4exit(1)')
8 define(`capacity')define(`durability')define(`flavor')define(`texture')
9 define(`calories')define(`items', 0)
10 define(`_slurp', `ifelse(`$#', 1, `', `define(`c_'items, $2)define(`d_'items,
11   $3)define(`f_'items, $4)define(`t_'items, $5)define(`C_'items, $6)define(
12   `items', incr(items))$0(shift(shift(shift(shift(shift(shift($@)))))))')')
13 define(`slurp', `define(`list', _$0$1)')
14 slurp(translit((include(defn(`file'))), `:'nl, `,,'))
15 ifelse(items, 4, `', `errprintn(`unexpected input')m4exit(1)')
17 define(`part1', 0)define(`part2', 0)
18 define(`score', `_$0(eval($1_0 * $2 + $1_1 * $3 + $1_2 * $4 + $1_3 * $5))')
19 define(`_score', `ifelse(index($1, -), 0, 0, $1)')
20 define(`do', `_$0(eval(score(`c', $@) * score(`d', $@) * score(`f', $@) *
21   score(`t', $@)), score(`C', $@))')
22 define(`_do', `ifelse(eval($1 > part1), 1, `define(`part1', $1)')ifelse($2,
23   500, `ifelse(eval($1 > part2), 1, `define(`part2', $1)')')')
24 forloop_var(`a', 0, 100, `forloop_var(`b', 0, 100 - a, `forloop_var(`c', 0,
25   100 - a - b, `do(a, b, c, eval(100 - a - b - c))')')')
27 divert`'part1
28 part2