Trilhas
/
Rust
Rust
/
Exercícios
/
Campo Minado
Campo Minado

Campo Minado

Médio

Introdução

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.

Instruções

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·

Dica de desempenho

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?

Editar via GitHub O link abre em uma nova janela ou aba
Rust Exercism

Tudo pronto para começar Campo Minado?

Crie sua conta no Exercism para aprender e dominar Rust com 99 exercícios e mentoria humana de verdade, tudo de graça.

Mergulho profundo em Campo Minado!

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.