gpt4 book ai didi

python - 在 NxN 板中查找与给定索引相邻的所有索引

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:35:53 26 4
gpt4 key购买 nike

假设我有一个 10x10 单元板。每个单元格的索引从 1 到 100(基于 1 的索引)。该板是一个单元格列表:[1, 2, 3, ..., 100]

任务。给定一个单元格的索引,找到覆盖它的所有单元格。

例如:

1 | 2 | 3 | 4
_____________
5 | 6 | 7 | 8
_____________
9 |10 |11 |12
_____________
13|14 |15 |16

给定索引:11

返回:[6, 7, 8, 12, 16, 15, 14, 10],顺序不是问题。

我的解决方案:

def allAdjacentCell(given_index):
result = []
dimension = 4 # length of a line
if (1 <= given_index - dimension <= 16):
result.append(given_index - 1) # the cell above the given cell
if (1 <= given_index + dimension <= 16):
# below given index
if (1 <= given_index - 1 <= 16):
# ...
if (1 <= given_index + 1 <= 16):
# ...
# check for diagonal cells
return result

如果给定的单元格位于棋盘中央的某个位置,我的方法似乎会返回正确的结果。但如果给定的单元格位于角落或边缘,那就错了。例如,如果给定单元格 = 5,则该方法将包含索引为 4 的单元格,尽管它不与 5 相邻。

解决这个问题的正确方法是什么?

最佳答案

我们注意到只有当索引值位于最右边或最左边的列或顶部或底部的行中时,我们才会得到“流氓”值。

顶部/底部行流氓值仅是负值或越界值。

对于最左侧列中的索引,流氓值将具有 %dim=0。

对于最右边列中的索引,流氓值将具有 %dim=1。

这样我们只需要从中心的一个索引的标准值中过滤掉即可。

def all_adjacent(index,dim):
arr = [index+1,index-1,index+dim,index-dim,index+dim+1,index+dim-1,index-dim+1,index-dim-1]
if index%dim==0: ## right most row
arr = filter(lambda x:x%dim!=1,arr)
if index%dim==1: ## left most row
arr = filter(lambda x:x%dim!=0,arr)

arr = filter(lambda x:x>=1 and x<=dim*dim,arr) ## top and bottom rows

return arr

关于python - 在 NxN 板中查找与给定索引相邻的所有索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42298122/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com