Codewars Snail (v3)

Revision 3 of this benchmark created on


Setup

var x = [];
    for(var i = 0; i < 100; i++) {
      x[i] = [];
      for(var k = 0; k < 100; k++)
        x[i][k] = Math.floor(Math.random() * 10);
    };
    
    stevenbarragan = function(array) {
      return array.length == 0 || array.length == 1 ? array : [].concat(
                array.shift(),
                array.map(function(_,i){return array[i].pop();}),
                array.pop().reverse(),
                array.map(function(_,i){return array[i].shift();}).reverse(),
                stevenbarragan(array)
        );
    }
    
    haan = function(n) {
      var i_snail = function(n, x, y) {
        var result = [];
        for (var i = x; i <= y; i++) {
          result.push(n[x][i]);
        }
        for (var i = x+1; i <= y; i++) {
          result.push(n[i][y]);
        }
        for (var i = y-1; i >= x; i--) {
          result.push(n[y][i]);
        }
        for (var i = y-1; i >= x+1; i--) {
          result.push(n[i][x]);
        }
        if (x < y) {
          return result.concat(i_snail(n, x+1, y-1));
        } else {
          return result;
        }
      }
      return i_snail(n, 0, n[0].length - 1);
    }
    
    eric = function(array) {
        //rect[left, top, width, height]
        var rect = [0, 0, array.length, array[0].length];       
        var result = new Array();
    
        while(rect[2] - rect[0] > 0  && rect[3] - rect[1] > 0)
        {
                //go right
                for (var i = rect[1]; i < rect[3]; ++i) result.push(array[rect[0]][i]);
          
                //go down  
                for (var i = rect[0]+1; i < rect[2]; ++i) result.push(array[i][rect[3]-1]);
    
                //go left
                for (var i = rect[3]-2; i >= rect[1]; --i) result.push(array[rect[2]-1][i]);
    
                //go up - 1
                for (var i = rect[2]-2; i > rect[0]; --i) result.push(array[i][rect[1]]);
    
                //edit and loop
                rect[0]++; rect[1]++; rect[2]--; rect[3]--;
        };
    
      return result;
    }

Test runner

Ready to run.

Testing in
TestOps/sec
stevenbarragan
stevenbarragan(x.concat());
ready
haan
haan(x.concat());
ready
eric
eric(x.concat());
ready

Revisions

You can edit these tests or add more tests to this page by appending /edit to the URL.