見て言って数列

「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("");
}

JSFiddleで試せます。

コメント

タイトルとURLをコピーしました