Report abuse

base = 10
places = 4 
max = base ** (places * 2)
counts = [0] * (places + 1)
(1..1000000).each do
  index = rand(max)
  permutation = "%0#{places * 2}d" % index.to_s(base)
  original = (0...places).map { |i| permutation[i].chr }
  guess = (places...(places * 2)).map { |i| permutation[i].chr }
  matches = 0 
  guess.each do |g| 
    (0...places).each do |i| 
      if g == original[i]
        original[i] = nil 
        matches += 1
        break
      end 
    end 
  end 
  counts[matches] += 1
end
p counts # => [195649, 456019, 292866, 53717, 1749]

$ irb
>> (456019+2*292866+3*53717+4*1749)/(195649+456019+292866+53717+1749).to_f
=> 1.209898