はてなキーワードより引用これをプログラミングするのがFizzBuzz問題です。具体化1から15までの例を考えてみる。入力と出力の関係を考えると、入力が定まれば、出力も一意に定まることが分かる。入力と出力の関係を関数にすることができる。この関数をf(x)とする。関数f(x)は、入力が3の倍数なら"Fizz"、5の倍数なら"Buzz"、3と5の公倍数なら"FizzBuzz"、その他は入力値を返す。公倍数は最小公倍数を整数倍した値なので、ある値が公倍数であるかどうか判断するには、最小公倍数で割ってみて、割り切れるかを調べることにする。3と5の最小公倍数は15なので、15で試しに割ってみて、割り切れるかどうかを見る。3と5の倍数の判定も、それぞれ、3と5で割り切れるかどうかを見る。使う言語はPerlである。Perlは、上から順に命令を実行する命令型言語なので、3や5の倍数の判定の前に、15の倍数の判定を持ってくる。逆にすると、15の倍数は3の倍数であり、5の倍数でもあるため、"FizzBuzz"が必要な所が"Fizz"や"Buzz"だけになってしまう。11:312017-02-04■http://anond.hatelabo.jp/20170203231435このへんを参考に。http://blog.jnito.com/entry/20111013/1318459558FizzBuzzが解けなかったという中には多分制限時間内に仕様の確定ができないせいってのも多く混じってる気がする。数値を1つ与えて、1からその数値までFizzBuzzというパターンだが入力される数値はどの型で渡されるのか、マイナスや小数点以下や文字が渡される可能性は考えなくてよいかなども指定する必要があるし、そういう記述がない以上はシステム製造のプロならそれらの可能性を考慮すべきなんだよ。00:572013-08-01■アルゴリズムが書けるプログラマが優秀なのはわかるttp://www.itmedia.co.jp/enterprise/articles/1004/03/news002.htmlこのアーティクルを読んだけれども、こういうページに限らずどうしてアルゴリズムが書けないプログラマがボロクソに言われなければならないのかよくわからない。確かに書けないより書けるほうが優れているというのは正しいと思うけれども、かといって「書けない=劣っている」というのはおかしい。だいたいFizzBuzz問題に関してはさすがに書けないとヤバイというのはわかるんだけど、こういうプログラマーの資質を問われるのが得意な人はライブラリとかの開発に回ればいいんじゃないだろうか。RailsとかでもRailsの細部まで把握している人ってどれくらいいるんだろう。Railsとかを使うプログラマに求められる資質はそれこそ世の中にあるライブラリをうまく動かせるようなコードを書ければいいじゃないか。ドキュメントを読んだり、常にいろんなライブラリの動向にアンテナをめぐらせて、そういうのに合わせてリファクタリングが出来る程度であればみんながみんな麻雀のアルゴリズムが書けたりする必要はないのではと思う。僕自身はプログラマじゃないんですけどね。あと、この問題もいずれやってみようとは思う。誰であろうと基本的には全て承認するようにしている。そのせいか、タイムライン上にいつの間にかへんちくりんな人間がいることも多い。今日はその一例をここに記したいと思う。彼はプログラミングに精通しているようで、どうやら情報系の学校に通う学生らしい。彼はよく、流行りらしい関数型言語(Haskell?)やらアセンブル言語等の話題を取り上げ、これがああなってこうで・・・等と、恐らく的確なのであろうコメントを発する。最近の学生は勉強熱心であり意識も高いのだな、と思わせるには十分であった。仕事をほんの少し楽にする為のこまいスクリプト程度なら書くこともある程度での知識を持つ人間である。彼がとあるウェブ上のプログラミングコンテストに挑戦した、という旨の発言が目に入った。いつも難しいアルゴリズムや先進的なコーディングについて語る彼のことだから、さぞかし優秀な成績なのだろう、と期待してコンテストのウェブサイトにアクセスし、彼の固有名で検索にかけた。結果は、失笑に耐えぬものだった。コンテストは4つの問題が出題される形式であり、それぞれ難度に差がつけられている。1つは中学生でもコードの書き方さえ知っていれば解けるであろう問題。1つはFizzBuzzを基本とし、それに些細な応用を付与した問題。1つはエイトクイーン問題を少し改変した問題。1つは前述のエイトクイーン問題から更に発展させた上で、高度な数学的思考を求める問題。彼の結果は、初問正解のみであった。彼のコードを覗いてみることにした私は、そこで更におかしな笑いがこみ上げた。彼は、FizzBuzzがほぼ全く書けていなかった。素人の私から見ても、これがちんぷんかんぷんなコードであることは一目瞭然であった。以前、彼はHaskellの話題に言及する中で逆FizzBuzz問題についても述べていた気がする。彼は逆FizzBuzzどころかFizzBuzzすらマトモに記述できないのである。12:362011-09-21■FizzBuzz問題をphpで元ネタhttp://anond.hatelabo.jp/20070508170219php初めて半年程度でこれ。上手いやり方があるんだろうなぁ。01:302010-08-15■http://anond.hatelabo.jp/20100815182830なんか色々レスがついて嬉しいですねwFizzBuzz問題って一般的に、3の倍数と5の倍数以外の場合は数字を表示しないと駄目だよそれは知りませんでした。後、def文の中で再帰してるけど、これ、馬鹿でかい数入れたらメモリ使い切らないか?Phythonは詳しくないから、嘘言ってるかも知れないけど他には、何も15で場合分けしなくても、改行しなければ3の倍数と5の倍数とそれ以外で済むから剰余演算の回数が減るこの辺はいかにも興味が無い領域ですねwメモリは多分使い切ると思いますが、使い切った場合とかめんどくさくて考えたくないです。他には、何も15で場合分けしなくても、改行しなければ3の倍数と5の倍数とそれ以外で済むから剰余演算の回数が減るこれも興味ないですね...。計算回数って、数学(数理モデル)を計算機に乗せたから出てきた問題で、実用上は重要だけど数学としてはどうでもいいなあって思っちゃいます。03:202008-12-15■ナベアツはFizzBuzz問題だったこれひらめいた人はえらい。11:452008-10-31■http://anond.hatelabo.jp/20081031131100「情報科学」って曖昧だから、「情報工学」って言おうぜ!文系でもその気になれば身につくの?情報科学って何とかなると思うよ。「そういうものがあるんだ」と引き出しに確保しておく。理解するのは年単位の後回しでも十分。何かプログラム言語を使って、Fizzbuzz問題とかの簡単な課題を解く。参考書や入門サイトを見つつ、でも直接答えを見ずに実装する。手っ取り早く仕事にしたいなら、JavaでDBを使ったWEB掲示板でも作ってみてもいい。入門サイトなんて世の中にあふれてるから、学習コストは低いお!!経験上、法学をかじった人は飲み込みが早いです。法学もプログラムも、定義したルールをベースにするシステム論だからね。13:462007-11-12■WEBプログラマ批判http://www.itmedia.co.jp/bizid/articles/0711/07/news012.html"田口元の「ひとりで作るネットサービス」探訪「twitterMobile」はどうやって生まれたのか"を読んでいて湧き出た感情を発露したくなった。素晴らしいソフトウェアを生み出せるプログラマはそれ相応の評価を受けるべきだが、WEBプログラマというのはレベルと評価が噛み合っていなくて気持ちが悪い。リンク先は対象者が絶賛されているようなものではなく、どっちかというとamachang氏やmala氏との絡みで取り上げられていることはわかる。それでも、ただのHTMLの下請け作業を"マークアップエンジニア"といい、真剣に半年も勉強すれば到達出来るレベルで"サービス開発者"として持ち上げる土壌があることが、どう考えてもおかしい業界だと感じる。いう段階を経て有能なプログラマが生まれることは大いにあるだろうが、WEBプログラマの敷居は低い分だけに、業界直結のネット上にレベルの低い人間が取り上げられやすすぎだろ。てブを見ると、それを仲間内で持ち上げてる。こんな状態では、レベルの低い馴れ合いでしかない。自分は別業種においてプログラミングは道具の1つとして使っているレベルであるが、本当に評価されるべきプログラマというのは、そんな自分程度ではどうやっているのかわからない事を魔法のようにやってのける連中の事だ。いう人間は誰でもは真似できない技術の持ち主だから、プロと言える。その一方で、身につく期間も技術の交代も早いインターネット上で、小手先だけのWEBプログラマが表に出てくる現状。21:412007-11-10■関数プログラミングにおけるFizzBuzz問題いくつか考えてみた(問1)高階関数と再帰関数を必ず使って数値を要素とするリストの要素の総和を求める関数を書け。高階関数を使うという要件と再帰関数を使うという要件は同じ関数で満たしてもよい。つかって数値のリストの最大値を求める関数を書け。高階関数を使うという要件と再帰関数を使うという要件は同じ関数で満たしてもよい。いうのは簡単すぎるか?簡単すぎるなら(問3)高階関数と再帰関数を必ず使ってある数値に5を足し、10かけて2で割った数を求める関数を書け。高階関数を使うという要件と再帰関数を使うという要件は同じ関数で満たしてもよい。こっちの方がいいかな。トリッキーすぎる気もする。一応問題を出したので、SchemeとPythonで自分で想定している答えを書いておいた。はてなではSchemeが人気のようなので、あまり知らなかったけど関数言語ではSchemeで書いておいた。Pythonで書くのはSchemeだけだとわかりにくいので、なにかスクリプト言語で書いておこうと思ったから。Rubyの方が人気なので、はじめはRubyで書こうと思ったけど挫折した。だれかRubyで書いてくれないかな・・・。コードオブジェクトってなによ。いうか関数はオブジェクトなのに引数にできないの?なんで?(以下疑問と愚痴の嵐なので略)Perlは古株が多くてユーザー数も多そうだけど、・・・その・・・無理です・・・。あの言語仕様はやる気がしない。ぶっちゃけ理解できない。Pythonを知らないひとは多そうだけど、知らなくてもSchemeよりは感じは掴めると思うのでPythonでも書いておくことにした。Scheme編http://anond.hatelabo.jp/20071110215936Python編http://anond.hatelabo.jp/20071110220132これで大部分のひとがこの問題に興味をもたなくて解答するひとがいなくても、興味を持ったひとは安心だね!追記:問3で次のは無しとしておきたい。オブジェクト指向におけるFizzBuzz問題http://blogs.wankuma.com/episteme/archive/2007/11/08/106927.aspxかなりテキトー。エラー処理とかしない。Cat->new;$animal->Sound;わん、にゃーが文字化けしたのでローマ字で。