Задать вопрос
@vtaeke

Как повторить каждый символ, чтобы количество повторений было равно его позиции в строке?

Напишите функцию accum, которая преобразует строку, как в примерах:

accum("abcd") -> "A-Bb-Ccc-Dddd"
accum("RqaEzty") -> "R-Qq-Aaa-Eeee-Zzzzz-Tttttt-Yyyyyyy"
accum("cwAt") -> "C-Ww-Aaa-Tttt"

Понимаю суть задания, но не понимаю как реализовать. Пока что пытаюсь просто хотя бы вызвать повтор, без верхнего и нижнего регистра и разделения строки:

const  accum = (str) => {
  let res = '';

  for (i = 1; i < str.length; i++) {
    if (i == str.length) {
      res = str[i] * i;
    }
   return res;
}
}

Можете подтолкнуть в какую сторону мне смотреть? Потому что я не понимаю как реализовать данный алгоритм действия.
  • Вопрос задан
  • 1205 просмотров
Подписаться 1 Средний Комментировать
Решения вопроса 3
0xD34F
@0xD34F Куратор тега JavaScript
const xxx = str => Array
  .from(str, (n, i) => n.toUpperCase() + n.toLowerCase().repeat(i))
  .join('-');

или

const xxx = str => str
  .toUpperCase()
  .split('')
  .reduce((acc, n, i) => `${acc}${i ? '-' : ''}${n}${Array(-~i).join(n.toLowerCase())}`, '');

или

const xxx = str => str
  .toUpperCase()
  .replace(/(?<=.)./g, (m, i) => '-'.concat(m, ...Array(i).fill(m.toLowerCase())));
Ответ написан
Комментировать
delphinpro
@delphinpro Куратор тега JavaScript
frontend developer
function accum(str) {
    const letters = str.split('');
    let strings = [];
    for(let pos = 0; pos < letters.length; pos++) {
        let s = '';
        let letter = letters[pos].toLowerCase();
        for (let i = 0; i < pos; i++) {
            s += letter;
        }
        s = letter.toUpperCase() + s;
        strings.push(s);
    }
    return strings.join('-');
}
Ответ написан
sergiks
@sergiks Куратор тега JavaScript
♬♬
Каждую исходную букву нужно один раз сделать заглавной ('a').toUppercase() // "A" и добавить хвост из повторов строчной после ('A').toLowerCase() // "a".
Метод строки repeat() повторит нужное число раз букву в нижнем регистре: ("x").repeat(3) // "xxx"

Метод массива map(func) вторым аргументом передаёт в функцию внутри индекс элемента: 0, 1, 2, ...

Из строки можно получить массив букв, например, через spread syntax (оператор расширения): [ ...'acdc' ] // [ "a", "c", "d", "c" ]

Итого, решение:
const accum = alph => [...alph]
  .map((c, i) => c.toUpperCase() + c.toLowerCase().repeat(i))
  .join('-');
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы