if,三項間演算子,除算なしでFizzBuzz

アバター
みょん
記事: 16
登録日時: 12年前
住所: 京都
連絡を取る:

if,三項間演算子,除算なしでFizzBuzz

投稿記事 by みょん » 12年前

こんな記事を見つけました。
if,三項演算子,%演算子,除算縛りでFizz Buzz[修正]

なかなか面白いなと思ったのですが、もう少しすっきり書けるのではないかという気がしたので適当に自分でもやって見ることにしました。
ただしコードの短縮のために%だけは使わせていただくことにしました。

とりあえずprintfの引数をもっと短くすることだけを考えて組みました。

CODE:

#include 
int main(){
    int i = 0;
    for(i=1;i<100;i++)
    {
        printf("%d\0 Fizz\0 FizzBuzz"+(!(i%3)*4+!(i%5)*14-!(i%15)*8),i);
        puts("");
    }
}
やっていることは単純で、3や5で割れるときに文字列の開始部分をずらして対処しています。
puts("");としているのは、分かりやすさを重視してのことです。

まぁこれでもFizzの部分が重複しているので美しくないといえば美しくないですね。

あとは"%d\0 FizzBuzz"として、15で割れないときに4文字だけ出力するという処理も考えたのですが、最終的にあんまり短くまとまらなかったので諦めました。
上のコード、まだイマイチだったので下の形にまとめ直します。

CODE:

main(i){main(i+1,printf("%d\0 Fizz\0 FizzBuzz"+(!(i%3)*4+!(i%5)*14-!(i%15)*8),i));}
余計な部分がなくなって、とてもスッキリ!

(よい子の皆さんは、(もちろんこんなコードでも動きますが)だからといって真似しないようにしてくださいね!)
最後に編集したユーザー みょん on 2012年11月28日(水) 11:23 [ 編集 2 回目 ]

コメントはまだありません。