用Ruby找到骑士的第二个位置

时间:2014-04-19 00:06:09

标签: ruby

enter image description here

在上图中,第二个鼠标坐标是[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 个答案:

答案 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]]