Powered by AppSignal & Oban Pro
Would you like to see your link here? Contact us

Bingo Winner

exercises/bingo_winner.livemd

Bingo Winner

Mix.install([
  {:youtube, github: "brooklinjazz/youtube"},
  {:hidden_cell, github: "brooklinjazz/hidden_cell"},
  {:tested_cell, github: "brooklinjazz/tested_cell"},
  {:utils, path: "#{__DIR__}/../utils"}
])

Navigation

Return Home Report An Issue

Bingo Winner

Bingo is a game where players are given a board of numbers.

Provided a bingo board, determine if the board is a winner.

Numbers are called, and players fill out the matching numbers on their board.

A board is a winner if it has any row, column, or diagonal completely filled.

For example, let’s say we have an empty board like so:

[
  [nil, nil, nil],
  [nil, nil, nil],
  [nil, nil, nil],
]

We’ll mark matching numbers using "X".

A winning board would look like:

# example win on row
[
  ["X", "X", "X"],
  [nil, nil, nil],
  [nil, nil, nil]
]

# example win on column.
[
  ["X", nil, nil],
  ["X", nil, nil],
  ["X", nil, nil],
]

# example win on diagonal
[
  ["X", nil, nil],
  [nil, "X", nil],
  [nil, nil, "X"],
]

Determine the Winner

Create a Bingo.is_winner?/1 function that accepts a board and returns true if the board is a winner.

winning_board = [
  [nil, nil, "X"],
  [nil, "X", nil],
  ["X", nil, nil],
]

losing_board = [
  ["X", nil, "X"],
  [nil, nil, nil],
  ["X", "X", nil],
]

Bingo.is_winner?(winning_board)
true

Bingo.is_winner?(losing_board)
false

Play the Game

Create a Bingo.play/2 function which accepts a board of numbers and a list of called numbers. The board should return an output we can use with the Bingo.is_winner?/1 function to determine if the player won.

board = [
  [3, 2, 5],
  [1, 6, 7],
  [4, 8, 9]
]

called_numbers = [1, 2, 3]

completed_board = Bingo.play(board, called_numbers)
[
  ["X", "X", nil],
  ["X", nil, nil],
  [nil, nil, nil],
]

Bingo.is_winner?(completed_board)
false

Enter your answer below.

defmodule Bingo do
  @doc """
  Determine if a completed bingo board is a winner.

  ## Examples

    iex> Bingo.is_winner?([["X", "X", "X"], ["X", "X", "X"], ["X", "X", "X"]])
    
    Row Cases

    iex> Bingo.is_winner?([["X", "X", "X"], [nil, nil, nil], [nil, nil, nil]])
    true
    iex> Bingo.is_winner?([[nil, nil, nil], ["X", "X", "X"], [nil, nil, nil]])
    true
    iex> Bingo.is_winner?([[nil, nil, nil], [nil, nil, nil], ["X", "X", "X"]])
    true

    Diagonal Cases

    iex> Bingo.is_winner?([["X", nil, nil], [nil, "X", nil], [nil, nil, "X"]])
    true
    iex> Bingo.is_winner?([[nil, nil, "X"], [nil, "X", nil], ["X", nil, nil]])

    Column Cases

    iex> Bingo.is_winner?([["X", nil, nil], ["X", nil, nil], ["X", nil, nil]])
    true
    iex> Bingo.is_winner?([[nil, "X", nil], [nil, "X", nil], [nil, "X", nil]])
    true
    iex> Bingo.is_winner?([[nil, nil, "X"], [nil, nil, "X"], [nil, nil, "X"]])
    true
    
    Losing Cases

    iex> Bingo.is_winner?([[nil, nil, nil], [nil, nil, nil], [nil, nil, nil]])
    false
    iex> Bingo.is_winner?([["X", nil, "X"], ["X", nil, nil], [nil, nil, "X"]])
    false
    iex> Bingo.is_winner?([["X", nil, "X"], [nil, nil, nil], ["X", nil, "X"]])
    false
  """
  def is_winner?(completed_board) do
  end

  @doc """
  Fill called numbers in a board with `"X"` and not called numbers with `nil`.

  ## Examples

    iex> Bingo.play([[1, 1, 1], [1, 1, 1], [1, 1, 1]], [])
    [[nil, nil, nil], [nil, nil, nil], [nil, nil, nil]]
    iex> Bingo.play([[1, 1, 1], [1, 1, 1], [1, 1, 1]], [1])
    [["X", "X", "X"], ["X", "X", "X"], ["X", "X", "X"]]
     iex> Bingo.play([[3, 2, 5], [1, 6, 7], [4, 8, 9]], [1, 2, 3])
    [["X", "X", nil], ["X", nil, nil], [nil, nil, nil]]
    iex> Bingo.play([[3, 2, 5], [1, 6, 7], [4, 8, 9]], [1, 2, 3, 6, 8, 9])
    [["X", "X", nil], ["X", "X", nil], [nil, "X", "X"]]
  """
  def play(numbered_board, called_numbers) do
  end
end

Commit Your Progress

Run the following in your command line from the beta_curriculum folder to track and save your progress in a Git commit.

$ git add .
$ git commit -m "finish bingo winner exercise"

Up Next

Previous Next
Filter Values By Type Number Wordle