Skip to content

Commit e587e4d

Browse files
committed
Solve the first part of day 3 puzzle
1 parent 60c091a commit e587e4d

File tree

2 files changed

+26
-0
lines changed

2 files changed

+26
-0
lines changed

day3/README.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
Execute this code via `elixir day3.exs <filename>`.
2+
3+
### Observations
4+
5+
1. Getting back into Elixir was easy. Just like with Clojure :)

day3/day3.exs

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
defmodule Day3 do
2+
def get_memory(filename) do
3+
File.stream!(filename) |> Stream.map(&Function.identity/1)
4+
end
5+
6+
def get_multiplicands1(line) do
7+
Regex.scan(~r/mul\((\d{1,3}),(\d{1,3})\)/, line) |> Enum.map(&Enum.drop(&1, 1))
8+
end
9+
10+
def get_result(filename, get_multiplicands) do
11+
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)
15+
|> Enum.map(&Enum.product/1)
16+
|> Enum.sum()
17+
end
18+
end
19+
20+
filename = System.argv() |> List.first()
21+
Day3.get_result(filename, &Day3.get_multiplicands1/1) |> IO.puts

0 commit comments

Comments
 (0)