Files

2.8 KiB
Raw Permalink Blame History

id, title, challengeType, forumTopicId, dashedName
id title challengeType forumTopicId dashedName
5e6dd14797f5ce267c2f19d0 Послідовність "подивися-і-скажи" 5 385277 look-and-say-sequence

--description--

[Послідовність "подивися-і-скажи" ](https://en.wikipedia.org/wiki/Look and say sequence) - це рекурсивна послідовність певних чисел.

Визначення послідовності

  • Візьміть десяткове число
  • Подивітьсяна число, візуально групуючи цифри, які послідовно повторюються.
  • Назвіть число зліва направо, група за групою; скільки таких цифр можливо.
Це число стає наступним у послідовності.

Наприклад:

  • Починаючи з цифри 1, у вас є одна цифра 1, яка формує число 11
  • Починаючи з 11, ви маєте дві цифри 1. Тобто 21
  • Починаючи з числа 21, ви маєте одну цифру 2, і одну цифру 1. Тобто (12) (11), які стають 1211
  • Починаючи з числа 1211, ви маєте одну цифру 1, одну цифру 2, і дві цифри 1. Тобто (11)(12)(21), які стають 111221

--instructions--

Напишіть функцію, яка приймає рядок в якості параметра, обробляє його, і повертає результат.

--hints--

lookAndSay повинен бути функцією.

assert(typeof lookAndSay == 'function');

lookAndSay("1") повинен повернути рядок.

assert(typeof lookAndSay('1') == 'string');

lookAndSay("1") повинен повертати "11".

assert.equal(lookAndSay('1'), '11');

lookAndSay("11") повинен повертати "21".

assert.equal(lookAndSay('11'), '21');

lookAndSay("21") повинен повертати "1211".

assert.equal(lookAndSay('21'), '1211');

lookAndSay("1211") повинен повертати "111221".

assert.equal(lookAndSay('1211'), '111221');

lookAndSay("3542") повинен повертати "13151412".

assert.equal(lookAndSay('3542'), '13151412');

--seed--

--seed-contents--

function lookAndSay(str) {

}

--solutions--

function lookAndSay(str) {
    return str.replace(/(.)\1*/g, function(seq, p1) {
      return seq.length.toString() + p1;
    });
}