From b76ecc635dda9097375ab6adb7db51c07b17e949 Mon Sep 17 00:00:00 2001 From: Eric Blake Date: Thu, 14 Dec 2023 20:49:02 -0600 Subject: [PATCH] day 14 part 1 Quite trivial: the answer falls out during parsing! I'm quite sure part 2 will require heavy refactoring. ~55ms GNU, ~90ms POSIX. --- 2023/day14.m4 | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 2023/day14.m4 diff --git a/2023/day14.m4 b/2023/day14.m4 new file mode 100644 index 0000000..30de7a7 --- /dev/null +++ b/2023/day14.m4 @@ -0,0 +1,28 @@ +divert(-1)dnl -*- m4 -*- +# Usage: m4 [-Dfile=day14.input] day14.m4 + +include(`common.m4')ifelse(common(14), `ok', `', +`errprint(`Missing common initialization +')m4exit(1)') + +define(`input', translit(include(defn(`file')), `.#'nl, `123')) +define(`x', 0)define(`y', 0)define(`part1', 0) +define(`maxx', index(defn(`input'), 3)) +define(`maxy', len(translit(defn(`input'), `O12'))) +forloop(0, decr(maxx), `define(`c'', `, 0)') +define(`doO', `define(`part1', eval(part1+'maxy`-c$1))define(`c$1', + incr(c$1))do1($@)') +define(`do1', `define(`x', incr($1))') +define(`do2', `define(`c$1', incr($2))do1($@)') +define(`do3', `define(`x', 0)define(`y', incr($2))') + +ifdef(`__gnu__', ` + patsubst(defn(`input'), `.', `do\&(x, y)') +',` + define(`chew', `ifelse($1, 1, `do$2(x, y)', `$0(eval($1/2), substr( + `$2', 0, eval($1/2)))$0(eval($1-$1/2), substr(`$2', eval($1/2)))')') + chew(len(defn(`input')), defn(`input')) +') + +divert`'part1 +part2 -- 2.11.4.GIT