2016 Update
This commit is contained in:
parent
948b86eafa
commit
dcf5d15da3
7965 changed files with 139854 additions and 31002 deletions
|
|
@ -1,28 +1,26 @@
|
|||
defmodule RC do
|
||||
def queen(n) do
|
||||
add = Tuple.duplicate(true, 2*n-1)
|
||||
sub = Tuple.duplicate(true, 2*n-1)
|
||||
solve(n, [], add, sub)
|
||||
def queen(n, display \\ true) do
|
||||
solve(n, [], [], [], display)
|
||||
end
|
||||
|
||||
def solve(n, row, _, _) when n <= length(row) do
|
||||
print(n,row)
|
||||
defp solve(n, row, _, _, display) when n==length(row) do
|
||||
if display, do: print(n,row)
|
||||
1
|
||||
end
|
||||
def solve(n, row, add, sub) do
|
||||
defp solve(n, row, add_list, sub_list, display) do
|
||||
Enum.map(Enum.to_list(0..n-1) -- row, fn x ->
|
||||
iadd = x + (len = length(row))
|
||||
isub = if (y = x-len) < 0, do: y + 2*n - 1, else: y
|
||||
if elem(add, iadd) and elem(sub, isub) do
|
||||
solve(n, [x|row], put_elem(add,iadd,false), put_elem(sub,isub,false))
|
||||
else
|
||||
add = x + length(row) # \ diagonal check
|
||||
sub = x - length(row) # / diagonal check
|
||||
if (add in add_list) or (sub in sub_list) do
|
||||
0
|
||||
else
|
||||
solve(n, [x|row], [add | add_list], [sub | sub_list], display)
|
||||
end
|
||||
end) |> Enum.sum
|
||||
end) |> Enum.sum # total of the solution
|
||||
end
|
||||
|
||||
def print(n, row) do
|
||||
IO.puts frame = "+-" <> String.duplicate("--", n) <> "+"
|
||||
defp print(n, row) do
|
||||
IO.puts frame = "+" <> String.duplicate("-", 2*n+1) <> "+"
|
||||
Enum.each(row, fn x ->
|
||||
line = Enum.map_join(0..n-1, fn i -> if x==i, do: "Q ", else: ". " end)
|
||||
IO.puts "| #{line}|"
|
||||
|
|
@ -34,3 +32,7 @@ end
|
|||
Enum.each(1..6, fn n ->
|
||||
IO.puts " #{n} Queen : #{RC.queen(n)}"
|
||||
end)
|
||||
|
||||
Enum.each(7..12, fn n ->
|
||||
IO.puts " #{n} Queen : #{RC.queen(n, false)}" # no display
|
||||
end)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue