2023 day 17 optimize
[aoc_eblake.git] / 2015 / day3.m4
blob803511670f68b55187ebbf6cddf169cac5bcbe1b
1 divert(-1)dnl -*- m4 -*-
2 # Usage: m4 [-Dfile=day3.input] day3.m4
4 include(`common.m4')ifelse(common(3), `ok', `',
5 `errprint(`Missing common initialization
6 ')m4exit(1)')
8 define(`list', translit(include(file), `^>v<'nl, `NESW'))
9 define(`offset', 8000)define(`x', offset)define(`y', offset)
10 define(`x0', offset)define(`x1', offset)define(`y0', offset)define(`y1', offset)
11 define(`part1', 0)define(`part2', 0)define(`s', 0)
12 define(`visit', `ifdef(`h$1_$2_$3', `', `define(`h$1_$2_$3')define(`part$1',
13   incr(defn(`part$1')))')')
14 define(`flip', `define(`s', ifelse(s, 0, 1, 0))')
15 visit(1, x, y)visit(2, x0, y0)visit(2, x1, y1)
16 define(`N_', `define(`y', incr(y))visit(1, x, y)define(`y's,
17   incr(defn(`y's)))visit(2, defn(`x's), defn(`y's))flip()')
18 define(`E_', `define(`x', incr(x))visit(1, x, y)define(`x's,
19   incr(defn(`x's)))visit(2, defn(`x's), defn(`y's))flip()')
20 define(`S_', `define(`y', decr(y))visit(1, x, y)define(`y's,
21   decr(defn(`y's)))visit(2, defn(`x's), defn(`y's))flip()')
22 define(`W_', `define(`x', decr(x))visit(1, x, y)define(`x's,
23   decr(defn(`x's)))visit(2, defn(`x's), defn(`y's))flip()')
24 ifdef(`__gnu__', `
25   patsubst(defn(`list'), `\(.\)', `\1_()')
26 ',`
27   define(`split', `ifelse($1, 1, `$2_()', `$0(eval($1/2),
28     substr(`$2', 0, eval($1/2)))$0(eval(len(defn(`tail')) + $1 - $1/2),
29     defn(`tail')substr(`$2', eval($1/2)))')')
30   split(len(defn(`list')), defn(`list'))
33 divert`'part1
34 part2