Обычно мне нравится сосредотачиваться на основах информатики в своих сообщениях в блоге, но на этот раз я хотел провести вас через небольшое упражнение по JS, которое я нашел на CodeWars. Это Ката называется бормотанием, потому что оно похоже на бормотание. Данное описание короткое и простое:
This time no story, no theory. The examples below show you how to write functionaccum
: Examples:accum("abcd") -> "A-Bb-Ccc-Dddd" accum("RqaEzty") -> "R-Qq-Aaa-Eeee-Zzzzz-Tttttt-Yyyyyyy" accum("cwAt") -> "C-Ww-Aaa-Tttt"
The parameter of accum is a string which includes only letters froma..z
andA..Z
.
Таким образом, для этой задачи нашим вводом будет строка случайных букв, а вывод должен возвращать соответствующую букву, повторенную n раз, в зависимости от ее положения в строке. Кроме того, первый экземпляр буквы должен быть заглавным. Не слишком сложное, но приятное небольшое упражнение для практики манипулирования строками JS.
function accum(s) { let arr = [] for (let i = 0; i < s.length; i++) { arr.push(format(s[i], i + 1)) } return arr.join(‘-’) } function format(s, num) { let letter = s.toUpperCase() while (letter.length !== num) { letter += s.toLowerCase() } return letter }
Теперь давайте пройдемся по тому, что все это делает. Мы должны создать нашу основную функцию accum
со строкой в качестве аргумента. Теперь мы должны создать массив, чтобы иметь больший контроль над нашими манипуляциями, и перебрать каждый символ в строке. При циклическом просмотре нашей строки мы помещаем символ в новый массив, а затем, при необходимости, повторяем это до тех пор, пока не будет создано правильное количество итераций.
Во время цикла вы можете видеть, что мы также вызываем функцию format
. Это необходимо для обработки регистра букв, чтобы позиция [0]
была заглавной, а остальные — строчными. Форматирование необходимо выполнять отдельно для каждой соответствующей буквы во входных данных, поэтому это будет вызываться внутри цикла for. После правильного зацикливания теперь мы можем воссоединить символы в строке и добавить —
между каждым из соображений форматирования.
Конечный результат должен выглядеть так:
//input
console.log(accum('abcdefg'))
//output
“A-Bb-Ccc-Dddd-Eeeee-Ffffff-Ggggggg”
И это все, что нужно сделать. Не недооценивайте важность оттачивания CodeWars и LeetCode!