( 54K . How about a nice game of tic-tac-toe ) |10 @Console/vector $2 &read $5 &type $1 &write $1 &error $1 |000 @grid/x $2 &o $2 &turn $1 |100 @on-reset ( -> ) ;meta #06 DEO2 ;handle-turn .Console/vector DEO2 ;grid/buf str/ [ LIT "O ] guide/ BRK @meta 00 ( ) "Tic-Tac-Toe 0a ( ) "By 20 "Devine 20 "Lu 20 "Linvega 0a ( ) "23 20 "Jul 20 "2026 00 00 @handle-turn ( -> ) .Console/read DEI [ LIT "a ] SUB ( valid ) DUP #09 LTH ?{ POP BRK } ( id ) grid/ BRK ( @|Grid ) %grid/get-state ( -- mask* ) { .&x LDZ2 .&o LDZ2 ORA2 } %grid/has-free ( -- t ) { /get-state #01ff NEQ2 } %grid/is-taken ( id -- mask* t ) { #0001 ROT #40 SFT SFT2 DUP2 /get-state AND2 ORA } @grid/ ( id -- ) DUP /is-taken ?{ .&turn LDZ ?{ ( O ) .&o LDZ2 ORA2 DUP2 .&o STZ2 [ LIT "O ] !/ } ( X ) .&x LDZ2 ORA2 DUP2 .&x STZ2 [ LIT "X ] !/ } POP2 POP ;dict/taken !str/ @grid/buf [2 "a|b|c 0a "-+-+- 0a "d|e|f 0a "-+-+- 0a "g|h|i 0a 0a00 ] @grid/ ( . XO -- ) [ LITr -Console/write ] DEOr ;dict/victory #800f DEO !str/ @grid/ ( id mask* XO -- ) STH ROT STHkr #00 ROT DUP ADD DUP #06 DIV #06 MUL ADD ;&buf ADD2 STA ;&buf str/ victory/check ?/ POPr /has-free ?{ ( | End in Draw ) ;dict/draw #800f DEO !str/ } [ LIT2 "XO ] [ LIT2 00 -&turn ] LDZ EQU DUP .&turn STZ [ JMP SWP POP ] ( .. ) @guide/ ( XO -- ) .Console/write DEO ;dict/guide ( .. ) @str/ ( str* -- ) &>w LDAk DUP ?{ POP POP2 JMP2r } .Console/write DEO INC2 !/>w @victory/check ( mask* -- t ) STH2 ;&end ;&lut &>l LDA2k DUP2 STH2kr AND2 EQU2 ?{ INC2 INC2 GTH2k ?/>l } NEQ2 POP2r JMP2r &lut [4 ( abc ) 0007 ( def ) 0038 ( ghi ) 01c0 ( adg ) 0049 ( beh ) 0092 ( cfi ) 0124 ( aei ) 0111 ( ceg ) 0054 ] &end @dict/taken "Position 20 "taken. 0a 00 &victory 20 "won. 0a 00 &guide 20 "playing: 20 0a 00 &draw "Draw. 0a 00