在上图中,第二个鼠标坐标是[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]]]
现在我需要在同一个数组中添加数组。
有什么建议吗?
答案 0 :(得分:0)
我认为这是正确的。
([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]]