73 lines
1.8 KiB
Markdown
73 lines
1.8 KiB
Markdown
|
# 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):
|
||
|
|
||
|
```text
|
||
|
·*·*·
|
||
|
··*··
|
||
|
··*··
|
||
|
·····
|
||
|
```
|
||
|
|
||
|
And your code will transform it into this:
|
||
|
|
||
|
```text
|
||
|
1*3*1
|
||
|
13*31
|
||
|
·2*2·
|
||
|
·111·
|
||
|
```
|
||
|
|
||
|
## Performance Hint
|
||
|
|
||
|
All the inputs and outputs are in ASCII.
|
||
|
Rust `String`s 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 `u8`s 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
|