Find Chess960 starting position identifier: Difference between revisions
Find Chess960 starting position identifier (view source)
Revision as of 21:57, 23 July 2022
, 1 year ago→{{header|Common Lisp}}: Add implementation.
(→{{header|Common Lisp}}: Add implementation.) |
(→{{header|Common Lisp}}: Add implementation.) |
||
Line 243:
=={{header|Common Lisp}}==
<lang lisp>(defun sp-id (start-array)
(let* ((n5n-table '("NN---" "N-N--" "N--N-" "N---N" "-NN--" "-N-N-" "-N--N" "--NN-" "--N-N" "---NN"))
(n5n-pattern (substitute-if-not #\- (lambda (ch) (eql ch #\N)) (remove #\Q (remove #\B start-array))))
(knights (position n5n-pattern n5n-table :test #'string-equal))
(queen (position #\Q (remove #\B start-array)))
(left
(right
(destructuring-bind (dark-bishop light-bishop) (mapcar (lambda (p) (floor p 2))
(cond ((zerop (mod left-bishop 2)) (list left-bishop right-bishop))
(t (list right-bishop left-bishop))))
(+ (* 96 knights) (* 16 queen) (* 4 dark-bishop) light-bishop))))
(loop for ary in '("RNBQKBNR""QNRBBNKR""RQNBBKRN""RNQBBKRN") doing
(format t "~a: ~a~%" ary (sp-id ary)))
</lang>
{{Out}}
|