1 divert(-1)dnl -*- m4 -*-
2 # Usage: m4 [-Dfile=day25.input] day25.m4
4 include(`common.m4')ifelse(common(25), `ok', `',
5 `errprint(`Missing common initialization
8 define(`input', translit(include(defn(`file')), `-=012'nl, `43567;'))
10 define(`_add', `add(`$1', `$2', eval($3/5-1))eval($3%5+3)')
11 define(`add', `ifelse(`$1$2$3', 0, `', `$1', `', `$0(5, `$2', `$3')',
12 `$2', `', `$0(`$1', 5, `$3')', `_$0(substr(`$1', 0, decr(len(`$1'))),
13 substr(`$2', 0, decr(len(`$2'))), ($3+substr(`$1', decr(len(`$1')))+substr(
14 `$2', decr(len(`$2')))-3))')')
15 define(`do', `define(`accum', add(accum, `$1'))')
18 patsubst(defn(`input'), `\([^;]*\);', `do(`\1')')
20 define(`_chew', `do(substr(`$1', 0, index(`$1', `;')))define(
21 `tail', substr(`$1', incr(index(`$1', `;'))))ifelse(index(defn(`tail'),
22 `;'), -1, `', `$0(defn(`tail'))')')
23 define(`chew', `ifelse(eval($1 < 40), 1, `_$0(`$2')', `$0(eval($1/2),
24 substr(`$2', 0, eval($1/2)))$0(eval(len(defn(`tail')) + $1 - $1/2),
25 defn(`tail')substr(`$2', eval($1/2)))')')
26 chew(len(defn(`input')), defn(`input'))
28 define(`part1', translit(accum, `43567', `-=012'))