花田

花田

中等

简介

Flower Field 是对热门游戏 Minesweeper 的一次充满温情的重新演绎。游戏的目标是利用数字提示找出花园中所有的花,这些提示会说明有多少朵花与某个方格直接相邻(水平、垂直或对角方向)。Flower Field 曾随 Microsoft Windows 的地区版本在意大利、德国、韩国、日本和台湾发行。

说明

你的任务是给一块已完成的花田中的空格填上花的数量。花园本身是一块矩形棋盘,棋盘上的格子要么是空格(' '),要么是一朵花('*')。

对每个空格,数出与它相邻的花的数量(横向、纵向、斜向)。如果空格周围没有相邻的花,就保持为空。否则,用相邻花的数量替换它。

例如,你可能会拿到下面这样一块 5 x 4 的棋盘(为了在屏幕上显示,这里的空白位置用“·”表示):

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

你的代码应该把它转换成这样:

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

性能提示

所有输入和输出都是 ASCII。 Rust 的String和&str都是 utf8,所以你可能以为"Hello".chars()很简单,实际上它必须逐个检查每个字符,看它究竟占 1 个、2 个、3 个还是 4 个u8那么长。 如果我们确定某个&str是 ASCII,就可以调用.as_bytes(),把底层数据当作&[u8](字节切片)来处理。 遍历字节切片比遍历 ASCII 字节快得多,因为不涉及码点,每个 ASCII 字节都只占一个u8。

你能在不克隆输入的情况下完成这道挑战吗?

通过 GitHub 编辑 链接将在新窗口或新标签页中打开
Rust Exercism

准备好开始 花田 了吗?

注册 Exercism,借助 99 个练习 和真人导师指导,学习并掌握 Rust,全部免费。

深入探索 花田!

我们探讨嵌套 for 循环、巧妙运用 min/max 简化边界检查、函数式管道以及二维矩阵的使用。