JSFiddle - React, Tailwind, and code Playground

by Tim Ko

JavaScript

function printSpiral(layers) {
	var size = 2 * layers - 1;
	var value = size * size;
  
  var myMap = [];
  for (var i = 0; i < size; i++) {
	  var row = [];
    for (var j = 0; j < size; j++) {  	
	    row.push(null);
    }
    myMap.push(row);
  }
  
  var i = 0;
  var j = size - 1;
  
  var direction = 'left';
  var justFilledIn = true;  

	while (true) {
  	if (!justFilledIn) {
	  	justFilledIn = true;
    } else {
	  	myMap[i][j] = value--;
    }
    if (i == (size - 1) / 2 && j == (size - 1) / 2) {
      break;
    }

  	switch(direction) {
    	case 'right':
      	if (j + 1 >= size || myMap[i][j+1]) {  
			  	justFilledIn = false;
        	direction = 'up';
        } else {
					j++;
        }
      	break;
      case 'up':
      	if (i - 1 < 0 || myMap[i-1][j]) {  
			  	justFilledIn = false;
					direction = 'left';
				} else {
        	i--;
        }
      	break;
      case 'left':
      	if (j - 1 < 0 || myMap[i][j-1]) {  
			  	justFilledIn = false;
        	direction = 'down';
        } else {
        	j--;
        }
      	break;
      case 'down':
      	if (i + 1 >= size || myMap[i+1][j]) {  
			  	justFilledIn = false;
        	direction = 'right';
        } else {
        	i++;
        }
      	break;
    }
    
    
  }
  
  for (var i = 0; i < size; i++) {
		console.log(myMap[i].join('\t'));
  }
}

printSpiral(4);