同じ文字列のn回繰り返しを作る「最速」の方法

パズルっぽくておもしろかったのでやってみた。と、別のところにも書いたのだけど、あそこじゃあ反応が薄いので、見てる人が多そうなこっちで聞いてみる。

function(s,n){
  var q = '';
  while(n){
    if(n%2) q += s;
    s += s;
    n >>= 1;
  }
  return q;
}
javascript:alert((function(s,n){var q='';while(n){if(n%2)q+=s;s+=s;n>>=1;}return q;})('hoge',10))
//=> hogehogehogehogehogehogehogehogehogehoge

速さのベンチはこっちの一番下にある data:uri をアドレス欄に入れてみたらいいと思います。

もっと良い方法を知ってる人は教えてください。


小飼弾さんも同じこと書いてるや。

n が負の時におかしくなるから「for(n *= n > 0; n; n >>= 1, str += str) if(n & 1) result += str;」かなぁ

はてなブックマーク - 404 Blog Not Found:アルゴリズム - 同じ文字列のn回繰り返しをlog n回で作る方法

ほんとだ。上に書いた関数で n に負の値を渡すと立派なブラクラになるので注意。