aoc-forth

Advent of code solutions in UF forth
git clone git://git.alexwennerberg.com/aoc-forth
Log | Files | Refs | README

commit eea696d517c49a2cf26862c0e01ddfb0473b7a76
parent eab8c096cfabeae45ee44c9d9268268de4559647
Author: alex wennerberg <alex@alexwennerberg.com>
Date:   Thu,  8 Dec 2022 01:07:08 -0800

day 8 part 1

Diffstat:
A2022/08.fs | 47+++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 47 insertions(+), 0 deletions(-)

diff --git a/2022/08.fs b/2022/08.fs @@ -0,0 +1,47 @@ +10 constant (cr) +\ size is forest size +99 constant size +create forest size size * allot ; +create visible size size * allot ; +: c>u ( c -- u ) 48 - ; +\ x, y move right, down coordinates +: fidx ( x y -- ) size * + forest + c@ ; +: mark-vis ( x y -- ) size * + visible + 1 swap c! ; +: read-input size size * 0 do + key dup (cr) = if drop r> 1- >r else c>u i forest + c! + then loop ; +: dbg size size * dump ; +variable (max) +: reset-max -1 (max) ! ; + +\ "functional programming" +: inv size 1- swap - swap size 1- swap - swap ; +: down ; +: up inv down ; +: right swap ; +: left inv right ; + +: set-if-vis ( x y u -- ) +dup (max) @ > if (max) ! mark-vis else 2drop drop then ; + +variable director +: count-visible ( xt -- ) +size 0 do reset-max +size 0 do +i j director @ execute +2dup fidx set-if-vis +loop loop ; + +: total-vis 0 size size * 0 do i visible + c@ + loop ; + +: solve read-input + ['] down director ! + count-visible + ['] up director ! + count-visible + ['] right director ! + count-visible + ['] left director ! + count-visible + total-vis . ; +solve