Without loss of generality, let's write the array as:
arr = [
[ 1, 2, 3, 4,],
[12, 13, 14, 5,],
[11, 16, 15, 6,],
[10, 9, 8, 7,]
]
The desired result is:
[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]
I will use a helper:
def rotate_anticlockwise(arr)
arr.map(&:reverse).transpose
end
For example:
rotate_anticlockwise(arr)
#=> [[4, 5, 6, 7],
# [3, 14, 15, 8],
# [2, 13, 16, 9],
# [1, 12, 11, 10]]
We can now compute the desired result as follows:
out = []
a = arr.map(&:dup)
while a.any?
out.concat(a.shift)
a = rotate_anticlockwise(a)
end
out
# => [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16]