Files
2022-01-20 20:30:18 +01:00

2.4 KiB

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) は、再帰的に定義された数列です。

数列の定義

  • 10進数の数値を 1 つ選びます
  • 数字を見て、同じ数字の連続した並びのグループを視覚的に把握します
  • 番号を左から右へグループごとに、数字が何個あるかと、続けてそのグループの数字を読み上げます。
これが数列の次の数値になります。

以下に例を示します。

  • 数値 1 から始めると、1 個の 1 で 11 になります
  • 11 から始めると、2 個の1。 つまり、21になります
  • 21から始めると、 1 個の 2、1 個の 1。 つまり、(12)(11) で 1211 になります
  • 1211から始めると、 1 個の 1、 1 個の 2、そして 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;
    });
}