Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
46
Task/24-game-Solve/Elixir/24-game-solve.elixir
Normal file
46
Task/24-game-Solve/Elixir/24-game-solve.elixir
Normal file
|
|
@ -0,0 +1,46 @@
|
|||
defmodule Game24 do
|
||||
@expressions [ ["((", "", ")", "", ")", ""],
|
||||
["(", "(", "", "", "))", ""],
|
||||
["(", "", ")", "(", "", ")"],
|
||||
["", "((", "", "", ")", ")"],
|
||||
["", "(", "", "(", "", "))"] ]
|
||||
|
||||
def solve(digits) do
|
||||
dig_perm = permute(digits) |> Enum.uniq
|
||||
operators = perm_rep(~w[+ - * /], 3)
|
||||
for dig <- dig_perm, ope <- operators, expr <- @expressions,
|
||||
check?(str = make_expr(dig, ope, expr)),
|
||||
do: str
|
||||
end
|
||||
|
||||
defp check?(str) do
|
||||
try do
|
||||
{val, _} = Code.eval_string(str)
|
||||
val == 24
|
||||
rescue
|
||||
ArithmeticError -> false # division by zero
|
||||
end
|
||||
end
|
||||
|
||||
defp permute([]), do: [[]]
|
||||
defp permute(list) do
|
||||
for x <- list, y <- permute(list -- [x]), do: [x|y]
|
||||
end
|
||||
|
||||
defp perm_rep([], _), do: [[]]
|
||||
defp perm_rep(_, 0), do: [[]]
|
||||
defp perm_rep(list, i) do
|
||||
for x <- list, y <- perm_rep(list, i-1), do: [x|y]
|
||||
end
|
||||
|
||||
defp make_expr([a,b,c,d], [x,y,z], [e0,e1,e2,e3,e4,e5]) do
|
||||
e0 <> a <> x <> e1 <> b <> e2 <> y <> e3 <> c <> e4 <> z <> d <> e5
|
||||
end
|
||||
end
|
||||
|
||||
case Game24.solve(System.argv) do
|
||||
[] -> IO.puts "no solutions"
|
||||
solutions ->
|
||||
IO.puts "found #{length(solutions)} solutions, including #{hd(solutions)}"
|
||||
IO.inspect Enum.sort(solutions)
|
||||
end
|
||||
Loading…
Add table
Add a link
Reference in a new issue