1 divert(-1)dnl -*- m4 -*-
2 # Usage: m4 [-Dfile=day02.input] day02.m4
4 include(`common.m4')ifelse(common(02), `ok', `',
5 `errprint(`Missing common initialization
8 define(`part1', 0)define(`part2', 0)
9 define(`try', `ifelse(`$2', `red', `$1 > 12 || $0(shift(shift($@)))',
10 `$2', `green', `$1 > 13 || $0(shift(shift($@)))',
11 `$2', `blue', `$1 > 14 || $0(shift(shift($@)))', 0)')
12 define(`_game1', `ifelse(eval(try(translit(`$2', ` ', `,'))), `0',
13 `game1(`$1', shift(shift($@)))')')
14 define(`game1', `ifelse(`$2', `', `define(`part1', eval(part1+$1))',
16 define(`max', `ifelse(eval(`$1>$2'), 1, `$1', `$2')')
17 define(`_red', `max($1, $4)`,$2,$3'')
18 define(`_green', ``$1,'max($2, $4)`,$3'')
19 define(`_blue', ``$1,$2,'max($3, $4)')
20 define(`splat', ``$1*$2*$3'')
21 define(`game2', `ifelse(`$2', `', `define(`part2', eval(part2+splat($1)))',
22 `$0(_$3($1, $2), shift(shift(shift($@))))')')
23 define(`game', `game1($@)game2(`0,0,0', translit((shift($@)), ` ()', `,'))')
24 translit((include(defn(`file'))), define(`Game', `game(')nl`:;,', `),,')