--- id: 5e6dd14797f5ce267c2f19d0 title: 読み上げ数列 challengeType: 5 forumTopicId: 385277 dashedName: look-and-say-sequence --- # --description-- [読み上げ数列](https://en.wikipedia.org/wiki/Look and say sequence) は、再帰的に定義された数列です。 数列の定義 これが数列の次の数値になります。 以下に例を示します。 # --instructions-- 文字列をパラメータとして取る関数を記述し、それを実行して結果の文字列を返してください。 # --hints-- `lookAndSay` は関数とします。 ```js assert(typeof lookAndSay == 'function'); ``` `lookAndSay("1")` は文字列を返す必要があります。 ```js assert(typeof lookAndSay('1') == 'string'); ``` `lookAndSay("1")` は `"11"` を返す必要があります。 ```js assert.equal(lookAndSay('1'), '11'); ``` `lookAndSay("11")` は `"21"` を返す必要があります。 ```js assert.equal(lookAndSay('11'), '21'); ``` `lookAndSay("21")` は `"1211"` を返す必要があります。 ```js assert.equal(lookAndSay('21'), '1211'); ``` `lookAndSay("1211")` は `"111221"` を返す必要があります。 ```js assert.equal(lookAndSay('1211'), '111221'); ``` `lookAndSay("3542")` は `"13151412"` を返す必要があります。 ```js assert.equal(lookAndSay('3542'), '13151412'); ``` # --seed-- ## --seed-contents-- ```js function lookAndSay(str) { } ``` # --solutions-- ```js function lookAndSay(str) { return str.replace(/(.)\1*/g, function(seq, p1) { return seq.length.toString() + p1; }); } ```