Sha256: a9a80495b4b317d3cfaf6810ad7722ef8340077e1f6251297e15baae87b7d6a6

Contents?: true

Size: 653 Bytes

Versions: 52

Compression:

Stored size: 653 Bytes

Contents

defmodule Spiral do

  @doc """
  Given the dimension, return a square matrix of numbers in clockwise spiral order.
  """
  @spec matrix(dimension :: integer) :: list(list(integer))
  def matrix(0), do: []
  def matrix(dimension) do
    unwind(dimension, dimension, 1)
  end

  defp unwind(row, col, start) do
    case col do
      0 -> [[]]
      _ -> [Enum.to_list(start..start + col - 1) |
            unwind(col, row - 1, start + col) |> rotate_right]
    end
  end

  defp rotate_right(matrix) do
    matrix |> transpose |> Enum.map(&Enum.reverse/1)
  end

  defp transpose(matrix) do
    matrix |> List.zip |> Enum.map(&Tuple.to_list/1)
  end
end

Version data entries

52 entries across 52 versions & 1 rubygems

Version Path
trackler-2.2.1.109 tracks/elixir/exercises/spiral-matrix/example.exs
trackler-2.2.1.108 tracks/elixir/exercises/spiral-matrix/example.exs
trackler-2.2.1.107 tracks/elixir/exercises/spiral-matrix/example.exs
trackler-2.2.1.106 tracks/elixir/exercises/spiral-matrix/example.exs
trackler-2.2.1.105 tracks/elixir/exercises/spiral-matrix/example.exs
trackler-2.2.1.104 tracks/elixir/exercises/spiral-matrix/example.exs
trackler-2.2.1.103 tracks/elixir/exercises/spiral-matrix/example.exs
trackler-2.2.1.102 tracks/elixir/exercises/spiral-matrix/example.exs
trackler-2.2.1.101 tracks/elixir/exercises/spiral-matrix/example.exs
trackler-2.2.1.100 tracks/elixir/exercises/spiral-matrix/example.exs
trackler-2.2.1.99 tracks/elixir/exercises/spiral-matrix/example.exs
trackler-2.2.1.98 tracks/elixir/exercises/spiral-matrix/example.exs
trackler-2.2.1.97 tracks/elixir/exercises/spiral-matrix/example.exs
trackler-2.2.1.96 tracks/elixir/exercises/spiral-matrix/example.exs
trackler-2.2.1.95 tracks/elixir/exercises/spiral-matrix/example.exs
trackler-2.2.1.94 tracks/elixir/exercises/spiral-matrix/example.exs
trackler-2.2.1.93 tracks/elixir/exercises/spiral-matrix/example.exs
trackler-2.2.1.92 tracks/elixir/exercises/spiral-matrix/example.exs
trackler-2.2.1.91 tracks/elixir/exercises/spiral-matrix/example.exs
trackler-2.2.1.90 tracks/elixir/exercises/spiral-matrix/example.exs