Advertisement
Timkor

subzeroWins

Jan 1st, 2021 (edited)
285
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. let i = +prompt('Сколько Звездочек?'); // не зовсім зрозуміло що це за розмір вводиться, по факту ширина нижньої гілки?
  2. let n = i - 1; // ім'я змінної теж не допомагає зрозуміти. Можна було вводити просто висоту ялинки)
  3. let b = '';
  4. let a = '*';
  5. if (i % 2 != 0) { // якщо ширина парна, або непарна можна відокремити умову, щоб не дублювати код, нижче є приклад.
  6.     while (n > 0) {
  7.         n -= 1
  8.         b += '-'
  9.     }
  10.     let y = b
  11.     while (i > 0) {
  12.         if (i % 2 != 0) { // інверсія, як на мене , ускладнює, можна if (i % 2 === 1)
  13.             console.log(y + a)
  14.             y = (y.substring(0, y.length - 1))
  15.         }
  16.         i -= 1
  17.         a += '*'
  18.     }
  19.     console.log(b + '*')
  20. } else {
  21.     i = i - 1
  22.     while (n > 0) {
  23.         n -= 1
  24.         b += '-'
  25.     }
  26.     let y = b
  27.     while (i > 0) {
  28.         if (i % 2 != 0) {
  29.             console.log(y + a)
  30.             y = (y.substring(0, y.length - 1))
  31.         }
  32.         i -= 1
  33.         a += '*'
  34.     }
  35.     console.log(b + '*')
  36. }
  37. // вирівняв індентацію.
  38. // що я пропоную покращити в вашому варіанті:
  39. // прибираємо дублювання коду відокремлюючи перевірку парності.
  40.  
  41. let i = +prompt('Сколько Звездочек?'); // ширина нижньої гілки
  42. let n = i - 1;
  43. let b = '';
  44. let a = '*';
  45. if (i % 2 === 0) {  // якщо ширина парна, зменшуємо
  46.     i = i - 1;
  47. }
  48. while (n > 0) {
  49.     n -= 1
  50.     b += '-'
  51. }
  52. let y = b
  53. while (i > 0) {
  54.     if (i % 2 === 1) {
  55.         console.log(y + a)
  56.         y = y.substring(0, y.length - 1)
  57.     }
  58.     i -= 1
  59.     a += '*'
  60. }
  61. console.log(b + '*')
  62.  
  63.  
  64.  
  65. //  потім перейменував  би змінні
  66. let lowBranch = +prompt('Сколько Звездочек?'); // ширина нижньої гілки
  67. let upperRowSpaceNum = lowBranch - 1;
  68. let spaceLine = '';
  69. let starLine = '*';
  70. if (lowBranch % 2 === 0) {
  71.     lowBranch = lowBranch - 1;
  72. }
  73. while (upperRowSpaceNum > 0) {
  74.     upperRowSpaceNum -= 1
  75.     spaceLine += '-'
  76. }
  77. let footLine  = spaceLine + '*'
  78. while (lowBranch > 0) {
  79.     if (lowBranch % 2 === 1) { // рядок переводите кожну другу ітерацію, можна просто зменшити їх кількість
  80.         console.log(spaceLine + starLine)
  81.         spaceLine = spaceLine.substring(0, spaceLine.length - 1)
  82.     }
  83.     lowBranch -= 1
  84.     starLine += '*'
  85. }
  86. console.log(footLine)
  87.  
  88.  
  89.  
  90.  
  91. // зменшуємо кількість ітерацій:
  92. let lowBranch = +prompt('Сколько Звездочек?'); // ширина нижньої гілки
  93. let upperRowSpaceNum = lowBranch - 1;
  94. let spaceLine = '';
  95. let starLine = '*';
  96. if (lowBranch % 2 === 0) {  // якщо ширина парна, зменшуємо
  97.     lowBranch = lowBranch - 1;
  98. }
  99. while (upperRowSpaceNum > 0) {
  100.     upperRowSpaceNum -= 1
  101.     spaceLine += '-'
  102. }
  103. let footLine  = spaceLine + '*'
  104. lowBranch = lowBranch / 2; // вдвічи зменшили ітерації
  105. while (lowBranch > 0) {
  106.    
  107.     console.log(spaceLine + starLine)
  108.     spaceLine = spaceLine.substring(0, spaceLine.length - 1)
  109.    
  110.     lowBranch -= 1
  111.     starLine += '**'
  112. }
  113. console.log(footLine)
  114.  
  115. // доволі екзотичне рішення, минулого разу я пропонував вам рішення з цтиклами, мабуть вам воно не здалося таким, чи я
  116. // плохо його разрекламував.)) Нижче код ялинки за допомогою циклів, схожий на те, що я пропонував, можливо візуальним
  117. // порівнянням зможу вас переманити на сторону циклів від сабстрінгу.) Тому що сабстрінг це теж цикл, який створює якусь
  118. // строку з символів іншої, перебираючи її послідовно.
  119. // Коротше тепер я прошу вас порев'ювати мій код виводу ялинки заданої висоти:
  120.  
  121. let height = +prompt('Enter tree height:'); // це висота без ніжки
  122. let row = 0; // рядки з нулевого до висоти
  123. let spaceNum = height - 1; // пробілів до верхньої зірки пів нижньої (ширшої) гілки, а вона дорівнює (висота * 2 - 1)
  124.                            // з кожним рядком буде зменшуватися -= 1
  125. let starNum = 1; // кількість зірок на верхівці, з кожним рядком буде збільшуватися += 2
  126. let i = 0; // просто лічильник
  127.  
  128. while (row < height) { // перебираємо рядки від 0 до висоти ялинки
  129.    
  130.     // виводимо пробіли
  131.     i = 0; // обнулимо лічильник
  132.     while (i < spaceNum) {
  133.         console.put(' '); // можна пробіл замість тире
  134.         i++;
  135.     }
  136.  
  137.     // виводимо зірочки
  138.     i = 0; // обнулимо лічильник
  139.     while (i < starNum) {
  140.         console.put('*');
  141.         i++;
  142.     }
  143.     console.log(); // просто переводимо рядок
  144.     spaceNum -= 1; // готуємо кількість пробілів у наступному рядку
  145.     starNum += 2; // готуємо кількість зірок у наступному рядку
  146.     row++;
  147. }
  148. // виводимо ніжку
  149. for (let i = 0; i < height - 1; i++) { // знов до пів нижньої гілки
  150.     console.put(' ');
  151. }
  152. console.put('*');
  153.  
  154. // тема цикли дуже важлива, важливіша ніж сабстрінг або ріпіт або інші методи, які "під капотом" все ті ж цикли.
  155. // ось ще одне рішення без явних циклів  https://pastebin.com/cnh73C0h
  156. // але не завжди є якиясь стан, з якого можна отримати інший, як ви вирізаєте зі строки нову, а цикли дозволяють
  157. // писати гнучкіші рішення - https://pastebin.com/nDQLNKg2
  158.  
  159.  
  160.  
  161. // Гарного коду в 2021 році!)
  162.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement