···
|> String.split("\n", trim: true)
-
result = Regex.named_captures(~r/move (?<count>\d+) from (?<from>\d) to (?<to>\d)/, move)
-
count: String.to_integer(result["count"]),
-
from: String.to_integer(result["from"]),
-
to: String.to_integer(result["to"])
···
-
|> Enum.map(&Tuple.to_list/1)
-
|> Enum.map(fn column -> Enum.drop_while(column, &is_nil/1) end)
|> Map.new(fn {v, k} -> {k, v} end)
···
Map.update!(columns, to, &(moved ++ &1))
<!-- livebook:{"output":true} -->
-
{:module, Day05, <<70, 79, 82, 49, 0, 0, 10, ...>>, {:move, 3}}
-
|> Enum.reduce(crates, &Day05.move/2)
-
|> Enum.map(fn {_, v} -> hd(v) end)
<!-- livebook:{"output":true} -->
···
-
|> Enum.reduce(crates, &Day05.move(&1, &2, false))
-
|> Enum.map(fn {_, v} -> hd(v) end)
<!-- livebook:{"output":true} -->
···
|> String.split("\n", trim: true)
+
Regex.named_captures(~r/move (?<count>\d+) from (?<from>\d) to (?<to>\d)/, move)
+
|> Map.new(fn {k, v} -> {String.to_atom(k), String.to_integer(v)} end)
···
+
|> Enum.map(fn column -> column |> Tuple.to_list() |> Enum.drop_while(&is_nil/1) end)
|> Map.new(fn {v, k} -> {k, v} end)
···
Map.update!(columns, to, &(moved ++ &1))
+
def eval(crates, moves, reverse? \\ true) do
+
|> Enum.reduce(crates, &Day05.move(&1, &2, reverse?))
+
|> Enum.map(fn {_, v} -> hd(v) end)
<!-- livebook:{"output":true} -->
+
{:module, Day05, <<70, 79, 82, 49, 0, 0, 13, ...>>, {:eval, 3}}
+
Day05.eval(crates, moves)
<!-- livebook:{"output":true} -->
···
+
Day05.eval(crates, moves, false)
<!-- livebook:{"output":true} -->