[ C ] C 言語で FizzBuzz -- やっぱり邪悪編? --
なんか C 言語で FizzBuzz 書いている人がいるのでやってみた。
プログラマに対しても書いているんだけど、その前に言わせていただくと、なんで FizzBuzz があんなに長ったらしくなるのか理解できないしね。
# include <stdio.h>
int main()
{
for( int row=1; row <= 100; row++ )
{
((row % 3 == 0) && (row % 5 != 0)) ? printf( "Fizz, " ) :
((row % 3 != 0) && (row % 5 == 0)) ? printf( "Buzz, " ) :
((row % 3 == 0) && (row % 5 == 0)) ? printf( "FizzBuzz, " ) : printf( "%d, ", row );
}
return 0;
}
Thinking Time 30 sec.
gcc 3.4.5 with C99
1~100までの整数列を考えるところまではいいんだけど、そのあとは「次は4つのケースで場合分けしよう」で終わると思うんだよ。FizzBuzz クイズに関してはこれだけで閉じているんだから。拡張性考えろって言われたら、上のコードは NG だけどね。
プログラマに向いているか向いていないかを決めている原因のひとつは、わたしも分析能力にあると思う。パズルのピースがどんな形をしていて、それらが全部でいくつあるのかを見極める能力。それからもう1つ、パズルのピースを組み立てる能力もあるんじゃないかと思う。見つけただけじゃプログラムはできない。見つけたピースをどんな順番で組み立てるのかを考える能力もまた必要なことだと思う。
わたしは後者が欠けている。それと、特定の問題に対する最適解は出せるが、一般化した解を求められない。理学よりの能力はあるものの、工学よりの能力は低いみたいだ。
2007.06.24 03:54
友人 「ふつーに書け」
わたし「普通って( ´・ω・`)?」
友人 「if と else とか使って!」
というリクエストがあったのでそっちの方も書いてみようかと(;´Д`)
# include <stdio.h>
# include <string.h>
int main()
{
char* replaced = "FizzBuzz";
char fragment[strlen( replaced )+1];
for( int row=1; row <= 100; row++ )
{
if((row % 3 == 0) && (row % 5 != 0))
{
strncpy( fragment, replaced, strlen( replaced ) / 2 );
fragment[4] = '\0';
printf( "%s, ", fragment );
}else if((row % 3 != 0) && (row % 5 == 0))
{
strncpy( fragment, replaced + 4, strlen( replaced ) );
fragment[4] = '\0';
printf( "%s, ", fragment );
}else if((row % 3 == 0) && (row % 5 == 0))
{
printf( "%s, ", replaced );
}else
{
printf( "%d, ", row );
}
}
return 0;
}
| 固定リンク
この記事へのコメントは終了しました。
コメント