commit 05b208756f4f506e55a9d847dba8c524a868d480 parent 41d623b8117388eb767b14736997be82d66c8a1f Author: alex wennerberg <alex@alexwennerberg.com> Date: Mon, 5 Dec 2022 01:30:34 -0800 day 5 part 1 Diffstat:
A | 2022/05.fs | | | 50 | ++++++++++++++++++++++++++++++++++++++++++++++++++ |
1 file changed, 50 insertions(+), 0 deletions(-)
diff --git a/2022/05.fs b/2022/05.fs @@ -0,0 +1,50 @@ +62 constant stack-size +: stacks create ( n ) + 0 do here cell+ , stack-size allot loop does> swap stack-size cell+ * + ( [a] -- ) ; +9 stacks crate-stack +: push ( n a -- ) tuck @ c! 1 swap +! ; +: ?empty ( a -- f ) dup @ 2 - = ; +\ 99 == error +: pop ( a -- n ) dup ?empty if 99 . cr bye then dup -1 swap +! @ dup 1+ 0 swap c! c@ ; +: c-to-n ( c -- u ) 48 - ; +: move-from ( u2 u3 ) crate-stack swap crate-stack pop swap push ; +\ move u1 items from u2 to u3 +: cratemover-9000 ( u1 u2 u3 -- ) rot 0 do 2dup move-from loop 2drop ; +: cratemover-9001 ( u1 u2 u3 -- ) >r crate-stack swap crate-stack swap @ r> - cmove ; +: 0idx ( u1 u2 -- u3 u4 ) 1- swap 1- swap ; +: move ( -- ) noop ; : from noop ; +: debug 0 crate-stack 64 9 * dump ; +: to ( -- | n ) bl parse drop c@ c-to-n 0idx cratemover-9000 ; +: push-str ( a1 a2 u -- ) 0 do 2dup c@ swap push 1+ loop drop ; +\ To save energy, start of input is manually parsed +\ Sample +\ 0 crate-stack " ZN" push-str +\ 1 crate-stack " MCD" push-str +\ 2 crate-stack " P" push-str + +\ [P] [C] [C] +\ [W] [B] [G] [V] [V] +\ [V] [T] [Z] [J] [T] [S] +\ [D] [L] [Q] [F] [Z] [W] [R] +\ [C] [N] [R] [H] [L] [Q] [F] [G] +\ [F] [M] [Z] [H] [G] [W] [L] [R] [H] +\ [R] [H] [M] [C] [P] [C] [V] [N] [W] +\ [W] [T] [P] [J] [C] [G] [W] [P] [J] +\ 1 2 3 4 5 6 7 8 9 + + +\ Real input +0 crate-stack " WRF" push-str +1 crate-stack " THMCDVWP" push-str +2 crate-stack " PMZNL" push-str +3 crate-stack " JCHR" push-str +4 crate-stack " CPGHQTB" push-str +5 crate-stack " GCWLFZ" push-str +6 crate-stack " WVLQZJGC" push-str +7 crate-stack " PNRFWTVC" push-str +8 crate-stack " JWHGRSV" push-str + +include input.txt +: solve 9 0 do r@ crate-stack dup pop dup emit swap push loop ; +solve +bye