超今さらながら3の倍数と3の付く数字だけアホになるネタに興味がそそられたので(プログラミング的な意味で)、JavaScriptで再現してみます[via : 世界のナベアツ]。
var Count = 1;
CountChar = new String(Count);
var Is_Shout = 0;
if(Count % 3 == 0){
Is_Shout = 1;
}else{
for(i = CountChar.length; i != -1; i--){
if(CountChar.charAt(i) == 3){
Is_Shout = 1;
break;
}
}
}
※解説のために処理の流れを書いただけなので↑だけでは何も反応しません。実際にブラウザなどで動作を見たい場合はIs_Shout(フラグ)が1の場合に強調表示させるなどしてください。このページの末尾で実際に"3の倍数と3の付く数字だけアホになる"ようすをデモ公開しています。
上記のプログラムではまず数値が3の倍数の場合Is_Shoutを1にします(Is_Shoutをフラグと見立てる)。もしそうでない場合はcharAt関数で一文字ずつ抜き出して(1,000の位、100の位、10の位、といったように)、3という文字が現れ次第Is_Shoutフラグをたたせます。
ここでもうひとパターン。『3の付く数字』の判別方法を変えてみました。
var Count = 1;
CountChar = new String(Count);
var Is_Shout = 0;
if(Count % 3 == 0){
Is_Shout = 1;
}else{
i = Count;
while(i > 0){
if(i % 10 == 3){
Is_Shout = 1;
break;
}
i /= 10;
}
}
文字を抜き出していくのではなく、10で割ったときの余りが3であるかをすべてのケタについて試していきます。さきほどのパターンが数値を文字列として扱っているのに対し、あくまでこちらは数学的に試みました。
どちらのパターンがプログラムとして優れているのかは文系日曜プログラム野郎なのでさっぱりわかりません。ベンチマークをとってみて結果がわかった方、実際に試さなくてもプログラムを見ただけでどっちが早いかがわかる方、そもそももっと良い方法があるじゃねーかwという方はどうぞご指摘ください~。
さて以下にこの処理の流れを組み込んだデモンストレーションを設けました。毎秒カウントが進み、3の倍数と3の付く数字だけアホになります。実際にアホにさせる(サアッーン、とか読み上げる)わけではありませんが、まぁ視覚的に世界のナベアツを再現することは出来たと思います。
以下ソースコード。EchoCount関数の部分で先述の2つのコードを使っています。ちなみに放置すると危険かもしれないので最悪でも1,000万秒後に自動に止まるようにしています。やはり1万でストップさせることにしました。
var Count = 1;
var ModeSwitch = 1;
MyDate = new Date();
var StartUT = MyDate.getTime();
function EchoCount(){
Count++;
var ListLayer = document.getElementById('JS_TriTryList');
CountChar = new String(Count);
var Is_Shout = 0;
if(Count % 3 == 0){
Is_Shout = 1;
}else{
if(ModeSwitch){
for(i = CountChar.length; i != -1; i--){
if(CountChar.charAt(i) == 3){
Is_Shout = 1;
break;
}
}
}else{
i = Count;
while(i > 0){
if(i % 10 == 3){
Is_Shout = 1;
break;
}
i /= 10;
}
}
}
if(Is_Shout == 1){
CountChar = '<strong style="color:#cc0000;font-size:1.6em;">' + CountChar + '</strong>';
}
var li = document.createElement('li');
li.innerHTML = CountChar;
ListLayer.appendChild(li);
if(Count < 10000){
setTimeout("EchoCount()",1000);
}
}
これで時計とか作ったら面白いかもしれんね。
2008年09月06日 0時更新
| 日 | 月 | 火 | 水 | 木 | 金 | 土 |
|---|---|---|---|---|---|---|
| « 05月 | - | 07月 » | ||||
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |
| 29 | 30 | |||||
