Timkor

reviewCenteredStuffFixed

Aug 7th, 2020 (edited)
185
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // Важно помнить, что ревью это про код, а не про автора,
  2. // цель  - получить знания и опыт, цель обоюдная, как ревьювера
  3. // так и автора кода, все ошибаются и ревьювер тоже, идеального кода
  4. // не существует, попытки его создать - потеря времени, время -
  5. // невосполнимый ресурс в нашем мире, но кодить надо!) И кодить хорошо!
  6.  
  7.  
  8. // Сперва определимся с терминологией, чтобы все называть удобно и понятно:
  9. // отцентрованная штука  - наш контекст, она в свою очередь состоит из
  10. // рядков звездочек (row or line), максимум их может быть 20, размеры рядков
  11. // (rowSizes or lineSizes) нечетные по условию,
  12. // иначе центровать сложнее, что ж предлагаю такие варианты:
  13. // starLineSizes - массив размеров строк звездочек, пробелы я бы не
  14. // складывал в массив , пробелы я бы высчитывал на месте ,при выводе
  15. // звездной отцентрированной штуки
  16. const MAX_LINE_NUM = 20; // это константа, она не может меняться, макс 20 рядков
  17. let starLineSizes = [] // масив для отцентрованной штуки "*"
  18. let lineSize = 0 // для записи в массив, я бы сказал для приема значения от пользователя
  19. let maxLineSize = 0 // самое большое число массива, в оговоренной терминологии найбольший рядок звездочек
  20. let q = [] // массив для отцентрованной штуки " "
  21. // хотя в задаче и не сказано проверять ввод пользователя, а доверить ему ввод только
  22. // нечетных значений, но раз уж вы такой недоверчивый (что и правильно,ввод пользователя
  23. // всегда нужно валидировать, никакой тестировщик такого не додумается наввводить)
  24. // то я бы сделал так:
  25. let lineCounter = 0; // счетчик количества вводимых чисел-размеров рядов штуки
  26. while((lineCounter < 20) && ((lineSize = +prompt("Enter odd number for line " + (lineCounter + 1))) !== 0)){
  27.     //+prompt("Enter odd number for line " + (lineCounter + 1)) - для программиста с нуля начинается все, но юзеру
  28.     //комфортнее с единицы, поэтому строки для него выводим с 1ой по 20ую, ну а массив с 0 по 19 индексы, конечно.
  29.     if(lineSize % 2 !== 0){ //проверочка , ага
  30.         starLineSizes[lineCounter++] = lineSize; // инкремент можно написать и в строке ниже, но так круче.)
  31.         // важно помнить, что постинкремент, это когда ++ после имени переменной, он сперва возвращает
  32.         // прежнее значение переменной, и сразу после этого увеличивает ее на 1, т.е. начнем мы с 0-вого индекса
  33.         // а если бы написали ++lineCounter (преинкремент), то он сразу бы увеличенную переменную вернул, и
  34.         //мы бы заполняли с индекса 1, а 0-вая ячейка пустовала бы, это была бы ошибка.
  35.     } else{ // это по желанию, если юзер не отличает четное от нечетного, то врядли это поможет,
  36.         alert('Only odd, please'); // но мы пытались, совесть наша чиста
  37.     }
  38. }
  39.  
  40. // Запись не парных чисел в массив "*"*/ комменты пишутся выше кода, //или рядом с ним, при этом блоки кода
  41. // можно разделять пустой строкой
  42. /*for(let z = 0; z < 20; z++){
  43.     lineSize = +prompt("Number")
  44.     if(lineSize % 2 != 0){starLineSizes[maxSize] = lineSize; maxSize++}
  45. } // Запись не парных чисел в массив "*"*/
  46.  
  47. // проверка это норм, но она как-бы для себя, для пользователя она не нужна, он хочет сразу штуку!
  48. // а для отладки самое оно, хорошая проверочка.
  49. for(let z = 0; z < starLineSizes.length; z++){
  50.     console.put(starLineSizes[z] + ", ")
  51. } // проверка записи в массив
  52. // Запись самого большого числа массива в maxLineSize
  53. for(let z = 0; z < starLineSizes.length; z++){
  54.     if(maxLineSize < starLineSizes[z]) {
  55.         maxLineSize = starLineSizes[z]
  56.     }
  57. } // все ок.
  58. console.log("")
  59.  
  60. // я бы не парился с пробельчиками
  61. for(let z = 0; z < starLineSizes.length; z++){
  62.     let i
  63.     i = (maxLineSize - starLineSizes[z]) / 2
  64.     q[z] = i
  65.     console.put(q[z] + ", ")
  66. } // запись ряда пробелов в массив " "
  67. console.log("")
  68.  
  69. //вывод отцентрованной штуки
  70. for(let z = 0; z < starLineSizes.length; z++){
  71.     for(let spaceNum = (maxLineSize - starLineSizes[z]) / 2;spaceNum > 0; spaceNum--){
  72.         console.put(" ")
  73.     }
  74.     /*for(;starLineSizes[z] > 0; starLineSizes[z]--){ // при таком коде теряем данные массива
  75.         console.put("*")
  76.     }*/
  77.     for(let starNum = starLineSizes[z]; starNum > 0; starNum--){ //введем переменную-счетчик
  78.         console.put("*")
  79.     }
  80.     console.log("") // можно просто console.log()
  81. }
  82. //ваше решение вполне хорошее, так держать! Хорошего кода!
  83.  
Add Comment
Please, Sign In to add comment