exercism-solutions/rust/minesweeper
2023-12-14 19:32:32 -06:00
..
.exercism Solve minesweeper 2023-12-14 19:32:32 -06:00
src Solve minesweeper 2023-12-14 19:32:32 -06:00
tests Solve minesweeper 2023-12-14 19:32:32 -06:00
.gitignore Solve minesweeper 2023-12-14 19:32:32 -06:00
Cargo.toml Solve minesweeper 2023-12-14 19:32:32 -06:00
HELP.md Solve minesweeper 2023-12-14 19:32:32 -06:00
README.md Solve minesweeper 2023-12-14 19:32:32 -06:00

Minesweeper

Welcome to Minesweeper on Exercism's Rust Track. If you need help running the tests or submitting your code, check out HELP.md.

Instructions

Add the mine counts to a completed Minesweeper board.

Minesweeper is a popular game where the user has to find the mines using numeric hints that indicate how many mines are directly adjacent (horizontally, vertically, diagonally) to a square.

In this exercise you have to create some code that counts the number of mines adjacent to a given empty square and replaces that square with the count.

The board is a rectangle composed of blank space (' ') characters. A mine is represented by an asterisk (*) character.

If a given space has no adjacent mines at all, leave that square blank.

Examples

For example you may receive a 5 x 4 board like this (empty spaces are represented here with the '·' character for display on screen):

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

And your code will transform it into this:

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

Performance Hint

All the inputs and outputs are in ASCII. Rust Strings and &str are utf8, so while one might expect "Hello".chars() to be simple, it actually has to check each char to see if it's 1, 2, 3 or 4 u8s long. If we know a &str is ASCII then we can call .as_bytes() and refer to the underlying data as a &[u8] (byte slice). Iterating over a slice of ASCII bytes is much quicker as there are no codepoints involved - every ASCII byte is one u8 long.

Can you complete the challenge without cloning the input?

Source

Created by

  • @EduardoBautista

Contributed to by

  • @ashleygwilliams
  • @coriolinus
  • @cwhakes
  • @EduardoBautista
  • @efx
  • @ErikSchierboom
  • @ffflorian
  • @IanWhitney
  • @kytrinyx
  • @lutostag
  • @mkantor
  • @nfiles
  • @petertseng
  • @rofrol
  • @stringparser
  • @workingjubilee
  • @xakon
  • @ZapAnton