O Minesweeper é um jogo popular no qual tens de encontrar as minas recorrendo a pistas numéricas que indicam quantas minas estão diretamente adjacentes (na horizontal, na vertical ou na diagonal) a uma casa.
A tua tarefa é adicionar a contagem de minas às casas vazias de um tabuleiro de Campo Minado já completo.
O próprio tabuleiro é um retângulo composto por casas que estão vazias (' ') ou que contêm uma mina ('*').
Para cada casa vazia, conta o número de minas que lhe são adjacentes (na horizontal, na vertical e na diagonal). Se a casa vazia não tiver minas adjacentes, deixa-a vazia. Caso contrário, substitui-a pelo número de minas adjacentes.
Por exemplo, podes receber um tabuleiro 5 x 4 como este (aqui, os espaços vazios são representados com o caráter '·' para visualização no ecrã):
·*·*·
··*··
··*··
·····
Que o teu código deve transformar neste:
1*3*1
13*31
·2*2·
·111·
As posições x,y são frequentemente representadas como um Point, o que dá origem a algumas funções úteis para pontos que podem ajudar nesta tarefa. Em alternativa, representar isto como um array bidimensional também pode ser útil. De qualquer das formas, definir alguns métodos de extensão descritivos pode tornar a tua solução muito mais legível e elegante.
Inscreve-te no Exercism para aprenderes e dominares Pharo com 50 exercícios, e mentoria humana real, tudo grátis.
Exploramos ciclos for aninhados, o uso engenhoso de min/max para simplificar a verificação de limites, pipelines funcionais e a utilização de matrizes bidimensionais.