Iters = 10000 N = 4 Meths = { :shuf => "gshuf -i 0-#{N-1} -n 1", :seq => "gseq 0 #{N-1} | gsort -R | head -n1", :urand1 => "echo $(($(printf '%d' \"'`head -c 1 /dev/urandom | base64 | tr A D`\")%4))", :urand2 => "echo $(($(printf '%d' \"'`head -c 1 /dev/urandom | base64`\")%4))" } def test(cmd) t = Time.now results = [0] * N 1.upto(Iters) do i = `#{cmd}`.to_i results[i] += 1 end puts(Time.now - t) results end Meths.each do |meth, cmd| print "[#{meth}]" test(cmd).each_with_index do |n, i| puts " #{i}: #{n}" end puts end