Minesweeper é um jogo popular no qual o jogador precisa encontrar as minas usando dicas numéricas que indicam quantas minas estão diretamente adjacentes (na horizontal, na vertical ou na diagonal) a uma casa.
Sua tarefa é adicionar a contagem de minas às casas vazias de um tabuleiro de Campo Minado já completo.
O tabuleiro em si é um retângulo composto de casas que são vazias (' ') ou que contêm uma mina ('*').
Para cada casa vazia, conte quantas minas são adjacentes a ela (na horizontal, na vertical e na diagonal). Se a casa vazia não tiver minas adjacentes, deixe-a vazia. Caso contrário, substitua seu conteúdo pela quantidade de minas adjacentes.
Por exemplo, você pode receber um tabuleiro 5 x 4 como este (aqui, os espaços vazios são representados pelo caractere '·' para exibição na tela):
·*·*·
··*··
··*··
·····
E seu código deve transformá-lo nisto:
1*3*1
13*31
·2*2·
·111·
Todas as entradas e saídas estão em ASCII.
As Strings e &str do Rust são utf8, então, embora a gente possa esperar que "Hello".chars() seja simples, na verdade ele precisa verificar cada caractere para ver se ocupa 1, 2, 3 ou 4 u8s.
Se sabemos que uma &str é ASCII, podemos chamar .as_bytes() e nos referir aos dados subjacentes como um &[u8] (uma fatia de bytes).
Iterar sobre uma fatia de bytes ASCII é muito mais rápido, já que não há pontos de código envolvidos: cada byte ASCII ocupa um u8.
Você consegue completar o desafio sem clonar a entrada?
Crie sua conta no Exercism para aprender e dominar Rust com 99 exercícios e mentoria humana de verdade, tudo de graça.
Vamos explorar laços for aninhados, o uso inteligente de min/max para simplificar a verificação de limites, pipelines funcionais e o uso de matrizes bidimensionais.