aoc-forth

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

06.fs (643B) - raw


      1 : read-input ( -- a u ) pad pad 4095 accept ;
      2 : nget ( a u -- c1 c2 c3 c4 ) 
      3   0 do dup r@ + c@ swap loop drop ;
      4 : array create allot does> + ;
      5 
      6 128 constant len 
      7 len array countbuf 
      8 
      9 : 1+c! ( a -- ) dup c@ 1+ swap c! ;
     10 : no-dups ( a -- f ) 
     11   len 0 do dup r@ + c@ 1 > 
     12   if drop false unloop exit then loop drop true ;
     13 
     14 : ndiff ( c1 c2 c3 c4 n -- f ) 
     15   0 countbuf 128 erase
     16   0 do countbuf 1+c! loop 
     17   0 countbuf no-dups ;
     18 
     19 variable n
     20 : solve
     21     n @ - 0 do dup r@ + 
     22     n @ nget n @ ndiff if r@ n @ + . cr drop unloop exit 
     23     then loop ;
     24 : solveboth
     25   read-input 2dup 
     26   4 n ! solve \ part 1 
     27   14 n ! solve \ part 2 
     28   bye ;
     29 solveboth