Powered by AppSignal & Oban Pro

Day 4: Giant Squid

2021/04.livemd

Day 4: Giant Squid

Intro

https://adventofcode.com/2021/day/4

Input

input_test =
  """
  7,4,9,5,11,17,23,2,0,14,21,24,10,16,13,6,15,25,12,22,18,20,8,19,3,26,1

  22 13 17 11  0
   8  2 23  4 24
  21  9 14 16  7
   6 10  3 18  5
   1 12 20 15 19

   3 15  0  2 22
   9 18 13 17  5
  19  8  7 25 23
  20 11 10 24  4
  14 21 16 12  6

  14 21 17 24  4
  10 16 15  9 19
  18  8 23 26 20
  22 11 13  6  5
   2  0 12  3  7
  """
  |> String.split("\n", trim: true)

[draw_test | boards_test] = input_test

input_draw_test =
  draw_test
  |> String.split(",")
  |> Enum.map(&String.to_integer/1)

input_boards_test =
  boards_test
  |> Enum.map(fn x -> x |> String.split(" ", trim: true) |> Enum.map(&String.to_integer/1) end)
  |> Enum.chunk(5)
  |> Enum.map(fn board ->
    board |> Enum.map(fn row -> row |> Enum.map(fn cell -> {cell, false} end) end)
  end)
warning: Enum.chunk/2 is deprecated. Use Enum.chunk_every/2 instead
  04.livemd#cell:35
[
  [
    [{22, false}, {13, false}, {17, false}, {11, false}, {0, false}],
    [{8, false}, {2, false}, {23, false}, {4, false}, {24, false}],
    [{21, false}, {9, false}, {14, false}, {16, false}, {7, false}],
    [{6, false}, {10, false}, {3, false}, {18, false}, {5, false}],
    [{1, false}, {12, false}, {20, false}, {15, false}, {19, false}]
  ],
  [
    [{3, false}, {15, false}, {0, false}, {2, false}, {22, false}],
    [{9, false}, {18, false}, {13, false}, {17, false}, {5, false}],
    [{19, false}, {8, false}, {7, false}, {25, false}, {23, false}],
    [{20, false}, {11, false}, {10, false}, {24, false}, {4, false}],
    [{14, false}, {21, false}, {16, false}, {12, false}, {6, false}]
  ],
  [
    [{14, false}, {21, false}, {17, false}, {24, false}, {4, false}],
    [{10, false}, {16, false}, {15, false}, {9, false}, {19, false}],
    [{18, false}, {8, false}, {23, false}, {26, false}, {20, false}],
    [{22, false}, {11, false}, {13, false}, {6, false}, {5, false}],
    [{2, false}, {0, false}, {12, false}, {3, false}, {7, false}]
  ]
]
input =
  File.read!("input04.txt")
  |> String.split("\n", trim: true)

[draw | boards] = input

input_draw =
  draw
  |> String.split(",")
  |> Enum.map(&String.to_integer/1)

input_boards =
  boards
  |> Enum.map(fn x -> x |> String.split(" ", trim: true) |> Enum.map(&String.to_integer/1) end)
  |> Enum.chunk(5)
  |> Enum.map(fn board ->
    board |> Enum.map(fn row -> row |> Enum.map(fn cell -> {cell, false} end) end)
  end)
warning: Enum.chunk/2 is deprecated. Use Enum.chunk_every/2 instead
  04.livemd#cell:15
