Je suis donc en train d'apprendre JavaScript et je suis intéressé par les nombreuses façons différentes que l'on peut accomplir quelque chose dans la programmation. Ceci est mon code de diamant, qui fonctionnera avec un nombre impair donné: y a-t-il d'autres moyens plus intuitifs de faire cela? P> p>
5 Réponses :
Vous pouvez adopter une approche récursive et appeler la fonction jusqu'à ce que vous obteniez la plus longue ligne en étoile.
.as-console-wrapper { max-height: 100% !important; top: 0; }
function diamond(l, i = 1) { const STAR = '*', SPACE = ' ', LINE = SPACE.repeat((l - i) / 2) + STAR.repeat(i); console.log(LINE); if (i >= l) return; diamond(l, i + 2); console.log(LINE); } diamond(11);
Si vous souhaitez utiliser une approche itérative pour résoudre ce problème, vous pouvez faire:
const makeDiamond = n => { let total = n, iter = 0 const base = ['*'.repeat(n)] // Start with the middle, build out while((n-=2) > 0) { const layer = ' '.repeat(++iter)+'*'.repeat(n) base.unshift(layer) // Prepend layer base.push(layer) // Append layer } base.forEach(l => console.log(l)) // Print each layer in sequence }
Remarque: cela fonctionne pour les diamants de tailles paires ou impaires.
J'ai en fait réussi à créer un autre code similaire qui maintient i = i + 2 au lieu de le diminuer dans la deuxième boucle.
const l = 11; let space = ' '; let star = '*'; let i = 1; let k; let n = 0; while(i <= l) { k = (l - i)/2; console.log(space.repeat(k) + star.repeat(i)); i = i + 2; } while(i >= l) { k = (i - l)/2; n = i - (4 * k); if (n > 0) {console.log(space.repeat(k) + star.repeat(n)); } else { break; } i = i + 2; }
Créez une fonction pour créer la nième ligne.
Créez le haut en créant un tableau égal à la moitié de la hauteur et mappez-le avec la fonction de ligne.
Rejoignez le haut, puis inversez le haut et utilisez-le comme bas.
const diamond=n=>(n=Array(~~(n/2)).fill().map((v,i)=>" ".repeat((n-i*2+1)/2)+"*".repeat(i*2+1))).join("\n")+"\n"+n.reverse().slice(1).join("\n"); console.log(diamond(10))
avec reduce
:
const n = 11; Array.from(Array(~-n/2|0), (_,i) => " ".repeat(i+1) + "*".repeat(n+~i*2)) .reduce((a, c) => [c, ...a, c], ["*".repeat(n)]) .forEach(l=>console.log(l))
~ -n / 2 | 0 === Math.floor ((n-1) / 2)
n + ~ i * 2 === n- (i + 1) * 2