|
1 | 1 | defmodule Day3 do
|
2 | 2 | def get_memory(filename) do
|
3 |
| - File.stream!(filename) |> Stream.map(&Function.identity/1) |
4 |
| - end |
| 3 | + File.stream!(filename) |
| 4 | + |> Stream.map(&String.trim_trailing/1) |
| 5 | + |> Enum.join("") |
| 6 | + end |
5 | 7 |
|
6 | 8 | def get_multiplicands1(line) do
|
7 |
| - Regex.scan(~r/mul\((\d{1,3}),(\d{1,3})\)/, line) |> Enum.map(&Enum.drop(&1, 1)) |
| 9 | + Regex.scan(~r/mul\((\d{1,3}),(\d{1,3})\)/, line) |
| 10 | + |> Enum.map(&Enum.drop(&1, 1)) |
| 11 | + end |
| 12 | + |
| 13 | + def get_multiplicands2(line) do |
| 14 | + Regex.scan(~r/do\(\)(.*?)(don't\(\)|$)/, "do()" <> line) |
| 15 | + |> Enum.map(&Enum.at(&1, 1)) |
| 16 | + |> Enum.join("") |
| 17 | + |> then(&Regex.scan(~r/mul\((\d{1,3}),(\d{1,3})\)/, &1)) |
| 18 | + |> Enum.map(&Enum.drop(&1, 1)) |
8 | 19 | end
|
9 | 20 |
|
10 | 21 | def get_result(filename, get_multiplicands) do
|
11 | 22 | get_memory(filename)
|
12 |
| - |> Enum.map(get_multiplicands) |
13 |
| - |> Enum.flat_map(&Function.identity/1) |
14 |
| - |> Enum.map(fn pair -> Enum.map(pair, &Integer.parse(&1)) |> Enum.map(&elem(&1, 0)) end) |
| 23 | + |> get_multiplicands.() |
| 24 | + |> Enum.map(fn pair -> |
| 25 | + Enum.map(pair, &Integer.parse(&1)) |
| 26 | + |> Enum.map(&elem(&1, 0)) |
| 27 | + end) |
15 | 28 | |> Enum.map(&Enum.product/1)
|
16 | 29 | |> Enum.sum()
|
17 | 30 | end
|
18 | 31 | end
|
19 | 32 |
|
20 | 33 | filename = System.argv() |> List.first()
|
21 |
| -Day3.get_result(filename, &Day3.get_multiplicands1/1) |> IO.puts |
| 34 | +Day3.get_result(filename, &Day3.get_multiplicands1/1) |> IO.puts() |
| 35 | +Day3.get_result(filename, &Day3.get_multiplicands2/1) |> IO.puts() |
0 commit comments