根据矢量自动完成阵列

时间:2009-12-29 00:55:56

标签: ruby arrays

我有一个16个方格的数组,我想根据数组中的位置和向量TOP_RIGHT自动完成整数值。

TOP_RIGHT = 3

# Build the array...
@top_right = Array.new(16, 0)
@top_right.each_index do |square|
  @top_right[square] = square / TOP_RIGHT if (0...16).include?(square - TOP_RIGHT)
end

# Print the array...
i = 0
@top_right.each do |square|
  puts if i % 4 == 0
  print "#{square} "
i += 1
end

我的代码似乎没问题,但经过测试后结果是:

0 0 0 1 
1 1 2 2 
2 3 3 3 
4 4 4 5

我想得到这个数组:

0 0 0 0 
1 1 1 0 
2 2 1 0 
3 2 1 0

您认为使用数组和简单的Ruby方法是否可行?

谢谢,结局快乐!

编辑:

在前面的例子中,TOP_RIGHT是一个类似的矢量,它的值是我们可以添加或子的情况数,以便从源方块到目标方块(位于右上角)。

例如,如果我得到另一个向量:TOP,它的值是4,生成的数组可以是:

# print_array(4)
0 0 0 0 
1 1 1 1 
2 2 2 2
3 3 3 3

...如果向量是RIGHT,则其值为-1,数组可以是:

# print_array(-1)
3 2 1 0 
3 2 1 0
3 2 1 0
3 2 1 0

这不是一个小问题吗? :) 我没有看到如何通过传递vector的值来设计可以构建这样的数组的构造函数。

1 个答案:

答案 0 :(得分:0)

如果使用数组来保存数组,并且不尝试在向量中进行,那就不错了:

#!/usr/bin/ruby1.8

top_right = 3
array_size = 4
a = (0...array_size).collect do |i|
  (0...array_size).collect do |j|
    [i, j].collect do |e|
      top_right - e
    end.min
  end
end.reverse
a.each do |e|
  p e 
end

=> [0, 0, 0, 0]
=> [1, 1, 1, 0]
=> [2, 2, 1, 0]
=> [3, 2, 1, 0]

如果你真的需要将数组压缩成一个向量,那么:

v = a.flatten