Day 10 Part 1
This commit is contained in:
parent
f295bd93af
commit
566a9b76b8
1 changed files with 48 additions and 0 deletions
48
2020/day10/day10.ex
Normal file
48
2020/day10/day10.ex
Normal file
|
|
@ -0,0 +1,48 @@
|
|||
defmodule Day10 do
|
||||
defp read_input do
|
||||
Path.expand('input', Path.dirname(__ENV__.file))
|
||||
|> File.read!()
|
||||
end
|
||||
|
||||
defp parse_adapters(text) do
|
||||
joltages = text |> String.trim() |> String.split("\n") |> Enum.map(&String.to_integer/1)
|
||||
joltages ++ [3 + Enum.max(joltages)]
|
||||
end
|
||||
|
||||
defp super_power(adapters, stack = [top | _rest]) do
|
||||
as = Enum.filter(adapters, fn next -> can_stack?(top, next) end)
|
||||
|
||||
if Enum.empty?(as) do
|
||||
stack
|
||||
else
|
||||
next = Enum.min(as)
|
||||
remaining = Enum.reject(adapters, fn a -> a == next end)
|
||||
super_power(remaining, [next | stack])
|
||||
end
|
||||
end
|
||||
|
||||
defp can_stack?(a1, a2) do
|
||||
d = a2 - a1
|
||||
1 <= d and d <= 3
|
||||
end
|
||||
|
||||
defp pairs(enum) do
|
||||
Enum.chunk_every(enum, 2, 1, :discard)
|
||||
end
|
||||
|
||||
def part1 do
|
||||
adapters = read_input() |> parse_adapters()
|
||||
|
||||
counts =
|
||||
super_power(adapters, [0])
|
||||
|> pairs()
|
||||
|> Enum.reduce(%{}, fn [a2, a1], counts ->
|
||||
d = a2 - a1
|
||||
Map.put(counts, d, Map.get(counts, d, 0) + 1)
|
||||
end)
|
||||
|
||||
counts[3] * counts[1]
|
||||
end
|
||||
end
|
||||
|
||||
Day10.part1() |> IO.inspect()
|
||||
Loading…
Reference in a new issue