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.