素人がプログラミングを勉強していたブログ

プログラミング、セキュリティ、英語、Webなどのブログ since 2008

連絡先: すかいぷ:javascripter_  か javascripter あっと tsukkun.net skypeのほうがいいです

コラッツの問題のブックマークレット

コラッツの問題 - Wikipediaのアルゴリズムにしたがってひたすら計算をする。

javascript:for(var x=0;x<20;x++)for(var y=0;y<3;y++)(function(){var span=document.createElement('span');with(span.style){position='fixed';top=x*20+'px';left=y*160+'px';fontWeight='bold'};document.body.appendChild(span);var n=Math.floor(Math.random()*1e16);(function(){span.textContent=n;n%2?n=n*3+1:n/=2;if(n-1)setTimeout(arguments.callee,0);else {span.textContent=1;span.style.color='red';setTimeout(function(){span.parentNode.removeChild(span)},1000)};})();})()

初めから一行で書いたのでインデント付きのソースはない。
innerHTMLよりtextContentのほうが多少速い、n>>1よりn/2のほうが多少速い、n&1よりn%2のほうが多少速い。計測はFirefox3。
関数の実行中はブラウザの再描画が行われないのでsetTimeoutで呼ばないと駄目。