Filling Filling
Undefined
English
The mission is in Blocked Mode. Access to the solutions is blocked for a day or two (even after you share your own), until we'll have enough solutions for you to check. All users who've solved the mission will get the notifications about their opening.

This mission is an adaptation of the "Filling" game (from Simon Tatham's Portable Puzzle Collection). If you are lost or just want to play, the game is available here.

You have a rectangular grid with digits. You have to fill the grid with digits in such a way that each connected region (diagonally separated squares are not adjacent) of identical digits has an area equal to that common digit.

To simplify the game a little, note that each region has at least one cell already given.

Consequences:

  • Zero can't appear in a filled grid. That's why empty cells are represented by zeros.
  • 1s are necessarily alone and already given.

Filling 6x8 example image

[[1, 0, 1, 0, 1, 4, 0, 0],       [[1, 3, 1, 3, 1, 4, 4, 4],
 [3, 0, 2, 3, 0, 0, 0, 4],        [3, 3, 2, 3, 3, 5, 5, 4],
 [0, 0, 0, 1, 0, 0, 5, 1],  ===\  [4, 4, 2, 1, 5, 5, 5, 1],
 [4, 0, 1, 3, 0, 1, 0, 0],  ===/  [4, 4, 1, 3, 3, 1, 8, 8],
 [5, 0, 0, 0, 0, 0, 0, 8],        [5, 5, 5, 2, 3, 8, 8, 8],
 [0, 0, 1, 2, 1, 0, 0, 0]]        [5, 5, 1, 2, 1, 8, 8, 8]]

Input: A list of lists of integers.

Output: A list/tuple of lists/tuples of integers.

Example:

checkio([[1, 0, 1, 0, 1, 4, 0, 0],
         [3, 0, 2, 3, 0, 0, 0, 4],
         [0, 0, 0, 1, 0, 0, 5, 1],
         [4, 0, 1, 3, 0, 1, 0, 0],
         [5, 0, 0, 0, 0, 0, 0, 8],
         [0, 0, 1, 2, 1, 0, 0, 0]]) == [[1, 3, 1, 3, 1, 4, 4, 4],
                                        [3, 3, 2, 3, 3, 5, 5, 4],
                                        [4, 4, 2, 1, 5, 5, 5, 1],
                                        [4, 4, 1, 3, 3, 1, 8, 8],
                                        [5, 5, 5, 2, 3, 8, 8, 8],
                                        [5, 5, 1, 2, 1, 8, 8, 8]]

Preconditions:

  • Given puzzles are solvable.
  • 3 ≤ len(grid) ≤ 20 and 3 ≤ len(grid[0]) ≤ 20.
  • all(len(row) == len(grid[0]) for row in grid).