Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
33
Task/100-prisoners/Elixir/100-prisoners.elixir
Normal file
33
Task/100-prisoners/Elixir/100-prisoners.elixir
Normal file
|
|
@ -0,0 +1,33 @@
|
|||
defmodule HundredPrisoners do
|
||||
def optimal_room(_, _, _, []), do: []
|
||||
def optimal_room(prisoner, current_room, rooms, [_ | tail]) do
|
||||
found = Enum.at(rooms, current_room - 1) == prisoner
|
||||
next_room = Enum.at(rooms, current_room - 1)
|
||||
[found] ++ optimal_room(prisoner, next_room, rooms, tail)
|
||||
end
|
||||
|
||||
def optimal_search(prisoner, rooms) do
|
||||
Enum.any?(optimal_room(prisoner, prisoner, rooms, Enum.to_list(1..50)))
|
||||
end
|
||||
end
|
||||
|
||||
prisoners = 1..100
|
||||
n = 1..10_000
|
||||
generate_rooms = fn -> Enum.shuffle(1..100) end
|
||||
|
||||
random_strategy = Enum.count(n,
|
||||
fn _ ->
|
||||
rooms = generate_rooms.()
|
||||
Enum.all?(prisoners, fn pr -> pr in (rooms |> Enum.take_random(50)) end)
|
||||
end)
|
||||
|
||||
IO.puts "Random strategy: #{random_strategy} / #{n |> Range.size}"
|
||||
|
||||
optimal_strategy = Enum.count(n,
|
||||
fn _ ->
|
||||
rooms = generate_rooms.()
|
||||
Enum.all?(prisoners,
|
||||
fn pr -> HundredPrisoners.optimal_search(pr, rooms) end)
|
||||
end)
|
||||
|
||||
IO.puts "Optimal strategy: #{optimal_strategy} / #{n |> Range.size}"
|
||||
Loading…
Add table
Add a link
Reference in a new issue