Célula de Sudoku
Um quebra-cabeça de Sudoku contém 81 "células" de números em uma grade 9 x 9. Uma abordagem útil para resolver um quebra-cabeça de Sudoku é criar uma classe que represente cada célula do quebra-cabeça junto com três formatos diferentes do quebra-cabeça de Sudoku que representem cada tipo de região:
- linha
- coluna
- bloco
Tenha em mente que a definição da região de uma célula é a seguinte:
- Cada célula tem uma "região" que contém todos os valores na linha, na coluna e no bloco da célula excluindo a própria célula.
Tarefa I
Crie uma classe Cell com os seguintes atributos:
val: O valor da célula.rLocation: A localização da célula emrowDatacom o formato(r0, r1).
A classe deve ter os seguintes métodos:
convIndices(): converte os índices de linha para os formatos de índice de coluna e bloco.getRegions(regionData): obtém a região da célula.
Tarefa II
Crie uma função getRegionData(puzzle):
- A função deve retornar uma lista contendo três representações regionais diferentes do quebra-cabeça (conforme descrito abaixo).
- A função deve criar e armazenar instâncias de
Cellem cada lista aninhada.
Formato do quebra-cabeça
O quebra-cabeça de Sudoku será formatado em uma lista 9 x 9, em que cada lista aninhada é uma linha do quebra-cabeça:
puzzle = [
[0, 0, 0, 0, 0, 0, 9, 0, 6],
[3, 0, 2, 0, 6, 0, 0, 0, 0],
[8, 0, 0, 7, 0, 3, 0, 0, 5],
[0, 0, 3, 9, 0, 6, 0, 0, 0],
[6, 0, 0, 0, 5, 0, 0, 0, 0],
[0, 0, 4, 8, 0, 1, 0, 0, 0],
[7, 0, 0, 4, 0, 8, 0, 0, 2],
[5, 0, 8, 0, 9, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 7, 0, 1]
]Nota: Os zeros representam células não resolvidas.
A função getRegionData(puzzle)
Esta função deve retornar uma lista contendo as três listas que representam os diferentes tipos de região do quebra-cabeça. Para estes fins, essas listas serão chamadas de:
rowData: mesmo formato quepuzzle.colData: lista 2D de colunas.boxData: lista 2D de blocos ordenados conforme mostrado abaixo.
| 0 | 1 | 2 |
|---|---|---|
| 3 | 4 | 5 |
| 6 | 7 | 8 |
Nota: Cada bloco contém outro bloco 3 x 3 ordenado da mesma forma que seu contêiner. Os números mostrados acima representam índices que correspondem à seguinte estrutura de lista:
[[0], ... , [8]]em que cada lista aninhada é[0, ... , 8]
O método convIndices()
Este método deve ser chamado na inicialização e criar dois novos atributos:
cLocation: a localização da célula emcolDatacom o formato(c0, c1)bLocation: a localização da célula emboxDatacom o formato(b0, b1)
Dica: rowData[r0][r1] = colData[c0][c1] = boxData[b0][b1]
Exemplo #1
cell = Cell(_, (1, 2))
cell.rLocation
(1, 2)
cell.cLocation
(2, 1)
cell.bLocation
(0, 5)O método getRegions(regionData)
Este método deve receber regionData e criar um novo atributo:
regions: uma lista 2D contendo a região de linha, coluna e bloco da célula.
Nota: A região de cada célula deve conter instâncias de Cell excluindo a célula.
Exemplo #2
regionData = getRegionData(puzzle)
cell.getRegions(regionData)
cell.regions
[[row region], [col region], [box region]]Observações
N/A