8-Puzzle: Moving a Tile
(defun state-new-pos (state dir)
(let ((dimen (truncate (sqrt (length (state-tiles state)))))
(blank-pos (state-blank-pos state)))
(multiple-value-bind (row col) (truncate blank-pos dimen)
(+ (* dimen (- row 1)) col)))
(+ (* dimen (+ row 1)) col)))
(+ (* dimen row) (- col 1))))
(+ (* dimen row) (+ col 1))))))))