はてなキーワード: FizzBuzzとは
http://anond.hatelabo.jp/20070508170219
もっと上手いやり方があるんだろうなぁ。
$i3=1; $i5=1; $flag=0; for($n=1;$n<101;$n++){ if($i3==3 && $i5==5){ echo "FizzBuzz¥n"; $i3=1; $i5=1; }else{ if($i3==3){ echo "Fizz¥n"; $i3=1; $flag=1; }else{ $i3++; } if($i5==5){ echo "Buzz¥n"; $i5=1; $flag = 1; }else{ $i5++; } if($flag==0){ echo $n."¥n"; } $flag = 0; } }
※一部全角化(&¥<)
作った経験と理論とどちらがプログラマになるのに有利なのか大学生に聞かれた。
「やりたい事があるのが大事。それがあればあとはぶっつけで動いて、否応なしにプログラミング力はつく。」と俺は経験的に思っている。それが良くわかるエントリをリンクしておくので参考にされたい。
http://anond.hatelabo.jp/20100725043438 プログラミングを身に着けるには
http://anond.hatelabo.jp/20101203150748 自分でWEBサービスを作りたいと思っている人へ
http://i.2chblog.jp/archives/1845528.html 年収1500万円超えたフリーのプログラマだけど何か質問ある?
以下、よく聞く意見について。
そうした採用しかしない企業がどのような状態なのか考えてみるべき。
http://blog.livedoor.jp/lalha/archives/50254634.html プログラマー面接時の技術的な質問事項(アプレッソ版)
http://anond.hatelabo.jp/20100813023359 FizzBuzz(の仕様を聞かされても)書けないプログラマ問題と面接について大量にレスがついている。ダメな面接の具体例があるので参考になるだろう。
あなたはそんな天才なの?ほんとうにあふれ出る才能だけで自分が評価されるような人間だと自信があるなら、もう日本にいないか、少なくとも俺と話してる場合じゃないんじゃないの。
理論さえ修めていれば、優秀なプログラマになれるのかというとそうでもない。音楽理論を修めていれば優秀な作曲家になれるかというのと同じ。なんつーか適性やセンスの問題、、とあまり言いたくないんだが、プログラミングにもそれがたしかにある。
ここで、とりあえず何か作ってみるというのが大事なわけ。作ってみると適性がわかる。そして伸びる。適性がなくても無理やりやってれば上手い具合に自己開発できるかもしれない。無理やりやるのが楽しいかと言われると不安だが、楽しさに突然気づく可能性が無いともいえない。伸びる過程で理論が必要だと気づいて必死に身に着ける人もいる。ほら結局理論が必要だ、だから学歴が全てなんだよってのはちょっとまて。確かに、適性があるなら大学で専門的に学んでいれば、あとから必死に独学するよりも要領のいいコースに乗ったことになるだろう。けど、学んだ人全員に適性があるわけじゃないんだよ。
適性とかそんな次元じゃなく理論だけで世界を制するような人材なら就職でそもそも悩んでいないと思う。しかし世の殆どの人は俺も含めてそこまで天才じゃないんだ。だから殆どの人にとって、自分が本当に出来るのかどうか知るには、やってみる必要がある。殆どの人にとって、理論だけで自分には人より才能があるという気になり、そのせいで実際にやってみなくなるのはただリスキーなだけだ。
http://www.aoky.net/articles/jeff_atwood/why_cant_programmers_program.htm どうしてプログラマに・・・プログラムが書けないのか?
http://anond.hatelabo.jp/20100128004640 IT土方なんて、ただの甘えでしかない
http://www.pixiv.net/member_illust.php?mode=medium&illust_id=16763692 T京K芸大学マンガ学科一期生による大学四年間をマンガで棒に振る (分野は違うけど考えさせられる事は多い。非常に話題になった作品)
int main(void){
int i;
for(i = 1 ; i <;= 100 ; i++){
printf("%d \0Fizz \0FizzBuzz "+("\x0A\x00\x00\x04\x00\x0D\x04\x00\x00\x04\x0D\x00\x04\x00\x00"[i%15]),i);
}
printf("\n");
return 0;
}
これ以上FizzBuzzは短く出来ないと思われる。return 0 とか改行はぬけるっちゃぁ、抜けるけど・・・
for(int i = 1 ; i <;= 100 ; i++){
printf("%d \0Fizz \0FizzBuzz "+("\x0A\x00\x00\x04\x00\x0D\x04\x00\x00\x04\x0D\x00\x04\x00\x00"[i%15]),i);
}
}
まぁ、限界だな・・・
void main(void) { for(int i = 1 ; i <;= 100 ; i++) printf("%d \0Fizz \0FizzBuzz "+("\x0A\x00\x00\x04\x00\x0D\x04\x00\x00\x04\x0D\x00\x04\x00\x00"[i%15]),i) ;}
うん、わけわからん。
http://anond.hatelabo.jp/20110114224058 を書いた増田です。
ちなみにFizzBuzzを短くするなら、こう。printfの""はポインタである。というのをつかって\0を文字列に入れ込み、数値の演算結果で文字列をシフトする。
俺ならその4行目は
printf("%d\n\0Fizz\n\0FizzBuzz\n"+("PFFJFTFFJFTFFJF"[i%15]-'F'), i );
みたいにしたくなるけどコードレビューで殴られそうなのでやらない。
このコードだと条件分岐がなくなってるし割り算の回数も減ってるから速くなるかもよ?
(でもそんなこと言うならprintf使ってる時点で論外だよな)
まぁ、今時は32Bitだし 100までしかFizzBuzzは回さないだろうから、動くんだろうな。
どうでもいいけど
cout 書いたなら、strstreamだろうし sprintf使うならprintfだろうなぁと
int main(void){
int i;
for(i = 1 ; i <= 100 ; i++){
printf("%d \0Fizz \0FizzBuzz "+(i%5?(i%3?0:4):(i%3?14:10)),i);
}
printf("\n");
return 0;
}
ちなみにFizzBuzzを短くするなら、こう。printfの""はポインタである。というのをつかって\0を文字列に入れ込み、数値の演算結果で文字列をシフトする。
Buzz単体を表示したい時にはFizzBuzz+4相当で表示できる というのがさらにポイント。
日本はFizzBuzz書ける1人のプログラマがFizzBuzzかけない9人のプログラマの文までプログラムするんだよ。
で、支払いは10人分支払われて、FizzBuzz書ける人がもらえるのはひとり分。
要するに水増しだよ。人月という、人数が多いほうがたくさんもらえる仕組みだから、そうなってる。
支払う方は、団塊の世代人間だから、努力すればなんとかなるみたいな根性論で、スキルという物を信じないからそうなる。そして、ソフトウェア産業は圧倒的に遅れた。
もちろん
if(!i%15){
std::cout << "fizzbuzz" << std::endl;
}else if(!i%5){
std::cout << "buzz" << std::endl;
}else if(!i%3){
std::cout << "fizz" << std::endl;
}else{
std::cout << i << std::endl;
}
とか書くことはできますが、見やすさとかそういう話はいいかと思って短くしてみました。
あと3項演算子の:の左右で違う型を受け付けてくれないので、intを文字列に変換する必要がありました。
sprintfを使わないで変換する方法がわからなかったもので。
「ヤバい」と書かれた方でしょうか?
ゴルフやってんじゃないんだから三項演算子とか無駄なsprintfとか使う必要ないと思うんだが。
if fizzbuzz else if fizz else if buzz else print n
ぐらいでいいんだよ。
void fizzbuzz(int n) { for(int i=1;i<=n;i++){ char ich[sizeof(int)]; sprintf(ich,"%d",i); std::cout << ((i%15==0)?"fizzbuzz":((i%5==0)?"buzz":((i%3==0)?"fizz":ich))) << std::endl; } }
コードとかほんと苦手。
横だが
これこそ「君はデザイナーじゃないでしょ?」って言いたい。いや「働いてないでしょ?」かな。
絵を見るのって玄人だけか?IT業界で使う絵の評価は一体誰がする?
ぱっと見の善し悪しなんて見た奴の趣味の範疇じゃん。客観視するにはそれなりのトレーニングは必要。また、一般人が雰囲気で捉える部分もデザインをやってる奴はきちんと見る。
どこにそんな定義がある?持ち込まれたプログラムを解析なんかしてる時間はないだろうけど、FizzBuzz程度の簡単なプログラム書かせれば、インデント、ロジックの組み方、命名のセンスがボーダーラインに満たない奴はすぐわかる。
ってか、時間ないからコミュ力だけ見て採用って、意味わかんねぇ。業界全体の人件費単価下げてるだけなんだから、さっさと潰れてくれそんな会社。
ていうか当たり前。
いやもちろん問題なんだけどね。
現場にいる私にとっては同僚のスキルが低いのは当然問題なんだし私自身へぼであることは問題だけれども、そういう次元の話じゃなくて。
はてななど見てると、まるで何か、プログラミングへの情熱に燃えて努力を惜しまずスキル向上してる人がプログラマって職業に付くのがしかるべき姿であって、ポインタもポリモーフィズムも理解できない(理解しようと努力もしない?)間抜けがプログラマになるなど言語道断であり、10000行のメソッドが作られるような悲劇はなんとしても避けなければならない、って雰囲気だけど。
いや悲劇は避けられたほうがいいけどさ、あのさ、「その仕事に熱意もないし能力もない、特になんもない人がその仕事をしてる」っていう状況は、しごく当たり前なのであって、むしろ、「自分の好きなことを仕事にして自分の能力を伸ばして社会に会社に貢献して自己実現しましょー」っていう思想のほうがよっぽど異常だから。
仕事にしたいような好きなことなんて、無いでしょ。ふつう、無いでしょ。
なんとなく学校出て、働かなきゃなー、って思って、なんとなく働くの。そんだけ。
で、たとえば飲食店に行ったら、いかにも接客業に向いてない感じのぼさーっとした奴が店員やってたりするでしょ。これ、普通。
世の中、たとえばタンポポを刺身に仕事があって、タンポポ大好きでその仕事するやつもいれば、なんとなく就職してタンポポ乗せてる奴もいる。
そんで、タンポポ乗せるのうまい奴とか下手な奴とかいる。それだけ。
もしかしたらソフトウェア開発ってのは崇高なる職業であってセミの死骸を裏返しにする仕事とは格が違うのかもしらんけどさー。
たいした変わらんって。
人間だいたいほとんどバカ。バカばっかり集まって社会ができててもなんとかなる。これ素晴らしい。
プログラミングできないけどSE、なんてねえ、まあ、とりあえずパソコンに向かって座ってて給料もらえるんだから、しめたものですよ。
あいつ全然仕事できないっていうか俺の書いた美しいコードを汚してるだけなのに、俺と同じ給料もらいやがって、ってそれ、賃労働に囚われ過ぎ。
がちがちに仕事できるやつだけ集まってる職場なんて息苦しいですよー。
そんなこんなで明日も日が昇るのだから、すーぱーはっかーにもFizzBuzz書けないあいつにも等しく感謝して、だらだら生きなさい。
FizzBuzz が面接でのエピソードの典型としてネタに良く取り上げられる理由は
http://www.aoky.net/articles/jeff_atwood/why_cant_programmers_program.htm
これを読むとわかると思います。
ここにあるように、まともな面接官なら
1から100までの数をプリントするプログラムを書け。ただし3の倍数のときは数の代わりに「Fizz」と、5の倍数のときは「Buzz」とプリントし、3と5両方の倍数の場合には「FizzBuzz」とプリントすること。
と仕様を説明してするでしょうね。知ってるか知ってないかはあまり問題ではないです。
よーするに情報発信してるかどうかでかなり選別できる気はするのだけど。
俺、情報発信してたし、見せられる成果物もあったけど、FizzBuzz知らなかったよ。
作ったものの中身をしっかり見るまでもなく
GitHub や Google Code に何か公開してないか
小規模なものでもいいからOSSのプロジェクトに参加したことあるか
自身のブログはあるか
よーするに情報発信してるかどうかでかなり選別できる気はするのだけど。
少なくとも FizzBuzz が書けないプログラマが誕生することはないよね。
ものつくりを仕事にしようという人は
情報発信してるのは当然だと思うのですが。
最低でも、「○○出来ますか?作れますか?」ではなく
「作ったものは何ですか」の方が大事だと思うんだけどなー
そこまでできたら、ifを使わずにfizzbuzzをやってみよー
http://anond.hatelabo.jp/20100813012328
>そのような人たちはどういう質の仕事して食ってるんでしょう。
わたしの職場の話をすると、プログラマっていう肩書きの人が、詳細設計書を書いたりコーディングしたりテストしたりする。
で、もちろん、いくらなんでも、FizzBuzzも書けない人がスクラッチからコーディングなんてできないし、設計を任せるわけにいかない。なので、そのような人たちは、既存のソースをちょこちょこ修正したりとか、設計書をソフトに合わせて修正するような作業(時空を超えたウォーターフォール開発)をやる。そういう人たちによるソースの修正が幾年月も繰り返されると、1000行以上ある関数ができたりする。リファクタリングしてやるぅー、などと思うんだけど、何しろ「すでに動いているソースに触るべからず」という掟が絶対だし、テスト環境貧弱だし、手が出せない。