From: eden li Date: 2007-04-24T18:47:51+09:00 Subject: Re: Shuffle Method rand(3) - 1 always returns -1, 0 or 1 which is what sort() expects. However, as Daniel points out, this method favors certain positions for certain elements, so it won't give you a "true" shuffle. On Apr 24, 10:16 am, Ari Brown wrote: > On Apr 22, 2007, at 11:15 PM, eden li wrote: > > > Why not just do a random sort instead? > >>> some_array = ['cat', 'dog', 'fun', 'zoo'] > > => ['cat', 'dog', 'fun', 'zoo'] > >>> some_array.sort { rand(3) - 1 } > > => ["zoo", "dog", "fun", "cat"] > > I wanted to write my own method to better understand how it works. > Plus because it WAS fun, until it decided it didn't want to work. > > P.S. = why rand(3) - 1? Why not just some other rand(x)? > > > > >> --------------------------------------------------------------| > >> SOURCE 1 > >> --------------------------------------------------------------| > >> some_array= ['cat', 'dog', 'fun', 'zoo'] > > >> def shuffle some_array > >> recurssive_shuffle some_array > >> end > > >> def recurssive_shuffle some_array > >> n = some_array.length > >> helper_array = [] > >> new_array = [] > >> while n != 0 > >> r = rand(n) > >> while some_array.length != (r + 1) > >> helper_array.push some_array.pop > >> end > >> new_array.push some_array.pop > >> n = (n - 1) > >> helper_array.each do |item| > >> some_array.push item > >> end > >> end > >> puts new_array > >> end > > >> shuffle some_array > >> --------------------------------------------------------------| > >> SOURCE 2 > >> --------------------------------------------------------------| > >> some_array = ['cat', 'dog', 'fun', 'zoo'] > > >> def shuffle some_array > >> recurssive_shuffle some_array > >> end > > >> def recurssive_shuffle some_array > >> n = some_array.length > >> helper_array = [] > >> new_array = [] > >> while n != 0 > >> r = rand(n) > >> while some_array.length != (r + 1) > >> helper_array.push some_array.pop > >> puts 'Array' > >> puts helper_array > >> puts > >> end > >> new_array.push some_array.pop > >> n = (n - 1) > >> helper_array.each do |item| > >> some_array.push item > >> end > >> end > >> puts new_array > >> end > > >> shuffle some_array > > >> ---------------------------------------------------------------| > >> ~Ari > >> "I don't suffer from insanity. I enjoy every minute of it" --1337est > >> man alive > > ---------------------------------------------------------------| > ~Ari > "I don't suffer from insanity. I enjoy every minute of it" --1337est > man alive