day 2 golfed, sort of; 451 bytes
[aoc_eblake.git] / 2020 / day5.m4
blob3883ee1f06be8338ab7759cb79c2b84afb6b2749
1 divert(-1)dnl -*- m4 -*-
2 # Usage: m4 [-Dfile=day5.input] day5.m4
4 include(`common.m4')ifelse(common(5), `ok', `',
5 `errprint(`Missing common initialization
6 ')m4exit(1)')
8 define(`lo', 1023)define(`hi', 0)define(`s', 0)
9 define(`list', quote(translit(include(defn(`file')), `FBRL'nl, `0110,')))
10 define(`store', `ifelse(eval($1 < lo), 1, `define(`lo', $1)')ifelse(eval($1
11   > hi), 1, `define(`hi', $1)')define(`s', eval(s + $1))')
12 ifdef(`__gnu__', `patsubst(defn(`list'), `\([^,]*\),', `store(eval(0b\1))')',
13   `define(`b2d', `_$0(0, `$1')')define(`_b2d', `ifelse(`$2', `', `$1',
14     `$0(eval($1*2+substr(`$2', 0, 1)), substr(`$2', 1))')')
15   define(`split', `ifelse($1, 10, `store(b2d($2))', `$0(eval($1/20*10),
16     substr(`$2', 0, eval($1/20*10)))$0(eval($1-$1/20*10), substr(`$2',
17     eval($1/20*10)))')')
18   split(eval(len(defn(`list'))/11*10), translit(defn(`list'), `,'))')
19 define(`part1', hi)
20 define(`part2', eval((lo + hi) * (hi - lo + 1) / 2 - s))
22 divert`'part1
23 part2