パスワードを忘れた? アカウント作成
493720 journal

Endowsの日記: 雑記 : FizzBuzz 2

日記 by Endows
FizzBuzz にいまさらチャレンジしてみる。
他に使える言語も無いのでいまさら C 言語。
どうせならと『変なモノ』狙いで、自力で可能なところまでソースコードを短くしてみた。
127Bytes。

#include<stdio.h>
int main(void){int i=1;for(;i<101;i++)printf(i%3?i%5?"%d\n":"Buzz\n":i%5?"Fizz\n":"FizzBuzz\n",i);return 0;}

色々削るともっと短くなるけど (#include と return と main の引数と戻り値の型ぐらいかな?) 個人的ポリシーにより残してます。

最短だとどんなコードになるのか気になる…。

-- 追記 --

もうちょっとだけ短くする。

#include<stdio.h>
int i;int main(void){for(;i++<100;)printf(i%3?i%5?"%d\n":"Buzz\n":i%5?"Fizz\n":"FizzBuzz\n",i);return 0;}

色々削る。

int i;main(){for(;i++<100;)printf(i%3?i%5?"%d\n":"Buzz\n":i%5?"Fizz\n":"FizzBuzz\n",i);}

これで 88Bytes 。これ以上は自力では無理か…?

-- 追記 6/11 22:00 --

もうちょっと短くなった。

int i;main(){for(;i++<100;)printf("%d\n\0Fizz\n\0FizzBuzz\n"+(14*!(i%5)^4*!(i%3)),i);}

86Bytes 。
この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
  • そのコードをベースにいじってみました。(85文字)
    int i;main(){for(;i++&lt;100;)printf(i%5?i%3?"%d\n":"Fizz\n":"FizzBuzz\n"+(i%3?4:0),i);}
    さらにいじってたらこんなコードに。むしろ長くなったけど、なかなか分かりにくい代物になったのでネタで紹介。(92文字)
    f(int n){n&&printf(n%5?n%3?"%d\n":"Fizz\n":"FizzBuzz\n"+!!(n%3)*4,n,f(n-1));}main(){f(100);}
    !!(n%3)*4は素直(?)な(n%3?4:0)と文字数が変わらないけど、ここまできたら分かりにくさ優先で。
    f(int n)は単にf(n)とするとnがintになってくれるかと思ってたけど、C99的にはf(n)int n;{...}と、nの宣言をしなければならず、かえって長くなりました。
    C89ではどうだったかなぁ。まあ、宣言不要だとしても全体で88文字。Endowzさんの例と変わらないわけですが。
    --
    巧妙に潜伏したバグは心霊現象と区別が付かない。
typodupeerror

「科学者は100%安全だと保証できないものは動かしてはならない」、科学者「えっ」、プログラマ「えっ」

読み込み中...