1

I'm trying to find a shorter way to print a right-triangle and an isosceles triangle without using that many nested loops. Please help, here is my code so far, it works I just have trouble finding a shorter way to write it:

//right-triangle
let triangleStr = "";
let num = 5;
for (let i = 1; i <= num; i++) {
  for (let j = 0; j < num - i; j++) {
    triangleStr += " ";
  }
  for (let k = 0; k < i; k++) {
    triangleStr += "*";
  }
  triangleStr += "\n";
}
console.log(triangleStr);

//isosceles-triangle
triangleString = "";
for (let i = 1; i <= num; i++) {
  for (let j = 1; j <= num - i; j++) {
    triangleString += " ";
  }
  for (let k = 1; k <= 2 * i - 1; k++) {
    triangleString += "*";
  }
  triangleString += "\n";
}
console.log(triangleString);
PalesaDev
  • 67
  • 6
  • 2
    This might be better suited for https://codereview.stackexchange.com/ – 0stone0 Mar 24 '22 at 16:30
  • 3
    `const halftree = n => console.log(Array.from({ length: n }, (_, i) => ' '.repeat(n - i - 1) + '*'.repeat(i + 1)).join('\n'));` – ASDFGerte Mar 24 '22 at 16:31
  • 1
    Look at this https://stackoverflow.com/questions/68803096/how-to-draw-a-spruce-shape-triangle-in-javascript/68803253#68803253 – AlexSp3 Mar 24 '22 at 16:41
  • 1
    PS: this star printing task is typically used around christmas, and talks about christmas trees instead of "triangles", see e.g. a [question from five years ago](https://stackoverflow.com/questions/49875606/christmas-tree-in-javascript-using-stars) (linked because i have an ancient old answer in there, and could easily find it - there have been tons of these). Just in case you want to research other solutions. – ASDFGerte Mar 24 '22 at 16:41

1 Answers1

1

If you want to use only one loop, you can use repeat() method in ECMAScript6 or higher.

For Right triangle:

const line = 5;
let rightTriangle = "";
for (let l = 1; l <= line ; l++) {
    const indent = line-l;
    rightTriangle += `${" ".repeat(indent)}${"*".repeat(l)}${"\n"}`;
}
console.log(rightTriangle);

For Isosceles triangle:

const line = 5;
let isoscelesTriangle = "";
for (let l = 1; l <= line ; l++) {
    const indent = line - l;
    isoscelesTriangle += `${" ".repeat(indent)}${"*".repeat(2*l-1)}${"\n"}`;
}
console.log(isoscelesTriangle);
kelsny
  • 23,009
  • 3
  • 19
  • 48
mahooresorkh
  • 1,361
  • 2
  • 8
  • 16