Javascript 在一维阵列网格中使用环绕查找邻居的更优雅的方法?

Javascript 在一维阵列网格中使用环绕查找邻居的更优雅的方法?,javascript,java,c#,arrays,algorithm,Javascript,Java,C#,Arrays,Algorithm,假设我有一个1D游戏网格,如下所示: 例如,27以南的单元格将是35,59以南的单元格将是3(因为环绕)。这可以这样实现: var s = spot = 59 var r = row length = 8 var b = board size = 64 var south = (s+r) mod b 好的,现在我们试着找到另一个东边的牢房。27号以东的单元格是28号,31号以东的单元格是24号(也是因为环绕)。我能想到的最好的办法是: var s = spot = 31 var r = ro

假设我有一个1D游戏网格,如下所示:

例如,27以南的单元格将是35,59以南的单元格将是3(因为环绕)。这可以这样实现:

var s = spot = 59
var r = row length = 8
var b = board size = 64
var south = (s+r) mod b
好的,现在我们试着找到另一个东边的牢房。27号以东的单元格是28号,31号以东的单元格是24号(也是因为环绕)。我能想到的最好的办法是:

var s = spot = 31
var r = row length = 8
var lc = left column = Math.floor(s / 8) * 8
var east = lc + ((s - lc + 1) % 8)
这相当复杂,这让我觉得我遗漏了一些明显的东西。难道没有更好的办法吗

另外,我还没有实现,但我可以想象发现像东北和东南这样的对角线单元更加复杂

出于本问题的目的,请假设这仅限于1D阵列。另外,我想有一个稍微明智的解决方案,对于二次方的电路板尺寸可能更优雅,但最好该解决方案适用于任何电路板尺寸。

east:

i + 1 - ((i mod 8) div 7) * 8
西:


下面是我找到的用于计算east的不同方法的列表(Javascript):


请先选择一种语言。@Berger有没有办法说明我不介意哪种语言回答这个问题?像这样的问题,如果你的代码有效,你只想优化它,最好在Ok上提问,谢谢,我也会在那里尝试。我必须等待40分钟才能发布。好吧,你将保持在同一行,然后你可以添加1以获得下一行,如果(s+1)%8==0,你将获得你行的第一列?聪明!非常感谢。
(i - 1) +  (((i - 1) mod 8) div 7) * 8
or
(i - 1) +  (((i + 7) mod 8) div 7) * 8
to avoid potential problems with negative dividend modulo in some languages
east = s + 1 - (s + 1 & 7 ? 0 : 8)

east = s + 1 - ((s % 8) / 7 | 0) * 8

east = (s + 1) % 8 == 0 ? Math.floor(s / 8) * 8 : s + 1

east = (s & 0xFFF8) + ((s - (s & 0xFFF8) + 1) % 8)

lc = Math.floor(s / 8) * 8; east = lc + ((s - lc + 1) % 8)