担当授業のこととか,なんかそういった話題。

主に自分の身の回りのことと担当講義に関する話題。時々,寒いギャグ。

FizzBuzz 問題。

2017-11-01 21:38:00 | 情報系
プログラミングについていろいろ検索していたところ,プログラマの技量をチェックする FizzBuzz 問題なるものがあることを知った。

※ とあるブログで引用されていた「どうしてプログラマに・・・プログラムが書けないのか」(どうしてプログラマが・・・プログラムを書けないのか,という方がいいような気がする)という,読むのが怖い記事に,プログラマの採用面接で 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

--- プログラム終わり ---
コメント    この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« 超単純計算機。 | トップ | FizzBuzz 問題。(別解) »
最新の画像もっと見る

コメントを投稿

情報系」カテゴリの最新記事