Skip to content

Commit 9da395b

Browse files
committed
Solve the second part of day 3 puzzle
1 parent e587e4d commit 9da395b

File tree

2 files changed

+22
-8
lines changed

2 files changed

+22
-8
lines changed

day3/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,4 @@ Execute this code via `elixir day3.exs <filename>`.
22

33
### Observations
44

5-
1. Getting back into Elixir was easy. Just like with Clojure :)
5+
1. Getting back into Elixir was easy :)

day3/day3.exs

Lines changed: 21 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,35 @@
11
defmodule Day3 do
22
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
57

68
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))
819
end
920

1021
def get_result(filename, get_multiplicands) do
1122
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)
1528
|> Enum.map(&Enum.product/1)
1629
|> Enum.sum()
1730
end
1831
end
1932

2033
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

Comments
 (0)