2021 day 4 part 2
This commit is contained in:
parent
07820fe7dd
commit
3b1d14580a
1 changed files with 20 additions and 6 deletions
|
@ -7,7 +7,10 @@ defmodule Day4 do
|
||||||
sum_unmarked(winning_board) * current_number
|
sum_unmarked(winning_board) * current_number
|
||||||
end
|
end
|
||||||
|
|
||||||
def play({_numbers = [], boards}), do: boards
|
def part2(input) do
|
||||||
|
{current_number, last_board} = play_until_last(input)
|
||||||
|
sum_unmarked(last_board) * current_number
|
||||||
|
end
|
||||||
|
|
||||||
def play({[current_number | next_numbers], boards}) do
|
def play({[current_number | next_numbers], boards}) do
|
||||||
boards = for board <- boards, do: mark(board, current_number)
|
boards = for board <- boards, do: mark(board, current_number)
|
||||||
|
@ -18,6 +21,21 @@ defmodule Day4 do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def play_until_last({_numbers, [_last_board]} = input), do: play(input)
|
||||||
|
|
||||||
|
def play_until_last({numbers, boards} = input) do
|
||||||
|
{_current_number, current_winner} = play(input)
|
||||||
|
|
||||||
|
current_winner_no_markers = Map.new(current_winner, fn {k, {v, _marker}} -> {k, v} end)
|
||||||
|
|
||||||
|
remaining_boards =
|
||||||
|
Enum.reject(boards, fn board ->
|
||||||
|
current_winner_no_markers == Map.new(board, fn {k, {v, _marker}} -> {k, v} end)
|
||||||
|
end)
|
||||||
|
|
||||||
|
play_until_last({numbers, remaining_boards})
|
||||||
|
end
|
||||||
|
|
||||||
def sum_unmarked(board) do
|
def sum_unmarked(board) do
|
||||||
board
|
board
|
||||||
|> Enum.filter(&match?({_key, {_number, false}}, &1))
|
|> Enum.filter(&match?({_key, {_number, false}}, &1))
|
||||||
|
@ -54,10 +72,6 @@ defmodule Day4 do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def part2(_input) do
|
|
||||||
:ok
|
|
||||||
end
|
|
||||||
|
|
||||||
def input do
|
def input do
|
||||||
with [input_filename] <- System.argv(),
|
with [input_filename] <- System.argv(),
|
||||||
{:ok, input} <- File.read(input_filename) do
|
{:ok, input} <- File.read(input_filename) do
|
||||||
|
@ -116,4 +130,4 @@ defmodule Day4 do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
# Day4.run()
|
Day4.run()
|
||||||
|
|
Loading…
Reference in a new issue