[
  [
    [{45, false}, {57, false}, {55, false}, {43, false}, {31, false}],
    [{32, false}, {52, false}, {79, false}, {65, false}, {80, false}],
    [{21, false}, {98, false}, {16, false}, {64, false}, {6, false}],
    [{19, false}, {78, false}, {48, false}, {59, false}, {51, false}],
    [{37, false}, {2, false}, {69, false}, {56, false}, {99, false}]
  ],
  [
    [{87, false}, {20, false}, {29, false}, {96, false}, {75, false}],
    [{83, false}, {34, false}, {84, false}, {72, false}, {98, false}],
    [{70, false}, {89, false}, {90, false}, {73, false}, {38, false}],
    [{86, false}, {2, false}, {47, false}, {62, false}, {11, false}],
    [{24, false}, {60, false}, {64, false}, {65, false}, {31, false}]
  ],
  [
    [{11, false}, {20, false}, {22, false}, {49, false}, {30, false}],
    [{59, false}, {87, false}, {10, false}, {31, false}, {68, false}],
    [{64, false}, {24, false}, {82, false}, {26, false}, {6, false}],
    [{92, false}, {38, false}, {48, false}, {4, false}, {54, false}],
    [{93, false}, {81, false}, {28, false}, {80, false}, {99, false}]
  ],
  [
    [{29, false}, {4, false}, {62, false}, {28, false}, {85, false}],
    [{71, false}, {2, false}, {77, false}, {3, false}, {98, false}],
    [{74, false}, {57, false}, {25, false}, {33, false}, {92, false}],
    [{64, false}, {95, false}, {61, false}, {73, false}, {99, false}],
    [{76, false}, {36, false}, {81, false}, {87, false}, {1, false}]
  ],
  [
    [{79, false}, {59, false}, {96, false}, {61, false}, {95, false}],
    [{81, false}, {77, false}, {56, false}, {68, false}, {36, false}],
    [{69, false}, {39, false}, {0, false}, {55, false}, {14, false}],
    [{16, false}, {3, false}, {4, false}, {34, false}, {63, false}],
    [{84, false}, {80, false}, {99, false}, {37, false}, {9, false}]
  ],
  [
    [{86, false}, {33, false}, {77, false}, {30, false}, {59, false}],
    [{19, false}, {54, false}, {48, false}, {28, false}, {89, false}],
    [{26, false}, {38, false}, {82, false}, {68, false}, {69, false}],
    [{87, false}, {76, false}, {85, false}, {22, false}, {50, false}],
    [{74, false}, {72, false}, {58, false}, {81, false}, {49, false}]
  ],
  [
    [{3, false}, {8, false}, {39, false}, {15, false}, {69, false}],
    [{14, false}, {72, false}, {90, false}, {81, false}, {58, false}],
    [{54, false}, {13, false}, {59, false}, {53, false}, {97, false}],
    [{84, false}, {20, false}, {43, false}, {57, false}, {89, false}],
    [{22, false}, {92, false}, {28, false}, {51, false}, {45, false}]
  ],
  [
    [{86, false}, {91, false}, {63, false}, {52, false}, {27, false}],
    [{50, false}, {75, false}, {94, false}, {89, false}, {31, false}],
    [{79, false}, {44, false}, {92, false}, {29, false}, {97, false}],
    [{34, false}, {60, false}, {42, false}, {37, false}, {80, false}],
    [{73, false}, {28, false}, {7, false}, {96, false}, {10, false}]
  ],
  [
    [{85, false}, {60, false}, {89, false}, {34, false}, {6, false}],
    [{41, false}, {81, false}, {39, false}, {37, false}, {57, false}],
    [{23, false}, {70, false}, {79, false}, {46, false}, {15, false}],
    [{74, false}, {54, false}, {59, false}, {88, false}, {9, false}],
    [{58, false}, {97, false}, {5, false}, {51, false}, {1, false}]
  ],
  [
    [{54, false}, {82, false}, {22, false}, {26, false}, {18, false}],
    [{46, false}, {12, false}, {21, false}, {36, false}, {79, false}],
    [{83, false}, {71, false}, {14, false}, {29, false}, {45, false}],
    [{42, false}, {24, false}, {73, false}, {58, false}, {68, false}],
    [{63, false}, {32, false}, {9, false}, {86, false}, {98, false}]
  ],
  [
    [{59, false}, {83, false}, {13, false}, {34, false}, {44, false}],
    [{80, false}, {55, false}, {81, false}, {67, false}, {3, false}],
    [{74, false}, {58, false}, {32, false}, {43, false}, {6, false}],
    [{61, false}, {73, false}, {21, false}, {23, false}, {66, false}],
    [{2, false}, {9, false}, {52, false}, {29, false}, {86, false}]
  ],
  [
    [{29, false}, {24, false}, {37, false}, {21, false}, {2, false}],
    [{81, false}, {0, false}, {22, false}, {59, false}, {41, false}],
    [{44, false}, {40, false}, {72, false}, {31, false}, {71, false}],
    [{9, false}, {99, false}, {50, false}, {65, false}, {97, false}],
    [{55, false}, {69, false}, {88, false}, {58, false}, {96, false}]
  ],
  [
    [{3, false}, {69, false}, {94, false}, {88, false}, {12, false}],
    [{40, false}, {81, false}, {77, false}, {38, false}, {6, false}],
    [{8, false}, {35, false}, {91, false}, {18, false}, {85, false}],
    [{2, false}, {14, false}, {73, false}, {62, false}, {44, false}],
    [{46, false}, {9, false}, {37, false}, {1, false}, {20, false}]
  ],
  [
    [{86, false}, {58, false}, {85, false}, {43, false}, {65, false}],
    [{92, false}, {44, false}, {69, false}, {2, false}, {14, false}],
    [{83, false}, {3, false}, {93, false}, {16, false}, {49, false}],
    [{42, false}, {59, false}, {29, false}, {75, false}, {32, false}],
    [{45, false}, {4, false}, {48, false}, {21, false}, {68, false}]
  ],
  [
    [{87, false}, {65, false}, {80, false}, {18, false}, {46, false}],
    [{66, false}, {49, false}, {78, false}, {60, false}, {31, false}],
    [{20, false}, {74, false}, {29, false}, {96, false}, {86, false}],
    [{12, false}, {35, false}, {47, false}, {93, false}, {16, false}],
    [{38, false}, {91, false}, {54, false}, {73, false}, {28, false}]
  ],
  [
    [{26, false}, {68, false}, {98, false}, {32, false}, {67, false}],
    [{46, false}, {61, false}, {64, false}, {35, false}, {38, false}],
    [{92, false}, {77, false}, {70, false}, {76, false}, {88, false}],
    [{86, false}, {0, false}, {58, false}, {13, false}, {51, false}],
    [{96, false}, {1, false}, {62, false}, {53, false}, {8, false}]
  ],
  [
    [{2, false}, {40, false}, {32, false}, {62, false}, {33, false}],
    [{84, false}, {96, false}, {99, false}, {76, false}, {95, false}],
    [{9, false}, {1, false}, {12, false}, {7, false}, {90, false}],
    [{67, false}, {11, false}, {14, false}, {97, false}, {24, false}],
    [{42, false}, {54, false}, {57, false}, {45, false}, {83, false}]
  ],
  [
    [{39, false}, {99, false}, {37, false}, {0, false}, {95, false}],
    [{18, false}, {2, false}, {73, false}, {31, false}, {17, false}],
    [{32, false}, {66, false}, {21, false}, {62, false}, {9, false}],
    [{4, false}, {78, false}, {22, false}, {53, false}, {45, false}],
    [{41, false}, {33, false}, {71, false}, {6, false}, {50, false}]
  ],
  [
    [{14, false}, {12, false}, {2, false}, {42, false}, {7, false}],
    [{52, false}, {71, false}, {90, false}, {28, false}, {75, false}],
    [{0, false}, {40, false}, {79, false}, {39, false}, {93, false}],
    [{84, false}, {16, false}, {82, false}, {31, false}, {94, false}],
    [{74, false}, {36, false}, {59, false}, {72, false}, {15, false}]
  ],
  [
    [{7, false}, {92, false}, {42, false}, {41, false}, {22, false}],
    [{28, false}, {31, false}, {91, false}, {68, false}, {12, false}],
    [{45, false}, {84, false}, {83, false}, {34, false}, {56, false}],
    [{70, false}, {43, false}, {37, false}, {54, false}, {60, false}],
    [{61, false}, {40, false}, {98, false}, {77, false}, {17, false}]
  ],
  [
    [{12, false}, {81, false}, {17, false}, {27, false}, {66, false}],
    [{49, false}, {95, false}, {82, false}, {97, false}, {85, false}],
    [{16, false}, {58, false}, {13, false}, {11, false}, {56, false}],
    [{88, false}, {31, false}, {36, false}, {96, false}, {23, false}],
    [{0, false}, {51, false}, {55, false}, {22, false}, {62, false}]
  ],
  [
    [{8, false}, {36, false}, {9, false}, {63, false}, {71, false}],
    [{79, false}, {97, false}, {60, false}, {16, false}, {91, false}],
    [{93, false}, {68, false}, {54, false}, {28, false}, {32, false}],
    [{42, false}, {57, false}, {20, false}, {43, false}, {47, false}],
    [{99, false}, {26, false}, {67, false}, {76, false}, {33, false}]
  ],
  [
    [{1, false}, {55, false}, {58, false}, {48, false}, {92, false}],
    [{66, false}, {71, false}, {89, false}, {46, false}, {96, false}],
    [{15, false}, {37, false}, {94, false}, {14, false}, {47, false}],
    [{22, false}, {61, false}, {91, false}, {80, false}, {51, false}],
    [{33, false}, {44, false}, {63, false}, {10, false}, {88, false}]
  ],
  [
    [{5, false}, {63, false}, {34, false}, {56, false}, {0, false}],
    [{97, false}, {22, false}, {48, false}, {11, false}, {85, false}],
    [{29, false}, {10, false}, {61, false}, {30, false}, {26, false}],
    [{55, false}, {1, false}, {32, false}, {27, false}, {77, false}],
    [{80, false}, {81, false}, {70, false}, {62, false}, {33, false}]
  ],
  [
    [{77, false}, {72, false}, {75, false}, {41, false}, {66, false}],
    [{7, false}, {54, false}, {58, false}, {21, false}, {70, false}],
    [{95, false}, {30, false}, {14, false}, {71, false}, {99, false}],
    [{20, false}, {79, false}, {22, false}, {91, false}, {94, false}],
    [{45, false}, {10, false}, {86, false}, {18, false}, {63, false}]
  ],
  [
    [{55, false}, {22, false}, {21, false}, {79, false}, {86, false}],
    [{35, false}, {95, false}, {99, false}, {60, false}, {1, false}],
    [{25, false}, {68, false}, {82, false}, {93, false}, {14, false}],
    [{74, false}, {28, false}, {41, false}, {73, false}, {78, false}],
    [{15, false}, {61, false}, {70, false}, {56, false}, {3, false}]
  ],
  [
    [{80, false}, {35, false}, {25, false}, {22, false}, {12, false}],
    [{37, false}, {24, false}, {97, false}, {59, false}, {44, false}],
    [{54, false}, {84, false}, {1, false}, {33, false}, {11, false}],
    [{9, false}, {28, false}, {74, false}, {30, false}, {95, false}],
    [{67, false}, {81, false}, {19, false}, {71, false}, {40, false}]
  ],
  [
    [{10, false}, {78, false}, {74, false}, {83, false}, {8, false}],
    [{90, false}, {86, false}, {41, false}, {82, false}, {31, false}],
    [{17, false}, {51, false}, {54, false}, {12, false}, {29, false}],
    [{32, false}, {62, false}, {87, false}, {2, false}, {0, false}],
    [{98, false}, {33, false}, {27, false}, {22, false}, {64, false}]
  ],
  [
    [{86, false}, {80, false}, {85, false}, {28, false}, {26, false}],
    [{44, false}, {25, false}, {5, false}, {78, false}, {87, false}],
    [{50, false}, {70, false}, {57, false}, {75, false}, {32, false}],
    [{11, false}, {20, false}, {52, false}, {97, false}, {88, false}],
    [{68, false}, {43, false}, {0, false}, {7, false}, {38, false}]
  ],
  [
    [{88, false}, {16, false}, {10, false}, {34, false}, {75, false}],
    [{76, false}, {84, false}, {41, false}, {1, false}, {61, false}],
    [{49, false}, {94, false}, {14, false}, {26, false}, {36, false}],
    [{85, false}, {77, false}, {22, false}, {98, false}, {70, false}],
    [{12, false}, {38, false}, {3, false}, {74, false}, {92, false}]
  ],
  [
    [{34, false}, {91, false}, {21, false}, {73, false}, {99, false}],
    [{28, false}, {82, false}, {69, false}, {18, false}, {85, false}],
    [{97, false}, {25, false}, {65, false}, {61, false}, {55, false}],
    [{96, false}, {33, false}, {63, false}, {2, false}, {77, false}],
    [{12, false}, {41, false}, {72, false}, {39, false}, {23, false}]
  ],
  [
    [{0, false}, {45, false}, {95, false}, {55, false}, {34, false}],
    [{31, false}, {77, false}, {54, false}, {66, false}, {79, false}],
    [{90, false}, {11, false}, {49, false}, {68, false}, {93, false}],
    [{61, false}, {15, false}, {56, false}, {4, false}, {53, false}],
    [{57, false}, {69, false}, {97, false}, {7, false}, {6, false}]
  ],
  [
    [{94, false}, {11, false}, {44, false}, {83, false}, {87, false}],
    [{27, false}, {47, false}, {93, false}, {50, false}, {38, false}],
    [{29, false}, {55, false}, {10, false}, {49, false}, {32, false}],
    [{76, false}, {73, false}, {91, false}, {37, false}, {34, false}],
    [{51, false}, {62, false}, {4, false}, {85, false}, {46, false}]
  ],
  [
    [{66, false}, {64, false}, {5, false}, {33, false}, {99, false}],
    [{95, false}, {34, false}, {65, false}, {69, false}, {27, false}],
    [{49, false}, {17, false}, {46, false}, {53, false}, {76, false}],
    [{75, false}, {9, false}, {92, false}, {94, false}, {7, false}],
    [{59, false}, {60, false}, {2, false}, {40, false}, {70, false}]
  ],
  [
    [{28, false}, {80, false}, {27, false}, {88, false}, {79, false}],
    [{26, false}, {49, false}, {81, false}, {64, false}, {69, false}],
    [{90, false}, {51, false}, {42, false}, {83, false}, {70, false}],
    [{46, false}, {10, false}, {53, false}, {5, false}, {96, false}],
    [{29, false}, {99, false}, {84, false}, {22, false}, {8, false}]
  ],
  [
    [{86, false}, {49, false}, {31, false}, {53, false}, {28, false}],
    [{85, false}, {94, false}, {4, false}, {98, false}, {30, false}],
    [{51, false}, {7, false}, {48, false}, {88, false}, {1, false}],
    [{76, false}, {92, false}, {64, false}, {29, false}, {73, false}],
    [{81, false}, {6, false}, {21, false}, {36, false}, {74, false}]
  ],
  [
    [{14, false}, {19, false}, {15, false}, {97, false}, {81, false}],
    [{92, false}, {37, false}, {98, false}, {77, false}, {33, false}],
    [{20, false}, {24, false}, {4, false}, {51, false}, {79, false}],
    [{99, false}, {66, false}, {43, false}, {75, false}, {73, false}],
    [{46, false}, {87, false}, {58, false}, {93, false}, {5, false}]
  ],
  [
    [{69, false}, {76, false}, {46, false}, {21, false}, {57, false}],
    [{49, false}, {90, false}, {40, false}, {34, false}, {99, false}],
    [{70, false}, {89, false}, {4, false}, {0, false}, {23, false}],
    [{5, false}, {86, false}, {44, false}, {62, false}, {53, false}],
    [{36, false}, {13, false}, {61, false}, {51, false}, {15, false}]
  ],
  [
    [{88, false}, {37, false}, {14, false}, {50, false}, {26, false}],
    [{76, false}, {83, false}, {24, false}, {46, false}, {5, false}],
    [{43, false}, {42, false}, {72, false}, {17, false}, {59, false}],
    [{6, false}, {11, false}, {36, false}, {25, false}, {19, false}],
    [{70, false}, {53, false}, {52, false}, {98, false}, {30, ...}]
  ],
  [
    [{87, false}, {93, false}, {25, false}, {46, false}, {74, false}],
    [{62, false}, {16, false}, {9, false}, {30, false}, {85, false}],
    [{60, false}, {21, false}, {29, false}, {17, false}, {5, false}],
    [{35, false}, {49, false}, {84, false}, {53, false}, {42, ...}],
    [{13, false}, {90, false}, {99, false}, {70, ...}, {...}]
  ],
  [
    [{19, false}, {91, false}, {10, false}, {89, false}, {52, false}],
    [{71, false}, {1, false}, {42, false}, {75, false}, {83, false}],
    [{81, false}, {32, false}, {96, false}, {53, false}, {5, ...}],
    [{26, false}, {60, false}, {3, false}, {95, ...}, {...}],
    [{44, false}, {12, false}, {33, ...}, {...}, ...]
  ],
  [
    [{77, false}, {17, false}, {29, false}, {55, false}, {43, false}],
    [{62, false}, {52, false}, {92, false}, {53, false}, {21, ...}],
    [{74, false}, {71, false}, {46, false}, {38, ...}, {...}],
    [{23, false}, {79, false}, {65, ...}, {...}, ...],
    [{50, false}, {90, ...}, {...}, ...]
  ],
  [
    [{58, false}, {85, false}, {18, false}, {17, false}, {29, ...}],
    [{76, false}, {78, false}, {91, false}, {87, ...}, {...}],
    [{49, false}, {82, false}, {95, ...}, {...}, ...],
    [{53, false}, {79, ...}, {...}, ...],
    [{48, ...}, {...}, ...]
  ],
  [
    [{40, false}, {90, false}, {77, false}, {45, ...}, {...}],
    [{18, false}, {54, false}, {15, ...}, {...}, ...],
    [{82, false}, {11, ...}, {...}, ...],
    [{50, ...}, {...}, ...],
    [{...}, ...]
  ],
  [
    [{63, false}, {91, false}, {7, ...}, {...}, ...],
    [{90, false}, {60, ...}, {...}, ...],
    [{49, ...}, {...}, ...],
    [{...}, ...],
    [...]
  ],
  [[{38, false}, {26, ...}, {...}, ...], [{42, ...}, {...}, ...], [{...}, ...], [...], ...],
  [[{15, ...}, {...}, ...], [{...}, ...], [...], ...],
  [[{...}, ...], [...], ...],
  [[...], ...],
  [...],
  ...
]

