2010年4月11日日曜日

FizzBuzz続き

後輩たちのコードをいくつか貼っておきます。



この記事は一つ前の記事の続きです。

後輩たちにコードを書かせる際に、私はいくつか制限を課しました。
で、その制限をちょっとづつ厳しくしました。
その制限がこちら

  1. 普通にFizzBuzzを書く

  2. ソースコード内部に文字列リテラルとしてFizzとBuzzを一つづつまでしか持たない(Fizz、Buzz、FizzBuzzという風に文字列リテラルを持ってはいけない)

  3. %演算子禁止

  4. /演算子と*演算子禁止

  5. printf関数は二つまで、printf関数以外の標準出力関数は禁止

  6. main関数以外の{大括弧}は1組まで

  7. printf関数以外の標準関数は禁止


とりあえず1はけっこうみんな出来ました。
BizzBuzzになっているのは気にしない!元ネタのFizzBuzzというゲームは地域によってはBizzBuzzと言われているのでまったく問題ないのです。
まあ、無理に突っ込みを入れるとしたらfor文使えってくらいですかね
main()
{
int i = 0;

while(i < 101)
{
if(i % 15 == 0)printf("BizzBuzz\n");
else if(i % 3 == 0)printf("Bizz\n");
else if(i % 5 == 0)printf("Buzz\n");
else printf("%d\n",i);
++i;
}
}

こちらは%記号の外し方がちょっとトリッキーなコード。2までクリアです。
浮動小数点数をうまく使って%記号を外す人はもう一人くらいいたかな
int a = 0;
int b = 100;
float c = 0;
float d = 0;

int main(){
while(a <= b){ c = a; c /= 3; while(c >= 1){
--c;
}
if(c == 0){
printf("Fizz");
}
d = c;
c = a;
c /= 5;
while(c >= 1){
--c;
}
if(c == 0){
printf("Bazz");
}
if(d != 0&& c != 0)printf("%d",a);
printf("\n");
++a;
}
}

これが全ての条件をクリアしたコード。strcpyを実装しているので冗長な感じがありますね
ちなみに、このコードを書いた後輩は縛り3~4あたりで、割り切れるかどうかを論理演算子の組み合わせで行っていました。
main(){
int num = 1;
int three = 0;
int five = 0;
char fiz[5] = "fizz";
char buz[5] = "buzz";
char sp[5] = " ";
char f[5];
char b[5];
int i;

while(1){
++num;
++three;
++five;
if(three == 4) three = 1;
if(five == 6) five = 1;

if(three == 3) for(i=0;i<5;++i) f[i] = fiz[i];
else for(i=0;i<5;++i) f[i] = sp[i];
if(five == 5) for(i=0;i<5;++i) b[i] = buz[i];
else for(i=0;i<5;++i) b[i] = sp[i];
if(three == 3 || five == 5) printf("%s%s",f,b);
if(three != 3 && five != 5) printf("%d",num);

if(num == 100) break;
}
}

なんか色々と個性的なコードがいっぱいで私はうれしいぞジョジョーッ!

以下広告

サポート充実で初心者でも安心なレンタルサーバー。8GBで263円から。ブログ、ショッピングカート、SNS、ウェブメーラーと多彩な機能!

0 件のコメント:

コメントを投稿