Remplir un tableau en spirale

Contenu du snippet

Suite à un post (http://www.javascriptfr.com/infomsg_TABLEAU-SPIRALE_1039112.aspx ), je me suis penché sur la question du remplissage d'un tableau en spirale :
Imaginons donc un carré de 5*5, cela devrait donner ceci en résultat finale
0 1 2 3 4
15 16 17 18 5
14 23 24 19 6
13 22 21 20 7
12 11 10 9 8

Source / Exemple :


<script language="javascript"> 
<!--
tableauspirale(5);
function tableauspirale(vartaille){
	if (vartaille>1){
		var taille=parseInt(vartaille);       
		var nbr=0;
		var damier=new Array(taille);
		var nbrcarre = parseInt(taille / 2);
		//initialisation du damier
		for (var j=0;j<damier.length;j++){damier[j]= new Array(damier.length);}
		for (var j=0;j<damier.length;j++)
			{
			for (var x=0;x<damier[j].length;x++){damier[j][x]=0;}
			}
		//initialisation des limites
		var premiereligne=0;
		var dernierecolonne=taille -1 ;
		var derniereligne=taille - 1;
		var premierecolonne=0;
		for(var startcarre=1;startcarre<nbrcarre+1;startcarre++){
			//construction de la première ligne
			for(var j=premiereligne;j<dernierecolonne;j++)
				{
				damier[premiereligne][j]=nbr;
				nbr++;
				}
			//affichage
			affichagetableau(damier);
			//construction de la dernière colonne
			for(var j=premiereligne;j<derniereligne;j++)
				{
				damier[j][dernierecolonne]=nbr;
				nbr++;
				}
			//affichage
			affichagetableau(damier);
			//construction de la dernière ligne
			for(var j=dernierecolonne;j>premierecolonne;j--)
				{
				damier[derniereligne][j]=nbr;
				nbr++;
				}
			//affichage
			affichagetableau(damier);
			//construction de la première colonne
			for(var j=derniereligne;j>premiereligne;j--)
				{
				damier[j][premierecolonne]=nbr;
				nbr++;
				}
			//affichage
			affichagetableau(damier);
			//incrementation pour donner les limites du carre suivant
			premiereligne += 1;
			dernierecolonne -= 1;
			derniereligne -= 1;
			premierecolonne += 1;
		}
		//si la taille du carré est un nombre impaire alors on remplit le centre du tableau avec la dernière valeur de nbr
		if (taille%2){
			damier[premiereligne][premiereligne]=nbr;
			//affichage
			affichagetableau(damier);
		}
		
	}
}
function affichagetableau(damier){
	//affichage
	document.write("<table>");
	for (var j=0;j<damier.length;j++){
		document.write("<tr>");
		for (var x=0;x<damier[j].length;x++){
			document.write("<td>");
			document.write(damier[j][x]);
			document.write("</td>");
			}
		document.write("</tr>");
		}
	document.write("</table>");
	document.write("<br>");
}
//-->
</script>

Conclusion :


Code à placer dans le body.
J'ai placé la fonction d'affichage du tableau tout au long du procédé pour que vous puissiez voir les différentes étapes de construction !
Attention évitez les grandes tailles de carré si vous laissez l'affichage actif.

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.