プログラミングについていろいろ検索していたところ,プログラマの技量をチェックする FizzBuzz 問題なるものがあることを知った。
※ とあるブログで引用されていた「どうしてプログラマに・・・プログラムが書けないのか」(どうしてプログラマが・・・プログラムを書けないのか,という方がいいような気がする)という,読むのが怖い記事に,プログラマの採用面接で FizzBuzz タイプの問題を使うことを提案した元記事(英語)へのリンクがある。
それは,1 から 100 までの自然数を出力するプログラムを作るだけなのだが,3 の倍数の時は数字の代わりに Fizz,5 の倍数の時は Buzz,そして 3 と 5 の公倍数の時は FizzBuzz と出力せよとの条件がついている。
自称初級プログラマ見習いの私にとってはなかなか手ごわい問題である。真面目に考えてコーディングし,実際に動かしてデバッグするまで,小一時間は要したろう。少なくとも,就職の面接の場でポンと出されてその場でサッと解決できる気はしない。
この問題にはいくつものアプローチが可能であろう。とりあえず思いついたのは二つであるが,そのうちの一つだけは唯一私がある程度使えるといえる(?)(仮称)十進BASIC によるものである。きっともっとエレガントな解法があるに違いないので,恥ずかしいところではあるが,私の拙い解答を以下に記しておく。
なお,FOR 文や IF 文の中の処理は Tab で字下げしてあるのだが,このブログ本文に張り付けたところ,それは反映されないようである。
・・・と思って pre タグを使ったら,思い描いていた通りのコードが表示されたので,めでたしめでたしである。
--- プログラム始め ---
--- プログラム終わり ---
※ とあるブログで引用されていた「どうしてプログラマに・・・プログラムが書けないのか」(どうしてプログラマが・・・プログラムを書けないのか,という方がいいような気がする)という,読むのが怖い記事に,プログラマの採用面接で FizzBuzz タイプの問題を使うことを提案した元記事(英語)へのリンクがある。
それは,1 から 100 までの自然数を出力するプログラムを作るだけなのだが,3 の倍数の時は数字の代わりに Fizz,5 の倍数の時は Buzz,そして 3 と 5 の公倍数の時は FizzBuzz と出力せよとの条件がついている。
自称初級プログラマ見習いの私にとってはなかなか手ごわい問題である。真面目に考えてコーディングし,実際に動かしてデバッグするまで,小一時間は要したろう。少なくとも,就職の面接の場でポンと出されてその場でサッと解決できる気はしない。
この問題にはいくつものアプローチが可能であろう。とりあえず思いついたのは二つであるが,そのうちの一つだけは唯一私がある程度使えるといえる(?)(仮称)十進BASIC によるものである。きっともっとエレガントな解法があるに違いないので,恥ずかしいところではあるが,私の拙い解答を以下に記しておく。
なお,FOR 文や IF 文の中の処理は Tab で字下げしてあるのだが,このブログ本文に張り付けたところ,それは反映されないようである。
・・・と思って pre タグを使ったら,思い描いていた通りのコードが表示されたので,めでたしめでたしである。
--- プログラム始め ---
DIM A(1 TO 100) ! 数に応じて処理を場合分けするためのフラグを立てる配列。 FOR I=1 TO 100 LET A(I)=0 NEXT I ! 配列の初期化。 FOR I=1 TO 33 LET N=3*I LET A(N)=A(N)+1 NEXT I ! I が 3 の倍数なら A(I) に 1 を足す。 FOR I=1 TO 20 LET N=5*I LET A(N)=A(N)+2 NEXT I ! I が 5 の倍数なら A(I) に 2 を足す。 FOR I=1 TO 100 IF A(I)=1 THEN ! A(I)=1 は I が 3 の倍数だが 5 の倍数でないことを意味する。 PRINT "Fizz" ELSEIF A(I)=2 THEN ! A(I)=2 は I が 5 の倍数だが 3 の倍数でないことを意味する。 PRINT "Buzz" ELSEIF A(I)=3 THEN PRINT "FizzBuzz" ! A(I)=1+2 は I が 3 と 5 の倍数である証。 ELSE PRINT I ! A(I)=0,つまり I が 3 でも 5 でも割り切れないときは I を出力。 END IF NEXT I END
--- プログラム終わり ---
※コメント投稿者のブログIDはブログ作成者のみに通知されます