Anonymous user
Best shuffle: Difference between revisions
→{{header|Common Lisp}}: new version using simple loops
(→{{header|Common Lisp}}: DEFUN is not there to define self recursive local functions. Use LABELS.) |
(→{{header|Common Lisp}}: new version using simple loops) |
||
Line 1,011:
=={{header|Common Lisp}}==
<lang lisp>(defun count-equal-chars (string1 string2)
(loop for c1 across string1 and c2 across string2
count (char= c1 c2)))
(defun shuffle (string)
(let ((length (length string))
(result (copy-seq string)))
(dotimes (i length)
(dotimes (j length)
(when (and (/= i j)
(char/= (aref string i) (aref result j))
(char/= (aref string j) (aref result i)))
(rotatef (aref result i) (aref result j)))))
result))
(defun best-shuffle (list)
(dolist (string list)
(let ((shuffled (shuffle string)))
(format t "~%~a ~a (~a)"
string
shuffled
(count-equal-chars string shuffled)))))
(best-shuffle '("abracadabra" "seesaw" "elk" "grrrrrr" "up" "a"))</lang>
Output:
abracadabra caadrbabaar (0)
seesaw ewaess (0)
elk kel (0)
grrrrrr rgrrrrr (5)
up pu (0)
a a (1)
===Version 2===
<lang lisp>(defun all-best-shuffles (str)
(let (tbl out (shortest (length str)) (s str))
Line 1,057 ⟶ 1,091:
(dolist (s (list "abracadabra" "seesaw" "elk" "grrrrrr" "up" "a"))
(format t "~A: ~A~%" s (best-shuffle s)))
</lang>
Output:
|