Part 1

Loop:

  • 1: Next number
  • 2: mark in boards
  • 3: Check if any board is done
  • 4: if any: exit loop

Calculate sum for winning board

defmodule Bingo do
  def mark_table(table, number_to_mark) do
    table
    |> Enum.map(fn row ->
      row
      |> Enum.map(fn {value, marked} ->
        if number_to_mark == value, do: {value, true}, else: {value, marked}
      end)
    end)
  end

  def any_rows_done?(table) do
    table
    |> Enum.any?(fn row -> row |> Enum.all?(fn {_value, marked} -> marked == true end) end)
  end

  def any_columns_done?(table) do
    table
    |> Enum.reduce(
      [true, true, true, true, true],
      fn [{_v1, c1}, {_v2, c2}, {_v3, c3}, {_v4, c4}, {_v5, c5}], [s1, s2, s3, s4, s5] ->
        [c1 and s1, c2 and s2, c3 and s3, c4 and s4, c5 and s5]
      end
    )
    |> Enum.any?()
  end

  def bingo?(table) do
    any_rows_done?(table) or any_columns_done?(table)
  end

  def sum(table) do
    table
    |> Enum.map(fn row ->
      Enum.reduce(row, 0, fn {value, marked}, sum ->
        if marked == false, do: sum + value, else: sum
      end)
    end)
    |> Enum.sum()
  end
