Flower Field é uma releitura compassiva do popular jogo Minesweeper. O objetivo do jogo é encontrar todas as flores do jardim usando dicas numéricas que indicam quantas flores estão diretamente adjacentes (na horizontal, na vertical, na diagonal) a uma casa. "Flower Field" foi lançado em versões regionais do Microsoft Windows na Itália, Alemanha, Coreia do Sul, Japão e Taiwan.
Sua tarefa é adicionar a contagem de flores às casas vazias de um jardim do Campo de Flores já concluído.
O jardim em si é um tabuleiro retangular composto de casas que estão vazias (' ') ou têm uma flor ('*').
Para cada casa vazia, conte quantas flores estão adjacentes a ela (na horizontal, na vertical, na diagonal). Se a casa vazia não tiver flores adjacentes, deixe-a vazia. Caso contrário, substitua-a pela contagem de flores adjacentes.
Por exemplo, você pode receber um tabuleiro 5 x 4 como este (os espaços vazios são representados aqui com o 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 ele tem 1, 2, 3 ou 4 u8s de comprimento.
Se sabemos que uma &str é ASCII, podemos chamar .as_bytes() e nos referir aos dados subjacentes como uma &[u8] (fatia de bytes).
Iterar sobre uma fatia de bytes ASCII é muito mais rápido, pois 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.