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