Advent of Code 2025 - Day 6

Part 1

transpose = fn list -> Enum.zip_with(list, &Function.identity/1) end

values =
  File.read!("ids.txt")
  |> String.split("\n")
  |> Enum.map(&(Regex.split(~r{\s+}, &1, trim: true)))

transpose.(values)
|> Enum.map(&Enum.reverse/1)
|> Enum.map(fn [head | tail] ->
  case head do
    "*" -> tail |> Enum.map(&String.to_integer/1) |> Enum.product
    "+" -> tail |> Enum.map(&String.to_integer/1) |> Enum.sum
  end
end)
|> Enum.sum
|> IO.inspect

Part 2

transpose = fn list -> Enum.zip_with(list, &Function.identity/1) end

items =
  File.read!("ids.txt")
  |> String.split("\n")
  |> Enum.map(&(String.split(&1, "", trim: true)))

transpose.(items)
|> Enum.map(&Enum.reverse/1)
|> Enum.map(fn [head | tail] -> {head, tail |> Enum.reverse |> Enum.join("") |> String.trim} end)
|> Enum.chunk_by(fn {_, value} -> value == "" end)
|> Enum.reject(&(&1 == [{" ", ""}]))
|> Enum.map(fn [{operand, value} | tail] ->
  Enum.reduce(tail, String.to_integer(value), fn {_, x}, acc ->
    case operand do
      "*" -> acc * String.to_integer(x)
      "+" -> acc + String.to_integer(x)
    end
  end)
end)
|> Enum.sum
|> IO.inspect