Find Chess960 starting position identifier: Difference between revisions

→‎{{header|Common Lisp}}: Add implementation.
(→‎{{header|Wren}}: Fix algorithm, add troublesome examples.)
(→‎{{header|Common Lisp}}: Add implementation.)
Line 241:
Igual que la entrada de Commodore BASIC.
</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}}==
1,479

edits