22 lines
526 B
Ruby
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)
|