end
{:module, Bingo, <<70, 79, 82, 49, 0, 0, 16, ...>>, {:sum, 1}}
{[winner_table], value} =
  input_draw_test
  |> Enum.reduce_while(input_boards_test, fn value, boards ->
    new_boards = Enum.map(boards, fn board -> Bingo.mark_table(board, value) end)
    bingo = Enum.filter(new_boards, fn board -> Bingo.bingo?(board) end)
    if length(bingo) > 0, do: {:halt, {bingo, value}}, else: {:cont, new_boards}
  end)

sum_table = Bingo.sum(winner_table)

sum_table * value
4512

Correct: 4512

{[winner_table], value} =
  input_draw
  |> Enum.reduce_while(input_boards, fn value, boards ->
    new_boards = Enum.map(boards, fn board -> Bingo.mark_table(board, value) end)
    bingo = Enum.filter(new_boards, fn board -> Bingo.bingo?(board) end)
    if length(bingo) > 0, do: {:halt, {bingo, value}}, else: {:cont, new_boards}
  end)

sum_table = Bingo.sum(winner_table)

sum_table * value
10374

Correct: 10374

Part 2

{[winner_table], value} =
  input_draw_test
  |> Enum.reduce_while(input_boards_test, fn value, boards ->
    new_boards =
      boards
      |> Enum.map(fn board -> Bingo.mark_table(board, value) end)

    done = new_boards |> Enum.all?(fn board -> Bingo.bingo?(board) == true end)
    next = new_boards |> Enum.filter(fn board -> Bingo.bingo?(board) == false end)

    if done == true, do: {:halt, {new_boards, value}}, else: {:cont, next}
  end)

sum_table = Bingo.sum(winner_table)

sum_table * value
1924

Correct: 1924

{[winner_table], value} =
  input_draw
  |> Enum.reduce_while(input_boards, fn value, boards ->
    new_boards =
      boards
      |> Enum.map(fn board -> Bingo.mark_table(board, value) end)

    done = new_boards |> Enum.all?(fn board -> Bingo.bingo?(board) == true end)
    next = new_boards |> Enum.filter(fn board -> Bingo.bingo?(board) == false end)

    if done == true, do: {:halt, {new_boards, value}}, else: {:cont, next}
  end)

sum_table = Bingo.sum(winner_table)

sum_table * value
24742

Correct: 24742