lolilol

Benchmark created on


Preparation HTML

var mySpiral =function(a,b,c,d){
var solution = [];
var lengthOfSegment = 0; 
var sens = 1;
var add=-1;
        var spiralGrid=function( Width,Height,Row,Col,currentPositionOnSegment){  
                debugger
                var index = Height*(Row-1)+Col; 
                if(0<index&&index<=Width*Height && Row >0 && Col >0) solution.push(index);

        if (solution.length===Width*Height) return;
        if(lengthOfSegment===currentPositionOnSegment && sens===-1){            
                sens=1; 
                currentPositionOnSegment=0;
                Col+=add;
                        add*=-1;
                        ++lengthOfSegment;
        } else if (lengthOfSegment!==currentPositionOnSegment && sens===-1){
                ++currentPositionOnSegment;
                Col+=add;
        }else if(lengthOfSegment===currentPositionOnSegment && sens===1){
                sens=-1;                        
                currentPositionOnSegment=0;
                Row+=add;
        }else if(lengthOfSegment!==currentPositionOnSegment && sens===1){
                ++currentPositionOnSegment;
                Row+=add;
        }     
    
        spiralGrid(Width,Height,Row,Col,currentPositionOnSegment);
    
        }
spiralGrid(a,b,c,d,0);
return solution;
}

var first = mySpiral(5,5,3,3);
var second = mySpiral(2,4,1,2);
console.log(first,second);

Test runner

Ready to run.

Testing in
TestOps/sec
lolilol1
var mySpiral =function(a,b,c,d){
var solution = [];
var lengthOfSegment = 0; 
var sens = 1;
var add=-1;
        var spiralGrid=function( Width,Height,Row,Col,currentPositionOnSegment){  
                debugger
                var index = Height*(Row-1)+Col; 
                if(0<index&&index<=Width*Height && Row >0 && Col >0) solution.push(index);

        if (solution.length===Width*Height) return;
        if(lengthOfSegment===currentPositionOnSegment && sens===-1){            
                sens=1; 
                currentPositionOnSegment=0;
                Col+=add;
                        add*=-1;
                        ++lengthOfSegment;
        } else if (lengthOfSegment!==currentPositionOnSegment && sens===-1){
                ++currentPositionOnSegment;
                Col+=add;
        }else if(lengthOfSegment===currentPositionOnSegment && sens===1){
                sens=-1;                        
                currentPositionOnSegment=0;
                Row+=add;
        }else if(lengthOfSegment!==currentPositionOnSegment && sens===1){
                ++currentPositionOnSegment;
                Row+=add;
        }     
    
        spiralGrid(Width,Height,Row,Col,currentPositionOnSegment);
    
        }
spiralGrid(a,b,c,d,0);
return solution;
}

var first = mySpiral(50,50,3,3);
console.log(first);
ready
lol5
 var arraySpiralFromGridOfWidth = function(width, height,line,column)
 {
    var returnArray = [];
    var currentDirectionIndex = 0;
    var currentInt;
    var nextPivotal = 3;
    var numOfPivotal = 1;
    line++;
    
    for(var i=1;i<=width*height; i++){
        if(nextPivotal == i){
            numOfPivotal++;
            nextPivotal += Math.ceil(numOfPivotal/2);
            currentDirectionIndex++;
        }
        
        switch (currentDirectionIndex%4) {
            case 0:
                // Up
                line--;
                break;
                
            case 1:
                // Left
                column--;
                break;
                
            case 2:
                // Down
                line++;
                break;
                
            case 3:
                // Right
                column++;
                break;
        }
        
        currentInt = (line-1)*width+column;
        if(currentInt<=0||line>height||column>width||!column||!line){
            i--;
        } else {
            returnArray.push(currentInt);
        }
    }
    return returnArray;
}


var lol = arraySpiralFromGridOfWidth(50,50,3,3)
console.log(lol)
ready

Revisions

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