aoc-forth

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

commit 5a7c4c8a2ca73d0307b4b661297ad075453e9f7e
parent dd415be90cd8017e49f137e052d531638db91f9a
Author: alex wennerberg <alex@alexwennerberg.com>
Date:   Sat,  3 Dec 2022 11:12:06 -0800

slight cleanpu

Diffstat:
M2022/03.fs | 9++++-----
M2022/03b.fs | 20+++++++++-----------
2 files changed, 13 insertions(+), 16 deletions(-)

diff --git a/2022/03.fs b/2022/03.fs @@ -1,21 +1,20 @@ 65 constant asciiA variable total -\ byte array : barray create allot does> + ; -: charray 58 barray ; \ range incl a-z 6 symbols A-Z +: charray 128 barray ; \ range incl a-z 6 symbols A-Z : c@+ dup c@ >r 1+ r> ; charray charbuf -: clear-buf 58 0 do r@ 0 swap charbuf c! loop ; +: clear-buf 128 0 do r@ 0 swap charbuf c! loop ; : priority ( c -- u ) 96 mod dup 65 >= if 38 - then ; : read-rucksack ( -- a n ) pad pad 50 accept ; -: set-charbuf ( a u -- ) 0 do c@+ asciiA - charbuf 1 swap c! loop drop ; +: set-charbuf ( a u -- ) 0 do c@+ charbuf 1 swap c! loop drop ; : compartments ( a u -- a1 u1 a2 n2 ) 2 / 2dup swap over + swap ; : find-duplicate ( a n -- c ) - 0 do c@+ dup asciiA - charbuf c@ + 0 do c@+ dup charbuf c@ if nip unloop exit else drop then loop ; : solve 300 0 do diff --git a/2022/03b.fs b/2022/03b.fs @@ -1,36 +1,34 @@ \ hacky -65 constant asciiA variable total -\ byte array : barray create allot does> + ; -: charray 58 barray ; \ range incl a-z 6 symbols A-Z +: charray 128 barray ; \ range incl a-z 6 symbols A-Z : c@+ dup c@ >r 1+ r> ; charray charbuf charray charbuf2 : intersect ( -- ) \ mutates charbuf -58 0 do r@ charbuf c@ r@ charbuf2 c@ and r@ charbuf c! loop +128 0 do r@ charbuf c@ r@ charbuf2 c@ and r@ charbuf c! loop ; -: clear-buf 58 0 do r@ 0 swap charbuf c! loop ; -: clear-buf2 58 0 do r@ 0 swap charbuf2 c! loop ; +: clear-buf 128 0 do r@ 0 swap charbuf c! loop ; +: clear-buf2 128 0 do r@ 0 swap charbuf2 c! loop ; : priority ( c -- u ) 96 mod dup 65 >= if 38 - then ; : read-rucksack ( -- a n ) pad pad 50 accept ; -: set-charbuf ( a u -- ) 0 do c@+ asciiA - charbuf 1 swap c! loop drop ; -: set-charbuf2 ( a u -- ) 0 do c@+ asciiA - charbuf2 1 swap c! loop drop ; +: set-charbuf ( a u -- ) 0 do c@+ charbuf 1 swap c! loop drop ; +: set-charbuf2 ( a u -- ) 0 do c@+ charbuf2 1 swap c! loop drop ; : get-duplicate ( c ) - 58 0 do r@ charbuf c@ if r@ unloop exit then loop + 128 0 do r@ charbuf c@ if r@ unloop exit then loop ; : solve 100 0 do read-rucksack set-charbuf read-rucksack set-charbuf2 intersect clear-buf2 read-rucksack set-charbuf2 intersect - get-duplicate asciiA + priority total +! - total ? + get-duplicate priority total +! clear-buf clear-buf2 loop + total ? bye ; solve bye