« 無理なく続けられる年収10倍アップ勉強法 | トップページ | インターバルタイマ »

2007年5月16日 (水)

FizzBuzz

流行のFizzBuzzやってみました。私のベストスコアは84↓です

main(i){for(;i<101;i++)printf("%s%s%.d\n",i%3?"":"Fizz",i%5?"":"Buzz",i%3*i%5?i:0);}

Webで調べつつやったけど^^;これ以上縮まらない(´・ω・`)。ポイントは

  • includeなんかしない
  • if文の代わりに三項演算子
  • for文でブロックのための中括弧は使わない
  • argcが1になるのを利用。変数名はi。変数の宣言と初期化を省く
  • 倍数の判定に==を使わない(次に「i%3<1」ってやってたけど、それもやめた)
  • 「15の倍数の場合に"FizzBuzz"とする」を明示的に書かない
  • "Fizz","Buzz"系の文字列を出力するときと、数値を出力するときでprintf()を分けない%.dがミソ)

よくわからないのですが、さらに短くするためには・・・

  • "Fizz"と"Buzz"の"zz"を共通化する?
  • printfを使わない?
  • 数値を表示するための条件を簡素化する?
  • "%s%s"を簡素化する?
  • for文を使わない?
  • bit演算を活用する?
  • asciiコードを活用する?

という方向性があるのかなぁ。。。世界記録は73バイト。大きな発想の転換が要るのか、はたまた地道な作業が要るのか、超テクニカルな技が要るのか。。。

|

« 無理なく続けられる年収10倍アップ勉強法 | トップページ | インターバルタイマ »

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/207693/15097944

この記事へのトラックバック一覧です: FizzBuzz:

« 無理なく続けられる年収10倍アップ勉強法 | トップページ | インターバルタイマ »