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)