假设我有一个 2x2 网格,如下所示:
A B A A
B C C B
B C C A
B B B B
由列表组成
grid = [["A", "B", "A", "A"],["B","C","C","B"],["B","C","C","A",],["B","B","B","B"]
.
我希望执行 2048 式效果,其中 C 2x2 被删除,替换为 X 以显示空白,然后接下来的动作将是:
一个例子看起来像
A B A A A B A A A B A A
B X X B -> B B B B -> B B B B
B X X A B X X B B B X X
B B B B B X X B B B X X
此时另一个2x2的Bs已经形成,应该再次进行操作,直到再也找不到2x2s为止
我对 python 很陌生,所以我认为我的代码不是特别整洁或有效,而且我注意到在第 2 列中的第一个 B 替换第 2 列第 2 列中的 X 之后,我的代码跳过了第 2 行中的 X Col 3,所以我知道我做错了什么。
我写的代码是这样的:
for row, grid_row in enumerate(grid):
for col, item in enumerate(grid_row):
if item == "Z":
item_col = col
item_row = row
for row, grid_row in enumerate(grid):
if grid_row[item_col] != "Z" and row >= item_row:
grid[item_row][item_col] = grid_row[item_col]
grid_row[item_col] = "Z"
请注意,我不能为练习执行任何导入,示例应该使用 n x n 大小的网格,但如果有人知道我如何使我的代码工作和/或工作更整洁,那将是一个巨大的帮助。