我已经阅读了this SO question关于如何多次旋转二维数组,我很好奇如何扩展这种情况以使用二维数组的一部分。我已经考虑过一段时间了,我似乎无法想出一个好的等式。基本上我想要做的就是这样:
1 2 3 4 5 6 13 7 1 4 5 6 7 8 9 10 11 12 14 8 2 10 11 12 13 14 15 16 17 18 15 9 3 16 17 18 19 20 21 22 23 24 ----> 19 20 21 22 23 24 25 26 27 28 29 30 25 26 27 28 29 30 31 32 33 34 35 36 31 32 33 34 35 36
我现在用Ruby写这个,但我并不特别关心这种问题的解决方案是什么语言。我只是好奇你是如何解决这类问题的。
编辑:要添加更多细节,可以执行此操作的函数的基本参数将是这样的
def rotate(array, times=1, x=0, y=0, len=nil)
...
end
答案 0 :(得分:3)
答案 1 :(得分:2)
那样的东西?
def rotate a,len,ii=0,jj=0,t=1
t.times do
a = a.map.with_index do |line,i|
line.map.with_index do |e,j|
(ii...(ii+len))===i && (jj...(jj+len))===j ?
a[ii+jj+len-j-1][jj+i-ii] : e
end
end
end
a
end
t = (1..6).map{|i|(1..6).map{|j|j+6*i-6}}
t.each { |i| p i }
rotate(t,3,2,1).each { |i| p i }
rotate(t,6).each { |i| p i }
rotate(t,3,2,1,4).each { |i| p i }
rotate(t,6,0,0,4).each { |i| p i }
rotate(t,2,2,2,3).each { |i| p i }