扫雷(Minesweeper)是一种流行的计算机游戏,您可能已经浪费了时间在游戏中,尝试根据每个非地雷单元具有多少个相邻地雷的提示来显示矩形网格中的地雷单元。如果您还没有玩过,请在这里进行。
关于扫雷网格(又称木板)的一个漂亮的数学事实是:
一个董事会及其补编具有相同的地雷总数。(证明)
这就是说,如果您拥有一个完全显示的扫雷网格,则该网格上所有数字的总和,即“ 地雷总数”,将等于该网格补码的地雷总数,即每个地雷都已被替换的网格一个非地雷,每个非地雷都被一个地雷取代。
例如,对于扫雷网格
**1..
34321
*2**1
矿山总数为1 + 3 + 4 + 3 + 2 +1 + 2 +1 = 17。
网格的补充是
24***
*****
3*44*
总共有我的2 + 4 + 3 + 4 + 4 = 17。
编写一个程序,以文本形式获取任意的扫雷网格,该网格*
表示一个地雷,并1
通过8
表示与非地雷单元相邻的地雷数。您可以选择使用.
或0
或
(空格)来表示没有地雷邻居的像元。您可以假设输入网格将被正确标记,即每个非地雷单元将准确地表示正交或对角线紧邻其的地雷总数。
你的程序需要打印电网的补相同的格式(使用相同的.
,0
或
如您在输入拼音)。
以字节为单位的最短代码获胜。
- 除了编写程序,您还可以编写一个函数,该函数将输入网格作为字符串并打印或返回补码网格。
- 输入或输出中的尾随换行符很好,但除了构成网格的字符外,不应有其他字符。
- 您可以假设1×1的网格将是最小的输入。
测试用例
由于补数的补数是原始网格,因此可以交换所有输入和输出。网格也可以旋转以用于进一步的测试案例。
输入:
111
1*1
111
输出:
***
*8*
***
输入:
.
输出:
*
输入:
*11*1.1**1...1***1.....1*****1..........
输出:
1**2***11*****1.1*******1...1***********
输入:(剪切结示例)
**212*32
333*33**
1*22*333
222222*1
*33*2232
2**22*2*
输出:
24***4**
***7**64
*8**7***
******8*
4**7****
*33**5*3
?
在板的最后一行之后的行上使用结束定界符(例如),还是可以通过命令行获取输入行数?