Best shuffle: Difference between revisions
Content added Content deleted
(→{{header|Common Lisp}}: it still reads like a C program) |
(→{{header|Common Lisp}}: alternative version (incomplete)) |
||
Line 984: | Line 984: | ||
up: (pu 0) |
up: (pu 0) |
||
a: (a 1)</lang> |
a: (a 1)</lang> |
||
this alternative version is based on a [http://blog.viridian-project.de/2008/04/06/sequence-shuffling-revisited/ discussion here] |
|||
<lang lisp>(defun better-shuffle (seq) |
|||
(let ((tagged (mapcar (lambda (x) (cons (random 1.0) x)) (loop for char across seq collect char)))) |
|||
(coerce (mapcar 'cdr (sort tagged #'> :key 'car)) 'string))) |
|||
(map 'list 'shuffle '("abracadabra" "seesaw" "elk" "grrrrrr" "up" "a")) |
|||
("rbcarabdaaa" "wassee" "ekl" "rrrrrgr" "up" "a")</lang> |
|||
=={{header|D}}== |
=={{header|D}}== |