day 15 part 1 optimize
[aoc_eblake.git] / 2023 / day14.m4
blob30de7a7154c3b23285e23a4201a9d091e44d02a1
1 divert(-1)dnl -*- m4 -*-
2 # Usage: m4 [-Dfile=day14.input] day14.m4
4 include(`common.m4')ifelse(common(14), `ok', `',
5 `errprint(`Missing common initialization
6 ')m4exit(1)')
8 define(`input', translit(include(defn(`file')), `.#'nl, `123'))
9 define(`x', 0)define(`y', 0)define(`part1', 0)
10 define(`maxx', index(defn(`input'), 3))
11 define(`maxy', len(translit(defn(`input'), `O12')))
12 forloop(0, decr(maxx), `define(`c'', `, 0)')
13 define(`doO', `define(`part1', eval(part1+'maxy`-c$1))define(`c$1',
14   incr(c$1))do1($@)')
15 define(`do1', `define(`x', incr($1))')
16 define(`do2', `define(`c$1', incr($2))do1($@)')
17 define(`do3', `define(`x', 0)define(`y', incr($2))')
19 ifdef(`__gnu__', `
20   patsubst(defn(`input'), `.', `do\&(x, y)')
21 ',`
22   define(`chew', `ifelse($1, 1, `do$2(x, y)', `$0(eval($1/2), substr(
23     `$2', 0, eval($1/2)))$0(eval($1-$1/2), substr(`$2', eval($1/2)))')')
24   chew(len(defn(`input')), defn(`input'))
27 divert`'part1
28 part2