All problems
0552MediumArrayTwo PointersMatrixSimulation

Settling the Colour Match Board

Tracked in this browser only
Write code

Trains the technique from

LeetCode 723Candy Crush

This is an original problem, written from a brief that listed the technique, the difficulty, the topics, the function shape and the input bounds — none of that problem's wording, examples, hints or editorials. The link is there so you can map your practice onto the standard set.

Same function shape, different story and different numbers.

A puzzle board is given as board, a rectangle of cells. board[i][j] is the colour code of the piece resting in row i and column j, where row 0 is the top row. A value of 0 means the cell is empty; the starting board has no empty cells.

The board settles by repeating these two steps until a round changes nothing:

  1. Clear. Look for every group of three or more pieces of one colour standing side by side in a row, and every group of three or more of one colour standing one above another in a column. Every piece in any such group is removed, and all removals happen together, so a piece that belongs to both a sideways group and an upright group is still found by both.
  2. Drop. In each column, every piece that survives falls straight down until it rests on the bottom of the board or on another piece, keeping the column's surviving pieces in their original top-to-bottom order. The cells above them become empty.

Carry the settling out in place on board, changing the given rows rather than building a new rectangle, and return board once no further round changes anything.

Examples

Example 1

Input
board = [[3, 7, 7], [3, 2, 7], [3, 2, 2], [4, 2, 5]]
Output
[[0, 0, 7], [0, 0, 7], [0, 0, 2], [4, 7, 5]]

Column 0 holds three 3s in rows 0 to 2 and column 1 holds three 2s in rows 1 to 3, so those six pieces go. The 4 in column 0 and the 7 in column 1 then drop to the bottom row, and the resulting board has no group of three left.

Example 2

Input
board = [[1, 2, 1, 4], [2, 2, 2, 4], [1, 2, 1, 4], [3, 5, 6, 7]]
Output
[[0, 0, 0, 0], [1, 0, 1, 0], [1, 0, 1, 0], [3, 5, 6, 7]]

Row 1 holds three 2s across columns 0 to 2, column 1 holds three 2s down rows 0 to 2, and column 3 holds three 4s down rows 0 to 2. The 2 at row 1 column 1 belongs to two of those groups and is removed once. After the survivors drop, no group of three remains.

Example 3

Input
board = [[4, 1, 1], [4, 2, 1], [5, 5, 5], [4, 3, 2]]
Output
[[0, 0, 0], [0, 1, 1], [0, 2, 1], [0, 3, 2]]

The three 5s in row 2 go first. The three 4s in column 0 then sit on rows 1, 2 and 3, so a second round removes them, and after that round nothing more matches.

Constraints

  • rows == board.length
  • cols == board[i].length
  • 3 <= rows, cols <= 50
  • 1 <= board[i][j] <= 2000

The signature

The editor is preloaded with this. It matches the parent problem's shape, so a solution that works here transfers to a judge unchanged.

Python
def candy_crush(board: list[list[int]]) -> list[list[int]]:
Java
public int[][] candyCrush(int[][] board)
September 7
Apply