FizzBuzz
2011-01-22


よくCSSを参考にさせて頂いているGhostpiaにFizzBuzz問題が取り上げられていたので、JavaScriptがちょっぴり扱えるようになったしでやってみた。

どうしてプログラマに・・・プログラムが書けないのか? 1から100までの数をプリントするプログラムを書け。ただし3の倍数のときは数の代わりに「Fizz」と、5の倍数のときは「Buzz」とプリントし、3と5両方の倍数の場合には「FizzBuzz」とプリントすること。

ちゃんとしたプログラマであれば、これを実行するプログラムを2分とかからずに紙に書き出せるはずだ。怖い事実を聞きたい? コンピュータサイエンス学科卒業生の過半数にはそれができないのだ。自称上級プログラマが答えを書くのに10-15分もかかっているのを見たこともある。

余談ですが、10-15分もかかっているというのは驚くことないと思う。だってCOBOLで記述するなら15分は早い方だw(まあ、COBOLじゃなかったんだろうけど、環境句とデータ句書くだけで10分はかかりそう^^;)

とりあえず書いてみよう……せっかくだからCopy URL Lite+で使い方を覚えた三項演算子にしてみよう……できた!

var i=0;
while(i++ < 100){
  document.write(
    i%15==0 ? 'FizzBuzz' :
    i%3==0 ? 'Fizz' :
    i%5==0 ? 'Buzz' : i
  );
}

時間は……2分27秒……orz
実行してみる

12Fizz4BuzzFizz78FizzBuzz11Fizz1314FizzBuzz1617Fizz19BuzzFizz2223FizzBuzz……

ダメだダメだ!修正だ!(T_T)
ついでに一文にしよう……

for(var i=1;i <= 100;i++)
  document.write(
    (i%15==0 ? 'FizzBuzz' :
     i%3==0 ? 'Fizz' :
     i%5==0 ? 'Buzz' : i)
   +(i%10==0 ? '<br>' : ' ')
  );

実行結果

1 2 Fizz 4 Buzz Fizz 7 8 Fizz Buzz
11 Fizz 13 14 FizzBuzz 16 17 Fizz 19 Buzz
Fizz 22 23 Fizz Buzz 26 Fizz 28 29 FizzBuzz
31 32 Fizz 34 Buzz Fizz 37 38 Fizz Buzz
41 Fizz 43 44 FizzBuzz 46 47 Fizz 49 Buzz
Fizz 52 53 Fizz Buzz 56 Fizz 58 59 FizzBuzz
61 62 Fizz 64 Buzz Fizz 67 68 Fizz Buzz
71 Fizz 73 74 FizzBuzz 76 77 Fizz 79 Buzz
Fizz 82 83 Fizz Buzz 86 Fizz 88 89 FizzBuzz
91 92 Fizz 94 Buzz Fizz 97 98 Fizz Buzz

+26秒、合計3分3秒。
puppetは面接を受ける資格がもらえないようです。_ノ乙(、ン、)


いちいちHTMLに書くの面倒だなと思ってエラーコンソールに出力する方法を検索したら

くふぉーるSEブログ  Firefox コード例:Firefoxのエラーコンソールにログを出力する var logs = Components.classes["@mozilla.org/consoleservice;1"] .getService(Components.interfaces.nsIConsoleService);
logs.logStringMessage("普通のログです");

でいいらしい。
ということで、Firefoxのエラーコンソールに以下貼り付けると直に実行できます。

var logs = Components.classes["@mozilla.org/consoleservice;1"].getService(Components.interfaces.nsIConsoleService);
for(var i=1;i <= 100;i++)
  logs.logStringMessage(
    i%15==0 ? 'FizzBuzz' :
    i%3==0 ? 'Fizz' :
    i%5==0 ? 'Buzz' : i
  );

ああ、今日は洗濯物がよく乾きそうだ……(逃避中)

−追記−

短いコード
Fizz-Buzz in JavaScript: Days on the Moon
for(i=0;i++<100;)print((i%3?"":"Fizz")+(i%5?"":"Buzz")||i)

最短例
ふぃづばづ - Cozy Ozy
for(i=0;i++<100;print(i%5?a||i:a+"Buzz"))a=i%3?"":"Fizz"

レコード
anarchy golf - FizzBuzz

a||iがどんな値をとるか知る気がないと一生かかってもたどりつけないなぁ。

document.writelnを使えば、+(i%10==0 ? '<br>' : ' ')はいらなかったのか。orz

[Firefox]
[Script]
[PC]

コメント(全1件)
コメントをする


記事を書く
powered by ASAHIネット