24 lines
831 B
Racket
24 lines
831 B
Racket
#lang planet dyoo/whalesong
|
|
|
|
|
|
;; shuffle: vector -> vector
|
|
;; Reorders the contents of a vector according to the Fisher-Yates shuffling algorithm.
|
|
(define (shuffle! a-vec)
|
|
(letrec ([iter (lambda (i)
|
|
(cond
|
|
[(<= i 0)
|
|
a-vec]
|
|
[else
|
|
(let* ([index (random (add1 i))]
|
|
[t (vector-ref a-vec i)])
|
|
(vector-set! a-vec i (vector-ref a-vec index))
|
|
(vector-set! a-vec index t)
|
|
(iter (sub1 i)))]))])
|
|
(iter (sub1 (vector-length a-vec)))))
|
|
|
|
(shuffle! (vector))
|
|
(shuffle! (vector 'one))
|
|
(shuffle! (vector 1 2))
|
|
(shuffle! (vector "red" "white" "blue"))
|
|
(shuffle! (list->vector (string->list "abcdefghijklmnopqrstuvwxyz")))
|