我有一个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的值来设计可以构建这样的数组的构造函数。
答案 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