day 25 optimize and improve heuristics
[aoc_eblake.git] / 2019 / day13.m4
blobe1390fe8989f03fbfe39d3d7177b1823dc6d2352
1 divert(-1)dnl -*- m4 -*-
2 # Usage: m4 [-Dfile=day13.input] day13.m4
4 include(`intcode.m4')ifelse(intcode(13), `ok', `',
5 `errprint(`Missing IntCode initialization
6 ')m4exit(1)')
8 parse(input)
9 define(`part1', 0)
10 define(`write', `define(`data', $1)')
11 define(`done', `oneshot(`loop')')
12 save()
13 define(`loop', `
14   oneshot(`io', defn(`pause_after_write'))
15   oneshot(`io', defn(`run_after_write'))
16   oneshot(`io', defn(`run_after_write'))
17   run()
18   ifelse(data, 2, `define(`part1', incr(part1))')
19   loop()')
20 loop()
21 restore()
23 define(`part2', 0)
24 define(`pad', 0)
25 define(`ball', 0)
26 define(`read', `eval((ball > pad) - (ball < pad))')
27 define(`mem0', 2)
28 define(`io', `define(`pc', $2)ifelse($1, 0, `run($2)')')
29 define(`loop', `
30   run()
31   define(`x', data)
32   run()
33   define(`y', data)
34   run()
35   ifelse(x.y, -1.0, `define(`part2', data)output(1, `score:'data)',
36     data, 3, `define(`pad', x)', data, 4, `define(`ball', x)')
37   loop()')
38 loop()
40 divert`'part1
41 part2