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
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()')
25 patsubst(defn(`list'), `\(.\)', `\1_()')
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'))