23 lines
769 B
Common Lisp
23 lines
769 B
Common 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 result)
|
|
(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)))))))
|
|
|
|
(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"))
|