19 lines
544 B
Text
19 lines
544 B
Text
defmodule RC do
|
|
def spiral_matrix(n) do
|
|
fmt = String.duplicate("~#{length(to_char_list(n*n-1))}w ", n) <> "~n"
|
|
Enum.flat_map(n..1, &[&1, &1])
|
|
|> tl
|
|
|> Enum.reduce({{0,-1},{0,1},[]}, fn run,{{x,y},{dx,dy},acc} ->
|
|
side = for i <- 1..run, do: {x+i*dx, y+i*dy}
|
|
{{x+run*dx, y+run*dy}, {dy, -dx}, acc++side}
|
|
end)
|
|
|> elem(2)
|
|
|> Enum.with_index
|
|
|> Enum.sort
|
|
|> Enum.map(fn {_,i} -> i end)
|
|
|> Enum.chunk(n)
|
|
|> Enum.each(fn row -> :io.format fmt, row end)
|
|
end
|
|
end
|
|
|
|
RC.spiral_matrix(5)
|