BLOGTIMES
2007/05/09

FizzBuzz問題が解けますか?

  programming  就活 
このエントリーをはてなブックマークに追加

方々でFizzBuzz問題というのが話題になっているようです。

どうしてプログラマに・・・プログラムが書けないのか?(原文: Coding Horror: Why Can't Programmers.. Program?)

1から100までの数をプリントするプログラムを書け。ただし3の倍数のときは数の代わりに「Fizz」と、5の倍数のときは「Buzz」とプリントし、3と5両方の倍数の場合には「FizzBuzz」とプリントすること。

ちゃんとしたプログラマであれば、これを実行するプログラムを2分とかからずに紙に書き出せるはずだ。怖い事実を聞きたい? コンピュータサイエンス学科卒業生の過半数にはそれができないのだ。自称上級プログラマが答えを書くのに10-15分もかかっているのを見たこともある。

僕もとある情報工学科のある大学に籍を置いていますが、卒業生の半分以上がプログラミングできないという現実はよくわかりますし、そんな人たちの多くが情報産業に就職していく現実があるので内容的には、まぁそんなもんかなぁという感じですが、確かにプログラマの募集でこれが解けない人がわんさと来たら凹みますね。

とりあえず僕自身はというと、この手の問題にありがちな罠が仕掛けてあるんではないかと5分くらい悩んでしまったので、恥ずかしながら10分弱かかってしまいました。とりあえず罠はなく、文意どおりプログラミングできれば動きます

僕の解答

とりあえずコンソールが開いていたのでphpで。

fizzbuzz.php

<? for( $i = 1; $i < 101 ; $i++ ){ if ( $str = (( $i % 3 == 0 ) ? "Fizz" : "" ) . (( $i % 5 == 0 ) ? "Buzz" : "" ) ){ print "$str\n"; } else { print "$i\n"; } }

最初printの戻り値が使えないかと思ったんですが、phpのprintの戻り値は常に1のようだったのでオーソドックスな方法に変更。


    トラックバックについて
    Trackback URL:
    お気軽にどうぞ。トラックバック前にポリシーをお読みください。[policy]
    このエントリへのTrackbackにはこのURLが必要です→https://blog.cles.jp/item/1986
    Trackbacks
    このエントリにトラックバックはありません
    Comments
    愛のあるツッコミをお気軽にどうぞ。[policy]
    古いエントリについてはコメント制御しているため、即時に反映されないことがあります。
    kimitake (2007/05/11 03:15) <%HatenaAuth()%>

    自分だったら
    $i < 101 のところ $i <= 100 かな。
    101 って書いちゃうと、あとから「えっとなんで 101?」って思うし。

    hsur (2007/05/12 17:46) <%HatenaAuth()%>

    そのあたりあまり細かく考えずに作っちゃいました。
    でも、これが解けないなんてことがあるんでしょうかねぇ。

    nanasi (2007/07/26 06:19) <%HatenaAuth()%>

    引用先の

    自称上級プログラマが答えを書くのに10-15分もかかっているのを見たこともある。

    っていうところがおもしろいと思いました。
    たぶん、自称上級プログラマは条件が
    3 => Fizz
    5 => Buzz
    3 , 5 => Fizz Buzz
    ではなくなった場合でもプログラムを修正しなくて済むようにコーディングしようとしたんじゃないでしょうか。

    そうすると問題の文意を図るのにも苦労します。
    「3と5両方の倍数の場合には「FizzBuzz」とプリント」っていう条件が消えただけで、アタフタしそうです。

    hsur (2007/07/26 10:20) <%HatenaAuth()%>

    僕もその手の何かがあるのではと思って、しばらく考え込んでしまいましたが、この問題は仕様の解釈であったり、拡張性の担保というところに主眼はなくて、純粋にこのプログラムが実現できるか否かということを問題にしているのではないかと思います。

    # 少しプログラムができる人であれば、そういう思考になるのは自然だとは思いますけど。

    Comments Form

    コメントは承認後の表示となります。
    OpenIDでログインすると、即時に公開されます。

    OpenID を使ってログインすることができます。

    Identity URL: Yahoo! JAPAN IDでログイン