Skip to content

Instantly share code, notes, and snippets.

@nbkolchin
Created June 16, 2016 08:41
Show Gist options
  • Save nbkolchin/a90c2d0f3789a147fd6886b382e6c3bf to your computer and use it in GitHub Desktop.
Save nbkolchin/a90c2d0f3789a147fd6886b382e6c3bf to your computer and use it in GitHub Desktop.
Tic-Tac-Toe benchmark in Forth for https://github.com/BartMassey/ttt-bench
( Tic-Tac-Toe benchmark for https://github.com/BartMassey/ttt-bench )
VARIABLE BOARD 9 CELLS ALLOT BOARD 9 CELLS ERASE
: B@ CELLS BOARD + @ ;
: B! CELLS BOARD + ! ;
: NEGALINE ( a b c - filled )
B@ SWAP B@ + SWAP B@ + ABS 3 =
;
: GAMEVALUE
0 4 8 NEGALINE IF 0 B@ * EXIT THEN
2 4 6 NEGALINE IF 2 B@ * EXIT THEN
0 1 2 NEGALINE IF 0 B@ * EXIT THEN
3 4 5 NEGALINE IF 3 B@ * EXIT THEN
6 7 8 NEGALINE IF 6 B@ * EXIT THEN
0 3 6 NEGALINE IF 0 B@ * EXIT THEN
1 4 7 NEGALINE IF 1 B@ * EXIT THEN
2 5 8 NEGALINE IF 2 B@ * EXIT THEN
DROP
9 0 DO I B@ 0= IF UNLOOP -2 EXIT THEN LOOP
0
;
: NEGAMAX ( a - a )
DUP GAMEVALUE DUP -2 <> IF NIP EXIT THEN DROP
-1
9 0 DO
I B@ 0= IF
OVER I B!
OVER NEGATE RECURSE NEGATE
OVER OVER < IF NIP ELSE DROP THEN
0 I B!
THEN
LOOP
NIP
;
: MAIN
1 NEGAMAX . CR
;
MAIN
BYE
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment