From 3633da83795b52b65bfb8d335e95af9b299c5013 Mon Sep 17 00:00:00 2001 From: Eric Blake Date: Thu, 14 Dec 2023 20:27:21 -0600 Subject: [PATCH] day 12 part 2 incomplete I've completed refactoring over to use bitmasks to make it easier to detect difference by a single bit, but obviously missed something. 37661 is too low. --- 2023/day13.m4 | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/2023/day13.m4 b/2023/day13.m4 index bfe081d..7eb4583 100644 --- a/2023/day13.m4 +++ b/2023/day13.m4 @@ -7,7 +7,7 @@ include(`common.m4')ifelse(common(13), `ok', `', define(`input', translit(include(defn(`file'))2, `.#'nl, `012')) define(`x', 0)define(`y', 0)define(`g', 0) -define(`append', `define(`$1', defn(`$1')`$2')') +define(`append', `define(`$1', eval((defn(`$1')+0)*2|$2))') define(`do0', `append(`r$1_$3', $4)append(`c$1_$2', $4)define(`x', incr($2))') define(`do1', defn(`do0')) define(`do2', `ifelse($2, 0, `define(`g$1', g$1`,'decr($3))define(`g', @@ -22,16 +22,21 @@ ifdef(`__gnu__', ` chew(len(defn(`input')), defn(`input')) ') -define(`_reflect', `ifelse($1_$2, s, `ifdef(`n', `', `define(`n', - $2)pushdef(`u', $1_$2)')pushdef(`u', s)popdef(`s')', `ifdef(`n', `ifelse(s, - `', `', `stack_reverse(`u', `s')pushdef(`s', $1_$2)popdef(`n')')', - `pushdef(`s', $1_$2)')')') -define(`reflect', `define(`s')forloop(0, $2, `_$0(`$1', ', - `)')ifdef(`n', `n()popdef(`n')', 0)undefine(`s')undefine(`u')') -define(`echo', `$@') -define(`_check', `echo(+100*reflect(`r$1', $3)+reflect(`c$1', $2))') +define(`part1', 0)define(`part2', 0) +define(`bump', `define(`$1', eval($1+$2))') +forloop(1, 20, `define(`a'eval(1<<', `))') + +# try(seen, lo, hi, name, bound, amt) +define(`_try', `ifelse($1$2, 0, `bump(`part1', $6)', $1$3, $5, `bump(`part1', + $6)', $1$2, !0, `bump(`part2', $6)', $1$3, !$5, `bump(`part2', $6)', + `try($1, decr($2), incr($3), `$4', $5, $6)')') +define(`try', `ifelse($4_$2, $4_$3, `_$0($@)', $1, `', `ifdef(`a'eval($4_$2 ^ + $4_$3), `_$0(!$@)')')') +define(`_reflect', `try(`', decr($1), $@*$1)') +define(`reflect', `forloop(1, $2, `_$0(', `, $@)')') +define(`_check', `reflect(`r$1', $3, 100)reflect(`c$1', $2, 1)') define(`check', `_$0($1, g$1)') -define(`part1', eval(forloop_arg(0, decr(g), `check'))) +forloop_arg(0, decr(g), `check') divert`'part1 part2 -- 2.11.4.GIT