下面的函数接收这样的二维数组。
[['.', '.', '.', '.', '.', '.', '.'],
['.', '.', '.', '.', '.', '.', '.'],
['.', '.', 'y', '.', '.', '.', '.'],
['.', '.', 'y', '.', 'r', '.', 'y'],
['.', 'r', 'r', 'y', 'r', 'y', 'r'],
['.', 'r', 'y', 'y', 'r', 'r', 'y']]
函数的目的是计算在我的2D数组中存在的指定大小的“条纹”的数目。条纹定义为水平、垂直或对角线排列的连续标记行。
下面的示例计算为1条大小为2的条纹。
[['.', '.', '.', '.', '.', '.', '.'],
['.', '.', '.', '.', '.', '.', '.'],
['.', '.', '.', '.', '.', '.', '.'],
['.', '.', '.', '.', '.', '.', '.'],
['.', '.', 'r', '.', '.', '.', '.'],
['.', 'r', '.', '.', '.', '.', '.']]
下面的代码片段是我的暴力解决方案,它贯穿于电路板的每个组合。是否有更有效的解决方案/算法可供我使用?
def streaks(num_repeats, board, player_color):
reduced_range = num_repeats - 1
list_idx_offsets = list(range(0, num_repeats))
counter = 0
# Checks rows
for col in range(0, COLUMN_COUNT - reduced_range):
for row in range(0, ROW_COUNT):
list_results = []
for idx in list_idx_offsets:
list_results.append(board[row][col + idx])
# If the list is identical and the player is in the list, then increment counter
if list_els_identical(list_results) and player_color in list_results:
counter += 1
# Checks columns
for col in range(0, COLUMN_COUNT):
for row in range(0, ROW_COUNT - reduced_range):
list_results = []
for idx in list_idx_offsets:
list_results.append(board[row + idx][col])
if list_els_identical(list_results) and player_color in list_results:
counter += 1
# Check diagonals positive
for col in range(0, COLUMN_COUNT - reduced_range):
for row in range(0, ROW_COUNT - reduced_range):
list_results = []
for idx in list_idx_offsets:
list_results.append(board[row + idx][col + idx])
if list_els_identical(list_results) and player_color in list_results:
counter += 1
# Check diagonals negative
for col in range(0, COLUMN_COUNT - reduced_range):
for row in range(reduced_range, ROW_COUNT):
list_results = []
for idx in list_idx_offsets:
list_results.append(board[row - idx][col + idx])
if list_els_identical(list_results) and player_color in list_results:
counter += 1
return counter
最佳答案
如果只有x多个碎片,那么只检查x多个在一个连续的,因为不能有更多,然后停止这将比检查每个组合快。
关于python - 如何更有效地检查游戏板上的条纹?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55485557/