day 15 golf some more, 272 effective bytes
[aoc_eblake.git] / 2023 / day01.m4
blobdd194b0be2de9f0c5152cb4edf69e86e59bc7d4e
1 divert(-1)dnl -*- m4 -*-
2 # Usage: m4 [-Dfile=day01.input] day01.m4
4 include(`common.m4')ifelse(common(01), `ok', `',
5 `errprint(`Missing common initialization
6 ')m4exit(1)')
8 define(`do', ` +substr(`$1', 0, 1)`'substr(`$1', decr(len(`$1')))')
9 define(`clean', `translit(map(map(map(map(map(map(map(map(map(``$1'', `ONE',
10   `O1E'), `TWO', `T2O'), `THREE', `T3E'), `FOUR', `4'), `FIVE', `5E'), `SIX',
11   `6'), `SEVEN', `7N'), `EIGHT', `E8T'), `NINE', `N9E'), defn(`ALPHA'))')
12 define(`input', translit(include(defn(`file')), defn(`alpha')nl,
13   defn(`ALPHA')`;'))
14 ifdef(`__gnu__', `
15   define(`map', `patsubst(``$1'', `$2', `$3')')
16   define(`do2', defn(`do'))
17   define(`prep', defn(`clean'))
18   define(`eat', `patsubst(`$1', `\([^;]*\);', `do(`\1')')')
19 ', `
20   define(`_map', `ifelse(`$1', `-1', ``$2'', `map(substr(`$2', 0,
21     `$1')`$4'substr(`$2', incr($1)), `$3', `$4')')')
22   define(`map', `_$0(index($1, $2), $*)')
23   define(`do1', defn(`do'))
24   define(`do2', `do1(clean(`$1'))')
25   define(`prep', ``$1'')
26   define(`_chew', `do(substr(`$1', 0, index(`$1', `;')))define(
27     `tail', substr(`$1', incr(index(`$1', `;'))))ifelse(index(defn(`tail'),
28     `;'), -1, `', `$0(defn(`tail'))')')
29   define(`chew', `ifelse(eval($1 < 110), 1, `_$0(`$2')', `$0(eval($1/2),
30     substr(`$2', 0, eval($1/2)))$0(eval(len(defn(`tail')) + $1 - $1/2),
31     defn(`tail')substr(`$2', eval($1/2)))')')
32   define(`eat', `chew(len(`$1'), `$1')')
34 define(`part1', eval(eat(translit(defn(`input'), defn(`ALPHA')))))
35 define(`do', defn(`do2'))
36 define(`part2', eval(eat(prep(defn(`input')))))
38 divert`'part1
39 part2