달팽이 모양 배열 한줄로 뽑기
array = [[1,2,3],
[8,9,4],
[7,6,5]]
snail(array) #=> [1,2,3,4,5,6,7,8,9]
var snail = function(array) {
var rotate = function(array) {
var a = [];
for (var i=0; i<array.length; i++)
for (var j=0; j<array[i].length; j++) {
var k = array[i].length - 1 - j;
a[k] = a[k] || [];
a[k][i] = array[i][j];
}
return a;
};
var r = [];
while(array.length > 0){
r = r.concat(array.shift());
array = rotate(array);
}
return r;
};
참고. 배열 회전...을 좀 더 간단하게?
rotateLeft = function(array) {
var result = [];
while (array[0].length > 0) {
result.push(array.map(item=> item.pop()));
}
return result;
}
snail = function(array) {
var res = [];
while(array.length) {
res = res.concat(array.shift())
array = expand(array);
}
return res;
}
function expand(matrix){
return matrix.reduce(function(res, arr, i){
arr.forEach(function(n, j){
if (!res[j]) res[j] = [];
res[j][i] = n;
})
return res;
}, []).reverse();
}
snail = function(array) {
var result;
while (array.length) {
// Steal the first row.
result = (result ? result.concat(array.shift()) : array.shift());
// Steal the right items.
for (var i = 0; i < array.length; i++)
result.push(array[i].pop());
// Steal the bottom row.
result = result.concat((array.pop() || []).reverse());
// Steal the left items.
for (var i = array.length - 1; i >= 0; i--)
result.push(array[i].shift());
}
return result;
}
For fellow viewers ez way:
for
s (You ll need them 4 for each side)