Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- let i = +prompt('Сколько Звездочек?'); // не зовсім зрозуміло що це за розмір вводиться, по факту ширина нижньої гілки?
- let n = i - 1; // ім'я змінної теж не допомагає зрозуміти. Можна було вводити просто висоту ялинки)
- let b = '';
- let a = '*';
- if (i % 2 != 0) { // якщо ширина парна, або непарна можна відокремити умову, щоб не дублювати код, нижче є приклад.
- while (n > 0) {
- n -= 1
- b += '-'
- }
- let y = b
- while (i > 0) {
- if (i % 2 != 0) { // інверсія, як на мене , ускладнює, можна if (i % 2 === 1)
- console.log(y + a)
- y = (y.substring(0, y.length - 1))
- }
- i -= 1
- a += '*'
- }
- console.log(b + '*')
- } else {
- i = i - 1
- while (n > 0) {
- n -= 1
- b += '-'
- }
- let y = b
- while (i > 0) {
- if (i % 2 != 0) {
- console.log(y + a)
- y = (y.substring(0, y.length - 1))
- }
- i -= 1
- a += '*'
- }
- console.log(b + '*')
- }
- // вирівняв індентацію.
- // що я пропоную покращити в вашому варіанті:
- // прибираємо дублювання коду відокремлюючи перевірку парності.
- let i = +prompt('Сколько Звездочек?'); // ширина нижньої гілки
- let n = i - 1;
- let b = '';
- let a = '*';
- if (i % 2 === 0) { // якщо ширина парна, зменшуємо
- i = i - 1;
- }
- while (n > 0) {
- n -= 1
- b += '-'
- }
- let y = b
- while (i > 0) {
- if (i % 2 === 1) {
- console.log(y + a)
- y = y.substring(0, y.length - 1)
- }
- i -= 1
- a += '*'
- }
- console.log(b + '*')
- // потім перейменував би змінні
- let lowBranch = +prompt('Сколько Звездочек?'); // ширина нижньої гілки
- let upperRowSpaceNum = lowBranch - 1;
- let spaceLine = '';
- let starLine = '*';
- if (lowBranch % 2 === 0) {
- lowBranch = lowBranch - 1;
- }
- while (upperRowSpaceNum > 0) {
- upperRowSpaceNum -= 1
- spaceLine += '-'
- }
- let footLine = spaceLine + '*'
- while (lowBranch > 0) {
- if (lowBranch % 2 === 1) { // рядок переводите кожну другу ітерацію, можна просто зменшити їх кількість
- console.log(spaceLine + starLine)
- spaceLine = spaceLine.substring(0, spaceLine.length - 1)
- }
- lowBranch -= 1
- starLine += '*'
- }
- console.log(footLine)
- // зменшуємо кількість ітерацій:
- let lowBranch = +prompt('Сколько Звездочек?'); // ширина нижньої гілки
- let upperRowSpaceNum = lowBranch - 1;
- let spaceLine = '';
- let starLine = '*';
- if (lowBranch % 2 === 0) { // якщо ширина парна, зменшуємо
- lowBranch = lowBranch - 1;
- }
- while (upperRowSpaceNum > 0) {
- upperRowSpaceNum -= 1
- spaceLine += '-'
- }
- let footLine = spaceLine + '*'
- lowBranch = lowBranch / 2; // вдвічи зменшили ітерації
- while (lowBranch > 0) {
- console.log(spaceLine + starLine)
- spaceLine = spaceLine.substring(0, spaceLine.length - 1)
- lowBranch -= 1
- starLine += '**'
- }
- console.log(footLine)
- // доволі екзотичне рішення, минулого разу я пропонував вам рішення з цтиклами, мабуть вам воно не здалося таким, чи я
- // плохо його разрекламував.)) Нижче код ялинки за допомогою циклів, схожий на те, що я пропонував, можливо візуальним
- // порівнянням зможу вас переманити на сторону циклів від сабстрінгу.) Тому що сабстрінг це теж цикл, який створює якусь
- // строку з символів іншої, перебираючи її послідовно.
- // Коротше тепер я прошу вас порев'ювати мій код виводу ялинки заданої висоти:
- let height = +prompt('Enter tree height:'); // це висота без ніжки
- let row = 0; // рядки з нулевого до висоти
- let spaceNum = height - 1; // пробілів до верхньої зірки пів нижньої (ширшої) гілки, а вона дорівнює (висота * 2 - 1)
- // з кожним рядком буде зменшуватися -= 1
- let starNum = 1; // кількість зірок на верхівці, з кожним рядком буде збільшуватися += 2
- let i = 0; // просто лічильник
- while (row < height) { // перебираємо рядки від 0 до висоти ялинки
- // виводимо пробіли
- i = 0; // обнулимо лічильник
- while (i < spaceNum) {
- console.put(' '); // можна пробіл замість тире
- i++;
- }
- // виводимо зірочки
- i = 0; // обнулимо лічильник
- while (i < starNum) {
- console.put('*');
- i++;
- }
- console.log(); // просто переводимо рядок
- spaceNum -= 1; // готуємо кількість пробілів у наступному рядку
- starNum += 2; // готуємо кількість зірок у наступному рядку
- row++;
- }
- // виводимо ніжку
- for (let i = 0; i < height - 1; i++) { // знов до пів нижньої гілки
- console.put(' ');
- }
- console.put('*');
- // тема цикли дуже важлива, важливіша ніж сабстрінг або ріпіт або інші методи, які "під капотом" все ті ж цикли.
- // ось ще одне рішення без явних циклів https://pastebin.com/cnh73C0h
- // але не завжди є якиясь стан, з якого можна отримати інший, як ви вирізаєте зі строки нову, а цикли дозволяють
- // писати гнучкіші рішення - https://pastebin.com/nDQLNKg2
- // Гарного коду в 2021 році!)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement