Answer
t.me/js_testОтвет:
function triangle(size, direction) {
const rowSize = ["top", "bottom"].includes(direction) ? size : size + 2;
const colSize = ["right", "left"].includes(direction) ? size : size + 2;
const result = Array.from({ length: rowSize }, () =>
Array.from({ length: colSize }, () => " ")
);
for (let i = 0; i < size; i++) {
const symbolsCount = size + 2 - i * 2;
for (let j = 0; j < size + 2; j++) {
if (i > j || j - i >= symbolsCount) {
continue;
}
switch (direction) {
case "top":
result[size - i - 1][j] = "*";
break;
case "bottom":
result[i][j] = "*";
break;
case "right":
result[j][i] = "*";
break;
case "left":
result[j][size - i - 1] = "*";
break;
}
}
}
return result.map((r) => r.join("")).join("\n");
}
Объяснение:
Основание нашего треугольника всегда на две клетки больше чем его высота, поэтому мы определяем две переменные rowSize и colSize для того чтобы с помощью метода Array.from создать матрицу правильного размера. Далее создаём два цикла, считаем количество звёзд которые должны быть вставлены в матрицу на каждом шаге (symbolsCount), с помощью такой проверки (i > j || j - i >= symbolsCount) пропускаем места где звёзд быть не должно. Затем с помощью оператора switсh вставляем звёзды в нужные места в зависимости от направление треугольника. В самом конце соединяем всё в одну строку и возвращаем.
Код для проверки:
function triangle(size, direction) {
const rowSize = ["top", "bottom"].includes(direction) ? size : size + 2;
const colSize = ["right", "left"].includes(direction) ? size : size + 2;
const result = Array.from({ length: rowSize }, () =>
Array.from({ length: colSize }, () => " ")
);
for (let i = 0; i < size; i++) {
const symbolsCount = size + 2 - i * 2;
for (let j = 0; j < size + 2; j++) {
if (i > j || j - i >= symbolsCount) {
continue;
}
switch (direction) {
case "top":
result[size - i - 1][j] = "*";
break;
case "bottom":
result[i][j] = "*";
break;
case "right":
result[j][i] = "*";
break;
case "left":
result[j][size - i - 1] = "*";
break;
}
}
}
return result.map((r) => r.join("")).join("\n");
}
console.log(triangle(3, "left"));
/*
*
**
***
**
*
*/
console.log(triangle(5, "bottom"));
/*
*******
*****
***
*
*/
console.log(triangle(3, "right"));
/*
*
**
***
**
*
*/
console.log(triangle(5, "top"));
/*
*
***
*****
*******
*/