(defun shuffle (l / n i l1)
(setq n (length l))
(while (< (length l1) n)
(if (not (member (setq i (rem (dos_random) n)) l1)) (setq l1 (cons i l1)))
)
(mapcar '(lambda (x) (nth x l)) l1)
)
_$ (setq lst nil n 0)
0
_$ (length (repeat 50 (setq lst (cons (setq n (1+ n)) lst))))
50
_$ (QuickBench '((ShuffleList lst) (ShuffleList2 lst) (shuffle lst)))
Benchmarking ... done for 2048 iterations. Sorted from fastest.
Statement Increment Time(ms) Normalize Relative
--------------------------------------------------------------------------------
(SHUFFLELIST2 LST) 2048 1326 1326 20.33
(SHUFFLELIST LST) 2048 1560 1560 17.28
(SHUFFLE LST) 128 1685 26960 1.00
--------------------------------------------------------------------------------
I've tried it on a list of 1000 items ... and had to Ctrl+Break after 20 minutes.
Stefan,be careful with that approach: it might run for a long time. The way you attempt to bypass the possible duplicates from the random function is a hit-and-miss approach. You've got no guarantee that it will find all individual indexes, it might find the same index 100's (if not 1000's) of times.You are right. Here is another variant, 3 iterations. Works with duplicates too
I've tried it on a list of 1000 items ... and had to Ctrl+Break after 20 minutes.If you wanted to say 10 000 I believe you. Though, I think RAIN CODE doesn't have such a large list...:)
$ (setq lst nil n 0)
0
_$ (length (repeat 50 (setq lst (cons (setq n (1+ n)) lst))))
50
_$ (QuickBench '((ShuffleList lst) (ShuffleList2 lst) (shuffle lst) (ph:shuffle1 lst) (ShuffleList3 lst) (ShuffleList4 lst)))
Benchmarking ...... done for 2048 iterations. Sorted from fastest.
Statement Increment Time(ms) Normalize Relative
--------------------------------------------------------------------------------
(SHUFFLELIST2 LST) 2048 1904 1904 21.23
(SHUFFLELIST LST) 2048 2059 2059 19.63
(SHUFFLELIST4 LST) 512 1357 5428 7.45
(SHUFFLELIST3 LST) 512 1466 5864 6.89
(PH:SHUFFLE1 LST) 256 1154 9232 4.38
(SHUFFLE LST) 64 1263 40416 1.00
--------------------------------------------------------------------------------
Benchmarking ....... done for 1024 iterations. Sorted from fastest.
Statement Increment Time(ms) Normalize Relative
--------------------------------------------------------------------------------
(SHUFFLELIST LST) 1024 1061 1061 18.82
(SHUFFLELIST2 LST) 1024 1107 1107 18.04
(LM:SHUFFLE LST) 512 1185 2370 8.43
(SHUFFLELIST4 LST) 512 1419 2838 7.04
(SHUFFLELIST3 LST) 512 1578 3156 6.33
(PH:SHUFFLE1 LST) 256 1217 4868 4.10
(SHUFFLE LST) 64 1248 19968 1.00
--------------------------------------------------------------------------------
But still ... good one Lee!
Benchmarking ..... done for 2048 iterations. Sorted from fastest.
Statement Increment Time(ms) Normalize Relative
--------------------------------------------------------------------------------
(SHUFFLELIST2 LST) 2048 1764 1764 4.74
(SHUFFLELIST LST) 1024 1030 2060 4.06
(SHUFFLELIST5 LST) 512 1000 4000 2.09
(LM:SHUFFLE LST) 512 1045 4180 2.00
(PH:SHUFFLE1 LST) 256 1046 8368 1.00
--------------------------------------------------------------------------------
Not to mention, you're also correct: the OP's probably not going to be very concerned about fractions of seconds ;)
Benchmarking ..... done for 8 iterations. Sorted from fastest.
Statement Increment Time(ms) Normalize Relative
--------------------------------------------------------------------------------
(HFB:SHUFFLE LST) 8 1998 1998 54.15
(HFB:SHUFFLETYP LST vlax-vbLong) 8 2029 2029 53.33
(HFB:SHUFFLEVAR LST) 8 2200 2200 49.18
(SHUFFLELIST6 LST) 4 1278 2556 42.33
(SHUFFLELIST LST) 1 13525 108200 1.00
--------------------------------------------------------------------------------
Benchmarking ............ done for 2048 iterations. Sorted from fastest.
Statement Increment Time(ms) Normalize Relative
--------------------------------------------------------------------------------
(SHUFFLELIST2 LST) 2048 1263 1263 21.14
(HFB:SHUFFLE LST) 2048 1436 1436 18.60
(SHUFFLELIST LST) 2048 1497 1497 17.84
(HFB:SHUFFLETYP LST vlax-vbLong) 2048 1497 1497 17.84
(HFB:SHUFFLEVAR LST) 2048 1606 1606 16.63
(SHUFFLELIST6 LST) 2048 1903 1903 14.03
(SHUFFLELIST5 LST) 1024 1404 2808 9.51
(LM:SHUFFLE LST) 1024 1436 2872 9.30
(SHUFFLELIST4 LST) 512 1013 4052 6.59
(SHUFFLELIST3 LST) 512 1107 4428 6.03
(PH:SHUFFLE1 LST) 512 1512 6048 4.42
(SHUFFLE LST) 128 1669 26704 1.00
--------------------------------------------------------------------------------