Day 25 part1 done

Looks like I need to get all the other stars before I can do part 2?
Never got this far!
master
Dustin Swan 3 days ago
parent 65a54ef8b8
commit 689bf15df4
Signed by: dustinswan
GPG Key ID: AB49BD6B2B3A6377

@ -0,0 +1,51 @@
defmodule Day25 do
def run do
%{locks: locks, keys: keys} = parse_input("data.txt")
# compare every key against every lock
good_keys =
Enum.reduce(keys, 0, fn key, acc ->
acc +
Enum.reduce(locks, 0, fn lock, acc2 ->
acc2 + if fits(lock, key), do: 1, else: 0
end)
end)
dbg(good_keys)
end
defp fits(lock, key) do
Enum.reduce(0..4, true, fn idx, acc ->
acc and Enum.at(lock, idx) + Enum.at(key, idx) <= 5
end)
end
defp parse_input(file) do
File.read!(file)
|> String.trim()
|> String.split("\n\n")
|> Enum.reduce(%{locks: [], keys: []}, fn el, %{locks: locks, keys: keys} = acc ->
grid = String.split(el, "\n") |> Enum.map(&String.graphemes/1)
is_lock = grid |> hd() |> hd() |> String.graphemes() |> Enum.all?(fn el -> el == "#" end)
res =
Enum.map(0..4, fn col ->
Enum.reduce(0..6, 0, fn row, acc2 ->
el = Enum.at(grid, row) |> Enum.at(col)
case el do
"#" -> acc2 + 1
_ -> acc2
end
end) - 1
end)
case is_lock do
true -> %{acc | locks: [res | locks]}
false -> %{acc | keys: [res | keys]}
end
end)
end
end
Day25.run()
Loading…
Cancel
Save