Ruby 用红宝石寻找骑士可能的第二位置

Ruby 用红宝石寻找骑士可能的第二位置,ruby,Ruby,在上图中,第二个鼠标坐标为[2,1] 我可以通过以下方式找到骑士移动的第一步 [1,-1].product([2,-2])+[2,-2].product([1,-1]) => [[1, 2], [1, -2], [-1, 2], [-1, -2], [2, 1], [2, -1], [-2, 1], [-2, -1]] 为了找到第二步,我发现我需要找到上面数组的和的组合 例如,从[0,0]到[2,0],您可以添加[1,2]+[1,-2]以获得[2,0] 现在我想知道如何对两个数组求和以

在上图中,第二个鼠标坐标为[2,1]

我可以通过以下方式找到骑士移动的第一步

[1,-1].product([2,-2])+[2,-2].product([1,-1])
=> [[1, 2], [1, -2], [-1, 2], [-1, -2], [2, 1], [2, -1], [-2, 1], [-2, -1]] 
为了找到第二步,我发现我需要找到上面数组的和的组合

例如,从[0,0]到[2,0],您可以添加[1,2]+[1,-2]以获得[2,0]

现在我想知道如何对两个数组求和以找到所有可能的第二个位置

我感谢你的任何意见

更新

([1,-1].product([2,-2])+[2,-2].product([1,-1])).combination(2).to_a
=> [[[1, 2], [1, -2]], [[1, 2], [-1, 2]], [[1, 2], [-1, -2]], [[1, 2], [2, 1]], 
[[1, 2], [2, -1]], [[1, 2], [-2, 1]], [[1, 2], [-2, -1]], [[1, -2], [-1, 2]], 
[[1, -2], [-1, -2]], [[1, -2], [2, 1]], [[1, -2], [2, -1]], [[1, -2], [-2, 1]], 
[[1, -2], [-2, -1]], [[-1, 2], [-1, -2]], [[-1, 2], [2, 1]], [[-1, 2], [2, -1]], 
[[-1, 2], [-2, 1]], [[-1, 2], [-2, -1]], [[-1, -2], [2, 1]], [[-1, -2], [2, -1]], 
[[-1, -2], [-2, 1]], [[-1, -2], [-2, -1]], [[2, 1], [2, -1]], [[2, 1], [-2, 1]], 
[[2, 1], [-2, -1]], [[2, -1], [-2, 1]], [[2, -1], [-2, -1]], [[-2, 1], [-2, -1]]]
现在我需要在同一个数组中添加数组


有什么建议吗?

我认为这是正确的

([1,-1].product([2,-2])+[2,-2].product([1,-1])).combination(2).map{|x| x.map{|y|
 y.inject(:+)}}.uniq
=> [[3, -1], [3, 1], [3, -3], [3, 3], [-1, 1], [-1, -3], [-1, 3], [-1, -1], 
[1, -3], [1, 3], [1, 1], [1, -1], [-3, 3], [-3, 1], [-3, -1], [-3, -3]]

如果您希望对两个数组的所有组合求和,并删除重复项,则是正确的。提示:使用。考虑建立一个OCT树,其中每个深度级别显示下一组可能的移动。