Document

Propaganda
Trabalho Final de Programação
Semestre de Inverno 2009/2010
Data de entrega: 1/2/2010
Objectivos: neste trabalho pretende-se que os alunos adquiram prática na análise de um problema e
consequente estruturação e implementação de uma solução utilizando os mecanismos leccionados nas
aulas.
Problema a resolver
Como trabalho final de programação pretende-se que os alunos implementem um programa capaz de
resolver puzzles do jogo Sudoku. O jogo Sudoku é um jogo lógico de tabuleiro que consiste em encontrar o
símbolo adequado para cada célula do tabuleiro. O tabuleiro é uma grelha de 9x9 células e está dividido em 9
regiões de 3x3 células. As regras que regem a colocação dos símbolos no tabuleiro são simples e apenas três:
1. Um símbolo só pode aparecer uma vez em cada linha do tabuleiro.
2. Um símbolo só pode aparecer uma vez em cada coluna do tabuleiro.
3. Um símbolo só pode aparecer uma vez em cada região do tabuleiro.
Em baixo encontra-se o exemplo de um puzzle Sudoku, e respectiva solução, onde os símbolos utilizados são
os números de 1 a 9 (nota: o “puzzle numérico” é a forma mais comum de apresentação do jogo).
Puzzle a resolver
Solução do puzzle
Descrição funcional do programa:
O programa aceita como input um puzzle Sudoku constituído por símbolos numéricos (1 a 9).
O puzzle é introduzido linha a linha. As células que não têm valor atribuído são representadas com
um ponto final (‘.’). Segue-se o input correspondente ao puzzle de exemplo:
5
6
.
8
4
7
.
.
.
3
.
9
.
.
.
6
.
.
.
.
8
.
.
.
.
.
.
.
1
.
.
8
.
.
4
.
7
9
.
6
.
2
.
1
8
.
5
.
.
3
.
.
9
.
.
.
.
.
.
.
2
.
.
.
.
6
.
.
.
8
.
7
.
.
.
3
1
6
.
5
9
O programa tem como output o puzzle resolvido apresentado linha a linha. Segue-se o output
correspondente à solução do puzzle de exemplo:
5
6
1
8
4
7
9
2
3
3
7
9
5
2
1
6
8
4
4
2
8
9
6
3
1
7
5
6
1
3
7
8
9
5
4
2
7
9
4
6
5
2
3
1
8
8
5
2
1
3
4
7
9
6
9
3
5
4
7
8
2
6
1
1
4
6
2
9
5
8
3
7
2
8
7
3
1
6
4
5
9
Requisitos da implementação:
Sabendo que existem puzzles de diferentes níveis de dificuldade, pretende-se que a solução apresentada
implemente os algoritmos necessários à resolução de todos os puzzles fornecidos em anexo. Como requisito
mínimo a solução apresentada tem que conseguir resolver os puzzles 0 a 3.
No caso do programa não conseguir encontrar uma solução para os puzzles 4 a 6 deverá apresentar os
candidatos de cada célula não resolvida entre parênteses rectos. Possível exemplo de output para o puzzle 4
parcialmente resolvido:
5
1
7
9
6
3
4
2
8
8
3
2
5
1
4
7
6
9
9
6
4
8
7
2
1
5
3
[3,6] 2 [3,6] 7 4 1
4 [5,7,8] [5,7,8] 2 9 [5,8]
1 [5,8,9] [5,8] 3 6 [5,8]
[2,6,7] [6,7] [2,6,7] 1 3 4
[3,5] [3,4,5] [3,5] 8 2 9
[8,9] [8,9] [1,8] 6 5 7
[3,6] [3,6] 9 5 8 2
[7,8] [7,8] 4 9 1 3
[2,5] 1 [2,5] 4 7 6
Sugestões:
1. Consulte a página http://pt.wikipedia.org/wiki/Sudoku para mais informações sobre o jogo.
2. Resolva manualmente os puzzles propostos.
3. Para testar melhor a solução pode obter mais puzzles em http://www.websudoku.com/
4. Utilize as funcionalidades de redireccionamento de input para facilitar o teste do programa.
Download