- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的代码如下:
def minesweeper(matrix):
for x in range(len(matrix)):
matrix[x].insert(0, "x")
#matrix[x].insert(len(matrix)+2, "x")
frame = ["x" for i in range(len(matrix[0]))]
matrix.insert(0, frame)
matrix.insert(len(matrix), frame)
output_matrix = [[0 for j in range(len(matrix[0]))] for i in range(len(matrix))]
for i in range(0,len(matrix[0])-1):
for j in range(0,len(matrix)-1):
if matrix[i][j] == True:
output_matrix[i][j+1] += 1 # one right
output_matrix[i+1][j] += 1 # one down
output_matrix[i][j-1] += 1 # one left
output_matrix[i-1][j] += 1 # one up
output_matrix[i+1][j+1] += 1 # one down, one right
output_matrix[i+1][j-1] += 1 # one down, one right
output_matrix[i-1][j+1] += 1 # one up, one right
output_matrix[i-1][j-1] +=1 # one up, one left
output_matrix.pop(0)
output_matrix.pop(len(output_matrix)-1)
for y in range(len(output_matrix)):
output_matrix[y].pop(0)
#output_matrix[y].pop(len(output_matrix))
return output_matrix
根据codefight用户的建议,由“x”创建的边界是为了确保如果我在矩阵的边界,炸弹计数不会转移到另一边。
此代码工作正常,直到炸弹位于矩阵的最后一列,例如:
如果输入:
[[False, False, True],
[False, False, False],
[False, False, False]]
输出是:
[[0, 0, 0],
[0, 0, 0],
[0, 0, 0]]
谁能解释清楚为什么会这样?
如果有人可以建议更好的方法来完成这项任务,我将不胜感激。
提前谢谢你。
最佳答案
我只是颠倒了你的逻辑:我遍历输出字段并从矩阵中添加值。请注意异常的使用(这是关于“x”的提示)。使用此解决方案,您不必使用 pop() 缩小结果。
import itertools
def minesweeper(matrix):
#create the output matrix first to preserve the size
#underscored variables to prevent warnings about unused variables
output_matrix = [[0 for _j in range(len(matrix[0]))] for _i in range(len(matrix))]
#unchanged
for x in range(len(matrix)):
matrix[x].insert(0, "x")
matrix[x].insert(len(matrix)+2, "x")
frame = ["x" for i in range(len(matrix[0]))]
matrix.insert(0, frame)
matrix.insert(len(matrix), frame)
#to the logics the other way round: count the bombs around the output fields.
#neighyours defines the offsets of all neighouring fields
neighbours = [(-1, -1), (-1, 0), (-1, 1),
( 0, -1), ( 0, 1),
( 1, -1), ( 1, 0), ( 1, 1)]
for i, j in itertools.product(range(len(output_matrix[0])), range(len(output_matrix))):
#get all indices; you could use two for-loops instead of itertools.product...
print(i, j) # just to see how it works... please remove for final version
for offset_i, offset_j in neighbours:
print(" ", offset_i, offset_j ) # just to see how it works... please remove for final version
# the exceptions do the magic here: If you add an "x", a TypeError is raised.
# So you don't do anythithing if this happens. Otherwise you'll add 0 or 1 (adding "True" adds 1, "False" adds 0)
try:
output_matrix[j][i] += matrix[j + offset_j + 1][i + offset_i + 1]
print("result = ", output_matrix[j][i]) # just to see how it works... please remove for final version
except TypeError:
print("pass") # just to see how it works... please remove for final version
pass
return output_matrix
matrix = [[False, False, True], #renamed input variable since "input" is a function name...
[False, False, False],
[False, False, False]]
print(minesweeper(matrix))
一般来说,您的解决方案是有效的(如果您取消注释行 #matrix[x].insert(len(matrix)+2, "x")
),但是您在你的 pop() 序列。您可以只使用 2D 切片(请参阅 corresponding stackoverflow topic)并执行
output_matrix = [output_matrix[i][1:len(output_matrix)-1] for i in range(1, len(output_matrix)-1)]
而不是所有的 pop() 步骤。
关于python - Codefights, minesweeper, python, code almost working,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48481513/
我几天前刚刚学习 Java,并开始编写扫雷游戏。问题是,当我尝试级联周围的 block 并显示 block (空白或数字取决于相邻炸弹的数量)时,我的递归失败并给出堆栈溢出错误。我的代码如下: pub
题目地址:https://leetcode.com/problems/minesweeper/description/ 题目描述 Let's play the minesweeper game (
为了练习,我正在遵循扫雷教程,但在将每个方格周围的炸弹数量相加时,它不会计算右侧的炸弹,而且我不完全确定问题是什么。我尝试过重新启动、在多个编译器中打开它、移动它,但什么也没有。我查了又查,没有发现任
我想用鼠标左键单击打开图 block 并用鼠标右键单击标记它们。我阅读并尝试了很多,但不知何故无法使其正常工作。 private class Tile extends StackPane {
我开始学习Python,我只是从一个简单的例子开始。问题是计算表格中每个位置附近的地雷数。考虑下面的输入文件: 4 4 *... .... .*.. .... 3 5 **... ..... .*..
我必须用 C 重新创建一个简单版本的游戏“雷区”,但我无法计算棋盘上某个位置附近有多少地雷。我的一段代码遍及整个阵列(板)搜索地雷。当它找到地雷时,它应该在地雷周围的所有地点加起来+1。我的代码只适用
我目前正在研究一个扫雷程序,我需要一些帮助来揭示其中的邻居。目前我的程序可以做的事情如下 1 是被选中的按钮,线条是我需要的填写。目前选中的按钮周围的按钮是我可以填写的内容。 如有必要,我可以发布代码
我正在尝试使用 Minesweeper 作为示例应用程序来学习逆向工程。我找到了 MSDN article在一个简单的 WinDbg 命令上,它显示了所有的地雷,但它很旧,没有详细解释,也不是我想要的
我正在编写 MineSweeper 并在 GridLayout 上使用 JButton。行数和列数是由用户输入的,因此设置固定大小可能会导致一些问题。 如何在不设置面板固定大小的情况下删除按钮之间的空
到目前为止,我得到的是一个 .in 文件,它将创建 100 个数组,后面是棋盘上有多少个“地雷”,然后每个“地雷”有 2 个数字,代表它们将被放置在数组上的位置。这是针对我的初学者 C 类(class
我正在尝试使用洪水填充来清理扫雷游戏中的开放区域。我做了一个简单的洪水填充函数,但我不断收到堆栈溢出错误代码 public void revealEmpty(int givenIndex){
我是 Java 初学者,最终我想为我正在为高级项目制作的机器人创建代码。我计划让机器人按照指定的模式搭建多米诺骨牌,然后将其推倒。我首先需要编写一个程序,允许我选择要放置在网格上的多米诺骨牌。然后我计
我正在做 codefight 的挑战:扫雷。 描述: 我的代码如下: def minesweeper(matrix): for x in range(len(matrix)):
我试图在 UVa ( http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=24&page=sho
您好,我正在尝试解决编程挑战 PC/UVa ID:110102/10189,称为 C 语言的扫雷器。示例输入和输出: input|output ------------ 4 4 | *... |*1
我是一名优秀的程序员,十分优秀!