Snippets

Created by Steven Berlan last modified Steven Berlan
// Mini-snail (174 bytes, only supports n x n patterns)
function snail(a){for(var i=0,Y=0,y=0,Y=0,d=0,s=a.length,r=[],x=-1,X=1,l;l=s;++d){while(l--){y+=Y;x+=X;r[i++]=a[y][x]}d%2?(X=(d%4)==1?-1:1,Y=0):(X=0,Y=d%4?-1:1,--s)}return r}

// Expanded mini-snail:
function snail(array) {
    var size = array.length;
    var i = 0;
    var ret = [];
    var x = -1;
    var y = 0;
    var xIncr = 1;
    var yIncr = 0;
    var direction = 0;
    for (var loop = size; loop = size; ++direction) {
        while (loop--) {
            y += yIncr;
            x += xIncr;
            ret[i++] = array[y][x];
        }
        if (direction % 2) {
            xIncr = (direction % 4) == 1 ? -1 : 1;
            yIncr = 0;
        } else {
            xIncr = 0;
            yIncr = direction % 4 ? -1 : 1;
            --size;
        }
    }
    return ret;
}

Comments (0)

HTTPS SSH

You can clone a snippet to your computer for local editing. Learn more.