2.4 KiB
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;
});
}