defmodule Griglia do @y_rows 4 @x_cols 2 @x_spazio 8 + 20 @y_spazio 14 + 2 @pt_base {0, 0} def crea(y_rows \\ @y_rows, x_cols \\ @x_cols) do for c_x <- 1..x_cols do for r_y <- 1..y_rows do elementi_in_colonna_precedenti = (c_x - 1) * y_rows n = (elementi_in_colonna_precedenti + r_y) |> Integer.to_string() %{n => %{col_x: c_x, row_y: r_y}} end end |> List.flatten() end def spazia(griglia \\ crea()) do Enum.map(griglia, fn e -> calcola_punto_base_griglia(e, @pt_base, @x_spazio, @y_spazio) end) end def calcola_punto_base_griglia(e, pt \\ @pt_base, xs \\ @x_spazio, ys \\ @y_spazio) do # {"1", 1, 1, {0, 0}, 28, 16} # {n, c_x, r_y, pt, xs, ys} [{n, %{col_x: c_x, row_y: r_y}}] = Map.to_list(e) {pt_x, pt_y} = pt pt_new_x = pt_x + xs * (c_x - 1) pt_new_y = pt_y + ys * (r_y - 1) {n, c_x, r_y, pt, xs, ys, {pt_new_x, pt_new_y}} end def crea_rect(ele_grigla) do {n, c_x, r_y, pt, xs, ys, {pt_new_x, pt_new_y}} = ele_grigla {"rectangle", {n, c_x, r_y, pt, xs, ys, {pt_new_x, pt_new_y}}} end end