Track
/
Rust
Rust
/
Esercizi
/
Campo minato
Campo minato

Campo minato

Medio

Introduzione

Minesweeper è un gioco molto diffuso in cui devi trovare le mine seguendo gli indizi numerici che indicano quante mine si trovano direttamente adiacenti a una casella, in orizzontale, in verticale o in diagonale.

Istruzioni

Il tuo compito è aggiungere il numero di mine alle caselle vuote di un tabellone di Minesweeper completato. Il tabellone stesso è un rettangolo composto da caselle che sono vuote (' ') oppure una mina ('*').

Per ogni casella vuota, conta il numero di mine adiacenti (in orizzontale, in verticale, in diagonale). Se la casella vuota non ha mine adiacenti, lasciala vuota. Altrimenti sostituiscila con il numero di mine adiacenti.

Ad esempio, potresti ricevere un tabellone 5 x 4 come questo (qui gli spazi vuoti sono rappresentati con il carattere «·» per la visualizzazione sullo schermo):

·*·*·
··*··
··*··
·····

Che il codice dovrebbe trasformare in questo:

1*3*1
13*31
·2*2·
·111·

Suggerimento sulle prestazioni

Tutti gli input e gli output sono in ASCII. In Rust, le String e le &str sono UTF-8, quindi, mentre ci si potrebbe aspettare che "Hello".chars() sia semplice, in realtà deve controllare ogni carattere per vedere se è lungo 1, 2, 3 o 4 u8. Se sappiamo che una &str è ASCII, possiamo chiamare .as_bytes() e riferirci ai dati sottostanti come a una &[u8] (una slice di byte). Iterare su una slice di byte ASCII è molto più veloce: non ci sono punti di codice coinvolti, ogni byte ASCII è lungo un u8.

Riesci a completare la sfida senza clonare l'input?

Modifica tramite GitHub Il link si apre in una nuova finestra o scheda
Rust Exercism

Vuoi iniziare Campo minato?

Iscriviti a Exercism per imparare e padroneggiare Rust con 99 esercizi e il mentoring di persone reali, tutto gratis.

Approfondimento su Campo minato!

Esploriamo i cicli for annidati, l'uso intelligente di min/max per semplificare il controllo dei limiti, le pipeline funzionali e l'uso di matrici bidimensionali.