Cette semaine, c'est Hicham qui vous propose un #KataOfTheWeek : The Clockwise Spiral
Briefing du Kata : L'objectif est de créer une fonction createSpiral(n)
qui prend un nombre n
et retourne un tableau à 2 dimensions n*n
, où n*n
représente la spirale. Si n = 1
ou n'est pas un nombre alors on retourne un tableau vide.
Par exemple : n = 3
le résultat est : [[1,2,3],[8,9,4],[7,6,5]]
1 2 3
8 9 4
7 6 5
Saurez-vous résoudre le problème ?
Bon courage !
Et voici une solution proposée par l'auteur en Javascript :
const createSpiral = n => {
if (!Number.isInteger(n) || n < 1) return []
let returnArray = []
for (let i = 0; i < n; i++) {
returnArray[i] = Array(n)
}
let topBoundary = 0;
let bottomBoundary = n-1;
let leftBoundary = 0;
let rightBoundary = n-1;
let counter = 1;
let direction = 'LEFT';
let x = 0;
let y = 0;
while (topBoundary <= bottomBoundary && leftBoundary <= rightBoundary) {
if (direction === "LEFT" && x <= rightBoundary) {
returnArray[y][x++] = counter++
} else if (direction === "LEFT" && x > rightBoundary) {
direction = "DOWN"
x = rightBoundary
y = ++topBoundary
} else if (direction === 'DOWN' && y <= bottomBoundary) {
returnArray[y++][x] = counter++
} else if (direction === 'DOWN' && y > bottomBoundary) {
direction = 'RIGHT'
x = --rightBoundary
y = bottomBoundary
} else if (direction === 'RIGHT' && x >= leftBoundary) {
returnArray[y][x--] = counter++
} else if (direction === 'RIGHT' && x < leftBoundary) {
direction = 'UP'
x = leftBoundary
y = --bottomBoundary
} else if (direction === 'UP' && y >= topBoundary) {
returnArray[y--][x] = counter++
} else if (direction === 'UP' && y < topBoundary) {
direction = 'LEFT'
x = ++leftBoundary
y = topBoundary
}
}
return returnArray
}
Votre équipe TakiVeille