OK.
Расчёт ходов короля на шахматной доске:
Код:
: ?ERROR ( X Y -- X Y flag )
2DUP 2DUP MIN 1 < -ROT MAX 8 > OR
;
: KING ( X Y -- )
?ERROR IF 2DROP ." ERROR!" CR EXIT THEN
2 -1 DO
2 -1 DO
2DUP J + SWAP I +
2OVER 2OVER -ROT = -ROT = AND -ROT ?ERROR -ROT 2SWAP OR IF 2DROP ELSE . . CR THEN
LOOP
LOOP
2DROP
;
Расчёт ходов коня на шахматной доске:
Код:
: ?ERROR ( X Y -- X Y flag )
2DUP 2DUP MIN 1 < -ROT MAX 8 > OR
;
: SHOW ( X Y n1 n2 -- X Y n1 n2 )
2OVER 2OVER -ROT + -ROT + ?ERROR IF 2DROP ELSE . . CR THEN
;
: SHOW ( X Y n1 n2 -- X Y n2 n1 )
SHOW NEGATE SHOW SWAP
;
: KNIGHT ( X Y -- )
?ERROR IF 2DROP ." ERROR!" CR EXIT THEN
-2 -1 2 0 DO
SHOW NEGATE SWAP SHOW
LOOP
2DROP 2DROP
;
P.S. Когда я это писал, ещё не знал о таких словах, как ROLL и PICK. Кстати, насчёт коня -- решение пришло спонтанно, наверняка я не первый, кто додумался, но всё же -- в стеке крутятся числа 2 и 1, меняя свой знак и меняясь местами. Все возможные варианты -- и есть ходы коня.