RosettaCodeData/Task/100-prisoners/Ruby/100-prisoners.rb
2023-07-01 13:44:08 -04:00

22 lines
526 B
Ruby

prisoners = [*1..100]
N = 10_000
generate_rooms = ->{ [nil]+[*1..100].shuffle }
res = N.times.count do
rooms = generate_rooms[]
prisoners.all? {|pr| rooms[1,100].sample(50).include?(pr)}
end
puts "Random strategy : %11.4f %%" % (res.fdiv(N) * 100)
res = N.times.count do
rooms = generate_rooms[]
prisoners.all? do |pr|
cur_room = pr
50.times.any? do
found = (rooms[cur_room] == pr)
cur_room = rooms[cur_room]
found
end
end
end
puts "Optimal strategy: %11.4f %%" % (res.fdiv(N) * 100)