aoc-forth

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

commit 3fade3329680c8b3599b463ec71bf562aa903845
parent 40bd93f303eb221b20a12c2ddae113973931b666
Author: alex wennerberg <alex@alexwennerberg.com>
Date:   Thu,  1 Dec 2022 13:49:34 -0800

Clean up forth day 1

Diffstat:
M2022/01.fs | 31++++++++++++++++---------------
1 file changed, 16 insertions(+), 15 deletions(-)

diff --git a/2022/01.fs b/2022/01.fs @@ -1,37 +1,38 @@ include ../utils/dmath.f -: darray -create 4 * allot does> swap 4 * + ; +: 2cells 4 * ; +: 2!0 0 0 rot 2! ; +: 4dup 3 pick 3 pick 3 pick 3 pick ; + +: darray create 2cells allot does> swap 2cells + ; -6 darray foo +6 darray top3 variable cals 2variable tmp -: to-num ( a u -- d ) 0 0 tmp 2! +: to-num ( a u -- d ) tmp 2!0 0 do dup r@ + c@ h# 30 - 0 tmp 2@ 10 1 m*/ d+ tmp 2! loop drop tmp 2@ ; \ d1 == highest -: get-nums ( -- d3 d2 d1 ) 0 foo 2@ 1 foo 2@ 2 foo 2@ ; -: reset-cals 0 0 cals 2! ; -: 4dup 3 pick 3 pick 3 pick 3 pick ; +: get-top3 ( -- d3 d2 d1 ) 0 top3 2@ 1 top3 2@ 2 top3 2@ ; \ stole from peter : dpivot ( d1 d2 -- min max ) 4dup d< if else 2swap then ; : check-total -get-nums cals 2@ -dpivot 2 foo 2! -dpivot 1 foo 2! -dpivot 0 foo 2! +get-top3 cals 2@ +dpivot 2 top3 2! +dpivot 1 top3 2! +dpivot 0 top3 2! 2drop ; : add-calories ( u -- ) cals 2@ d+ cals 2! ; : process-line ( -- a n ) pad pad 10 accept dup 0= - if 2drop check-total reset-cals exit + if 2drop check-total cals 2!0 exit then to-num add-calories ; -: solve reset-cals 2252 0 do process-line loop - get-nums d. cr \ part 1 - get-nums d+ d+ d. cr \ part 2 +: solve cals 2!0 2252 0 do process-line loop + get-top3 d. cr \ part 1 + get-top3 d+ d+ d. cr \ part 2 bye ; solve