The simplest shuffle algorithm, Fisher-Yates, is widely used and easy to implement. I personally used it to create a card game in Sinatra:
# Fisher-Yates Shuffle Algorithm
module FisherYates
def self.shuffle(numbers)
n = numbers.length
while n > 0
x = rand(n-=1)
numbers[x], numbers[n] = numbers[n], numbers[x]
end
return numbers
end
end
So let's imagine you want to use it in your Rails app, you could do something like this:
def initialize(numbers)
shuffle = FisherYates.shuffle(numbers)
return shuffle.inspect
end
If you want to test this script from shell, add this after FisherYates
, and save as shuffle.rb
. Add numbers as arguments, or just execute script to shuffle defined numbers from array:
@numbers = [1,2,3,4,5,6,7,8,9,10,12,13,14]
if ARGV.empty?
puts FisherYates.shuffle(@numbers).inspect
else
puts FisherYates.shuffle(ARGV).inspect
end
Without inspect
you would get each number in separated line, but with inspect
we receive array of numbers printed in terminal.
Top comments (0)