「Look-and-say sequence」というのがあります。日本語だと「見て言って数列」だそうです。
1, 11, 21, 1211, 111221, 312211, …
という数列です。規則性が分かるでしょうか。
まず 1 があります。「1」です。
次にこれを 1個の1 と表現します。「11」になります。
同様に 2個の1 と表します。「21」です。
これを 1個の2 1個の1 とします。「1211」になります。
今度は 1個の1 1個の2 2個の1 と表します。「111221」になります。
3個の1 2個の2 1個の1 と表します。「312211」になります。
「Look-and-say sequence – Wikipedia」に詳しく書かれています。
いろいろな性質があるようですが、簡単なところだと、1,2,3の三種類の数字しか登場しない点が挙げられます。また右端は1になるようです。
JavaScriptで試してみました。
var x, i;
x = "1";
console.log(x);
for(i = 0; i < 20; i++) {
x = miteitte(x);
console.log(x);
}
function miteitte(x) {
//Look-and-say sequence
var pieces, fig, re, m, num;
pieces = [];
while(x !== "") {
fig = x.substr(0, 1);
re = new RegExp(fig + "+");
m = x.match(re);
num = m[0].length.toString(10);
pieces.push(num + fig);
x = x.substr(num);
}
return pieces.join("");
}
x = "1";
console.log(x);
for(i = 0; i < 20; i++) {
x = miteitte(x);
console.log(x);
}
function miteitte(x) {
//Look-and-say sequence
var pieces, fig, re, m, num;
pieces = [];
while(x !== "") {
fig = x.substr(0, 1);
re = new RegExp(fig + "+");
m = x.match(re);
num = m[0].length.toString(10);
pieces.push(num + fig);
x = x.substr(num);
}
return pieces.join("");
}
JSFiddleで試せます。
コメント