Find Chess960 starting position identifier: Difference between revisions
Content added Content deleted
(→{{header|Wren}}: Fix algorithm, add troublesome examples.) |
(→{{header|Common Lisp}}: Add implementation.) |
||
Line 241: | Line 241: | ||
Igual que la entrada de Commodore BASIC. |
Igual que la entrada de Commodore BASIC. |
||
</pre> |
</pre> |
||
=={{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 (position #\B start-array)) |
|||
(right (position #\B start-array :from-end t))) |
|||
(destructuring-bind (dark light) (mapcar (lambda (p) (floor p 2)) |
|||
(cond ((zerop (mod left 2)) (list left right)) |
|||
(t (list right left)))) |
|||
(+ (* 96 knights) (* 16 queen) (* 4 dark) light)))) |
|||
(loop for ary in '("RNBQKBNR""QNRBBNKR""RQNBBKRN""RNQBBKRN") doing |
|||
(format t "~a: ~a~%" ary (sp-id ary)))</lang> |
|||
{{Out}} |
|||
<pre>RNBQKBNR: 518 |
|||
QNRBBNKR: 105 |
|||
RQNBBKRN: 601 |
|||
RNQBBKRN: 617</pre> |
|||
=={{header|Factor}}== |
=={{header|Factor}}== |