commit 7fd6e53516c2fd0ea0d1c7a253343c2d712c2e3c parent 2dc79ef970166b4204b705da7d7e5460b4ef4129 Author: alex wennerberg <alex@alexwennerberg.com> Date: Thu, 1 Dec 2022 13:32:26 -0800 write double parser Diffstat:
M | 2022/01.fs | | | 21 | ++++++++++++++++----- |
1 file changed, 16 insertions(+), 5 deletions(-)
diff --git a/2022/01.fs b/2022/01.fs @@ -6,7 +6,15 @@ create 4 * allot does> swap 4 * + ; 6 darray foo variable cals -: to-num ( a u -- n ) 0 -rot 0 do dup r@ + c@ h# 30 - rot 10 * + swap loop drop ; +\ Lol +2variable t10 +: d10* ( d1 -- d2 ) 0 0 t10 2! 10 0 do 2dup t10 2@ d+ t10 2! loop 2drop t10 2@ ; + +2variable tmp +: to-num ( a u -- d ) 0 0 tmp 2! +0 do dup r@ + c@ h# 30 - 0 +tmp 2@ d10* d+ tmp 2! loop drop tmp 2@ ; + \ low to high : get-nums ( -- d3 d2 d1 ) 0 foo 2@ 1 foo 2@ 2 foo 2@ ; @@ -16,17 +24,20 @@ variable cals \ stole from peter : dpivot ( d1 d2 -- min max ) 4dup d< if else 2swap then ; : check-total -cals 2@ d. cr get-nums cals 2@ dpivot 2 foo 2! dpivot 1 foo 2! dpivot 0 foo 2! -2drop get-nums d. d. d. cr ; +2drop ; -: add-calories ( u -- ) 0 \ double conversion +: 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 then to-num add-calories ; -: solve reset-cals 3000 0 do process-line loop ; +: solve reset-cals 2252 0 do process-line loop +get-nums d. cr \ part 1 +get-nums d+ d+ d. cr \ part 2 +bye +; solve