Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Важно помнить, что ревью это про код, а не про автора,
- // цель - получить знания и опыт, цель обоюдная, как ревьювера
- // так и автора кода, все ошибаются и ревьювер тоже, идеального кода
- // не существует, попытки его создать - потеря времени, время -
- // невосполнимый ресурс в нашем мире, но кодить надо!) И кодить хорошо!
- // Сперва определимся с терминологией, чтобы все называть удобно и понятно:
- // отцентрованная штука - наш контекст, она в свою очередь состоит из
- // рядков звездочек (row or line), максимум их может быть 20, размеры рядков
- // (rowSizes or lineSizes) нечетные по условию,
- // иначе центровать сложнее, что ж предлагаю такие варианты:
- // starLineSizes - массив размеров строк звездочек, пробелы я бы не
- // складывал в массив , пробелы я бы высчитывал на месте ,при выводе
- // звездной отцентрированной штуки
- const MAX_LINE_NUM = 20; // это константа, она не может меняться, макс 20 рядков
- let starLineSizes = [] // масив для отцентрованной штуки "*"
- let lineSize = 0 // для записи в массив, я бы сказал для приема значения от пользователя
- let maxLineSize = 0 // самое большое число массива, в оговоренной терминологии найбольший рядок звездочек
- let q = [] // массив для отцентрованной штуки " "
- // хотя в задаче и не сказано проверять ввод пользователя, а доверить ему ввод только
- // нечетных значений, но раз уж вы такой недоверчивый (что и правильно,ввод пользователя
- // всегда нужно валидировать, никакой тестировщик такого не додумается наввводить)
- // то я бы сделал так:
- let lineCounter = 0; // счетчик количества вводимых чисел-размеров рядов штуки
- while((lineCounter < 20) && ((lineSize = +prompt("Enter odd number for line " + (lineCounter + 1))) !== 0)){
- //+prompt("Enter odd number for line " + (lineCounter + 1)) - для программиста с нуля начинается все, но юзеру
- //комфортнее с единицы, поэтому строки для него выводим с 1ой по 20ую, ну а массив с 0 по 19 индексы, конечно.
- if(lineSize % 2 !== 0){ //проверочка , ага
- starLineSizes[lineCounter++] = lineSize; // инкремент можно написать и в строке ниже, но так круче.)
- // важно помнить, что постинкремент, это когда ++ после имени переменной, он сперва возвращает
- // прежнее значение переменной, и сразу после этого увеличивает ее на 1, т.е. начнем мы с 0-вого индекса
- // а если бы написали ++lineCounter (преинкремент), то он сразу бы увеличенную переменную вернул, и
- //мы бы заполняли с индекса 1, а 0-вая ячейка пустовала бы, это была бы ошибка.
- } else{ // это по желанию, если юзер не отличает четное от нечетного, то врядли это поможет,
- alert('Only odd, please'); // но мы пытались, совесть наша чиста
- }
- }
- // Запись не парных чисел в массив "*"*/ комменты пишутся выше кода, //или рядом с ним, при этом блоки кода
- // можно разделять пустой строкой
- /*for(let z = 0; z < 20; z++){
- lineSize = +prompt("Number")
- if(lineSize % 2 != 0){starLineSizes[maxSize] = lineSize; maxSize++}
- } // Запись не парных чисел в массив "*"*/
- // проверка это норм, но она как-бы для себя, для пользователя она не нужна, он хочет сразу штуку!
- // а для отладки самое оно, хорошая проверочка.
- for(let z = 0; z < starLineSizes.length; z++){
- console.put(starLineSizes[z] + ", ")
- } // проверка записи в массив
- // Запись самого большого числа массива в maxLineSize
- for(let z = 0; z < starLineSizes.length; z++){
- if(maxLineSize < starLineSizes[z]) {
- maxLineSize = starLineSizes[z]
- }
- } // все ок.
- console.log("")
- // я бы не парился с пробельчиками
- for(let z = 0; z < starLineSizes.length; z++){
- let i
- i = (maxLineSize - starLineSizes[z]) / 2
- q[z] = i
- console.put(q[z] + ", ")
- } // запись ряда пробелов в массив " "
- console.log("")
- //вывод отцентрованной штуки
- for(let z = 0; z < starLineSizes.length; z++){
- for(let spaceNum = (maxLineSize - starLineSizes[z]) / 2;spaceNum > 0; spaceNum--){
- console.put(" ")
- }
- /*for(;starLineSizes[z] > 0; starLineSizes[z]--){ // при таком коде теряем данные массива
- console.put("*")
- }*/
- for(let starNum = starLineSizes[z]; starNum > 0; starNum--){ //введем переменную-счетчик
- console.put("*")
- }
- console.log("") // можно просто console.log()
- }
- //ваше решение вполне хорошее, так держать! Хорошего кода!
Add Comment
Please, Sign In to add comment