はてなキーワード: BUZZとは
main(i){ for(;i<101;puts(i++%5?"":"Buzz")) printf(i%3?i%5?"%d":"":"Fizz",i); }
CのFizzBuzzはこれが一番好き。
function はなしにできるけど、可読性のためにあったほうがいい。
私なら内部関数にしてでも切り離す。
if なしは以下でできるけど、これは if でやっても変わらないのでは。
text = (counter % 3 ? "" : "Fizz") + (counter % 5 ? "" : "Buzz");
for なしはわからん。
どうやるの?
javascript ではこうか、こうでいいのか?
window.onload = function() { for(var ix = 0; ix < 100; ix++) { var p = document.createElement("p"); var text = ix + " : " + fizzBuzz(ix); var textNode = document.createTextNode(text); p.appendChild(textNode); document.body.appendChild(p); } }; function fizzBuzz(counter) { var text = ""; if(!(counter % 3)) text += "Fizz"; if(!(counter % 5)) text += "Buzz"; return text; }
さっきのはあまりに汚かったのでちゃんと書いたよ!!
static int do_fizz_buzz(int num, int rem, const char* str, int print) { if (num % rem == 0) { return do_fizz_buzz(num / rem, rem, str, 1); } if (print) printf("%s", str); return num; } int fizz_buzz(int num, int rem, const char* str) { return do_fizz_buzz(num, rem, str, 0); } int main(){ int i; for(i=1; i<=100; i++){ if(fizz_buzz(fizz_buzz(i, 3, "Fizz"), 5, "Buzz") != i) printf("\n"); else printf("%d\n", i); } return 0; }
どうでしょうか?>元増田
じゃぁ再帰で。
int fizz_buzz(int i, int j) { if(i % 3 == 0 && j % 3 != 0) { printf("Fizz"); return 1+ fizz_buzz(i / 3, j * 3); } if(i % 5 == 0 && j % 5 != 0) { printf("Buzz"); return 1 + fizz_buzz(i / 5, j * 5); } return 0; } int main(){ int i; for(i=1; i<=100; i++){ if(fizz_buzz(i, 1)) printf("\n"); else printf("%d\n", i); } return 0; }
変数名適当なのは勘弁。3とか5は適当に定数かマクロで置換すればDRY?
散々考え尽くされているんだろうけど、俺は挑戦するの初めてなので結構楽しいw
全然DRYじゃないけど、
#include <stdio.h> #define FIZZ 3 #define BUZZ 5 int main(void){ int i; for(i=1; i<=100; i++){ if((i % FIZZ == 0) || (i % BUZZ == 0)){ if(i % FIZZ == 0) printf("Fizz"); if(i % BUZZ == 0) printf("Buzz"); printf("\n"); } else printf("%d\n", i); } return 0; }
で簡単な仕様変更には対処できるかと。
でも一度ですむものは一度ですませたいよねぇ。もうちょっと考えてみる。
#include <stdio.h> int main(){ int i, j = 0; for(i=1; i<=100; j = 0, i++){ if(i % 3 == 0) { printf("Fizz"); j = 1; } if(i % 5 == 0) { printf("Buzz"); j = 1; } if (j) { printf("\n"); continue; } /* 以下二行と返り値追記 */ else printf("%d\n", i); } return 0; }
すばらしい指摘すぎて全俺が泣いた。
Write a program that prints the numbers from 1 to 100. But for multiples of three print "Fizz" instead of the number and for the multiples of five print "Buzz". For numbers which are multiples of both three and five print "FizzBuzz".
だから数字出さないとね。
私は今某社でWebアプリ開発の補助をするアルバイトをしている。一応少しはコードを書く。でも、自分はプログラマじゃないな、と思う。素敵なアルゴリズムを考えたりもしない。アプリの設計は当然社員さんがやる。私がやることと言えば、機能追加のための簡単なコードを書いたり、簡単なWebアプリをフレームワークを勉強しつつ書いて、見た目をCSSで整えて、そんなことだ。
やりがいを感じないわけではない。やっぱり自分の書いたコードが上手く動けば嬉しい。でも、プログラマの壁を読むと、何となく自分はコーダーになれてもプログラマにはなれないような気がしてくる。一応FizzBuzzは解ける。以下、そのコード。※追記参照
#include <stdio.h> int main(void){ int i; for(i=1; i<=100; i++){ if((i % 3 == 0) || (i % 5 == 0)){ if(i % 3 == 0) printf("Fizz"); if(i % 5 == 0) printf("Buzz"); printf("\n"); } /* 以下二行と返り値追記 */ else printf("%d\n", i); } return 0; }
アルゴリズム自体は多分2分足らずでもやっと思いつき、書いてる途中で脳内もやっとを形にできた。でもCの文法を忘れていて、コンパイルを通すのに独習Cを調べつつ、5分くらいかかった。
その時に、(i mod 3 = 0)とか書いてて、なんか自分はやっぱりダメなんじゃという気にさせられた。代入と比較の区別がついてない。そういえば先日も、編集してるファイルが違ってたとかカンマをつけ忘れてたとかでエラーがでてるのに、それになかなか気がつかなかったり、if文の条件が成立する場合としない場合を逆に考えてしまったりと、そんなぼんくらミスばかりしている。
そんなときに、「ああ、自分ってプログラマ向いてないのかも」と感じさせられる。
そしてなにより自分がプログラマに向いていないと思うのは、知的探求心の問題だ。プログラマを志していたがその道を諦めた友人に、なぜプログラミングの勉強をやめたのか?と聞いたとき、彼から帰ってきた答えはこうだった。「この道に進んだら一生勉強しなきゃいけないから。自分にはそんなことはとても無理だと思った」この答えを聞いたとき、でもプログラミングの勉強だったら楽しくないのかな?と思った。しかし自分を省みたとき、私自身もそう熱心にプログラミングの勉強をしているわけではないことに気がついた。Macに入っている一通りの言語でとりあえずHello!World!を書いたりしたが、だからといってそれらの言語の得手不得手がはっきりわかるまで勉強したわけではない。文法だって忘れてしまった。アルゴリズムを熱心に勉強したことはないし、なにより自分は最も唾棄すべき「とりあえず動けばいい」と思っている人間だ。エラーがでてそれを直しプログラムが動いたとき、なぜそのエラーが出なくなったのか?なぜ動くようになったのか?そうしたことを納得がいくまで調べることは滅多にない。なんとなく、ああいう理由なのかな?と考えて、それだけですませてしまう。もう一度書くが、自分が書いたプログラムが思った通りに動いたときは楽しい。でも、そこで止まってしまうのだ。なぜ動いたのか?それを徹底して考え、理解してはいない。
今のバイト先の開発チーフには、いつもこの点を注意される。なぜそれでいいのか徹底的に考えろ、ドキュメントをちゃんと読め、関数の挙動がわからなかったらソースを読め、と。でも正直、動いてくれたらそれでいい。さすがにライブラリのドキュメントを読む癖は多少ついてきたが、けれどもそのソースを読むところまでは正直頭が、気持ちが回らない。
だから、自分はプログラマになれないと思う。いつまでたってもコーダーのままだろう。
プログラミングはとても特別な才能がいる仕事だと思う。それは、アルゴリズムやデータ構造、オブジェクト指向などといった抽象的なものごとを理解し、それを具体的なソースコードに落とす頭だけではなく、ものごとについてとことん考える知的探求心も必要だ。その二つを満たす人こそがプログラマなのだと、一コーダーなりに私は思う。
だから私は、プログラマになれません。
【追記】
さすがに仕様を満たしていないのは恥ずかしいので直しました。こういう間抜けなミスをするところがなぁ…orz。
mainについて熱くなっている方々の話にはいまいちついていけないのですが、私はこれをCで書いたつもりですし、戻り値がないことにも警告はありませんでした。コンパイラはgcc version 4.0.1 (Apple Inc. build 5465)です。
↓
POP辞書 - popurls® | popular urls to the latest web buzz
見出しの無断配信は不法行為、知財高裁が読売新聞の訴えを一部認める判決
StarChartLog - 無断翻訳は著作権法違反の幇助ではなく正犯のはずなんだが
GIGAZINEは元記事が英文の時は疑ってかかった方が良い - TERRAZINE
「"popurls.com"で済ませる記事が多いけど…。最近はネタ元も増えた印象。」 - Buzzurl [バザール] / ソーシャルブックマーク
GIGAZINEの衆愚がリアルタイムで増える様子を見られるカウンター - TERRAZINE
リアルタイムGIGAZINE衆愚カウンター ver. 0.0.1
巡回サイト (POPURLS.com) | 100SHIKI.COM
22 Resources to Easily Create CSS Layouts | Vandelay Website Design December 17th, 2007
CSSのレイアウト作成に役立つ便利なリソースいろいろ - GIGAZINE 2007年12月18日 14時28分00秒
--------------------------------------------------------------------------------------------------------------
愚直なまでも著作権 > 著作権侵害が懲役10年以下になる意味 : ITmedia オルタナティブ・ブログ
著作権法 - 10年以下の懲役若しくは1000万円以下の罰金に処し、又はこれを併科する。
公訴時効 - 長期15年未満の懲役又は禁錮に当たる罪については7年
見出しの無断配信は不法行為、知財高裁が読売新聞の訴えを一部認める判決
StarChartLog - 無断翻訳は著作権法違反の幇助ではなく正犯のはずなんだが
剽窃、世界大学では通じない - 米国の大学では剽窃事実が成績表に残る
作曲において、「剽窃」「盗作」とみなされることは不名誉なことだ。
盗作の境界はどこ「科学史から消された女性たち」事件 [ EP: 科学に佇む心と身体 ]
--------------------------------------------------------------------------------------------------------------
popurls® | popular urls to the latest web buzz
Digg / All News, Videos, & Images
--------------------------------------------------------------------------------------------------------------
popurls® | popular urls to the latest web buzz
はてブニュース CEEK.JP NEWS - 最新ニュースヘッドライン CEEK.JP - 統合型メタサーチエンジン
http://dailynews.yahoo.co.jp/fc/
Spin of the Day | Center for Media and Democracy
Human Rights Watch - Defending Human Rights Worldwide
Amnesty International | Working to Protect Human Rights AMNESTY INTERNATIONAL JAPAN
Electronic Frontier Foundation | Defending Freedom in the Digital World
Welcome to the CIA Web Site — Central Intelligence Agency
VOA News - VOA News - Voice of America Homepage - News in 45 Languages
DemocracyNow! Japan Democracy Now! | Radio and TV News
先週のBuzz Out Loud from CNETを聴いてたら初音ミクが紹介されてた
28分20秒くらいから
http://podcast-files.cnet.com/podcast/cnet_buzzoutloud_101807.mp3
「プログラミングなんて誰にでもできる」という思想は、案外広く信じられているようで、とくに「そこそこできる」人にそういう傾向があるように思う。もちろんそんなのは嘘っぱちだ。
例えば、100m走で走りきれないという人は、まぁそうそういないだろうけど、オリンピックで金メダルをとれるかというと、いやずーっとレベルを下げて運動会の100m走で一位の旗を誇らしげに持てるかというと、それだって無理な人には無理だ。それと同じ意味でプログラミングは誰にでもできることではない。
もちろんプログラミングで一位になる必要なんてどこにもない。だけど考えて欲しい。100m走では1位とビリの差は数秒もない。オリンピックレコードと二十代平均の記録を比べても、多分倍半分も違わないだろう。もしプログラミングの世界にもこれが適用されるなら世の中はもっと幸せになっているはずだ。
たとえ話が何か違う方向に行ってる気がするんだけど、気のせいだろうか…。
思うに、そこそこ出来る人に案外広く信じられている「プログラミングなんて誰にでもできる」を敢えて100m走に置換するならば、「100mなんて誰でも走れる」になるのでは?20秒とかそんな条件はない。
もちろん、「誰にでも..」は何に於いても嘘っぱちだ。身体的条件その他諸々により、「特別な事情がある場合を除き」みたいなprefixは必ず付く。
100mという距離は別にしても、「走る」というのは人間の基本行動であり、特別な訓練を受けなくても"ほぼ誰にでも"できる事だろう。特別な事情がある場合を除いて。
対してプログラミングの方はというと、知らない人は知らないし、出来ない。当たり前だ。
というか、足し算だって何だってそうだ。
プログラミングは(普通)PCが必要だったりして、ちょっと入門の敷居が高いだけで。
つまり?そこそこ出来る人に案外広く信じられている「プログラミングなんて誰にでもできる」は、「誰でもHello Worldくらい、やろうとしてできねーこたぁねぇ」くらいじゃないんですかね。と。
本当に「Fizz-Buzzくらい誰でも書けるでしょ?」なんて信じ込んでる奴は、なんていうかオワッテル気がする。
ええと、なんていうか、揚げ足とってサーセンッシタ!
ああ、それと、皆が皆本当にプログラミングがデキたら少なくとも俺はくいっぱぐれて幸せじゃないので、ちょっと特殊な技能のままでいてほしいなーなんて思ったり!
あと、それと、「誰でも...」レベルの人が間違ってプロ状態になっちゃってたりして、そこそこ出来ると信じてる俺としてはちょっといけすかん状態なので、誰かなんとかしてください。
public class FizzBuzz { public static class NumMessagePair { private final int base; private final String message; public NumMessagePair(int base, String message) { this.base = base; this.message = message; } public boolean isAliquot(int num) { return (num / base * base == num); } public String getMessage() { return message; } } private final int start; private final int last; private final NumMessagePair[] pairs; private final StringBuilder result = new StringBuilder(); public FizzBuzz(int start, int last, NumMessagePair[] pairs) { this.start = start; this.last = last; this.pairs = pairs; } public static void main(String[] args) { System.out.print(new FizzBuzz(1, 100, new NumMessagePair[] { new NumMessagePair(3, "Fizz"), new NumMessagePair(5, "Buzz") }) .execute()); } public String execute() { for (int i = 1; i <= last; i++) { if (isAnyAliquot(i)) { addMessages(i); } else { result.append(i); } result.append("\n"); } return result.toString(); } private void addMessages(int num) { for (int i = 0; i < pairs.length; i++) { if (pairs[i].isAliquot(num)) { result.append(pairs[i].getMessage()); } } } private boolean isAnyAliquot(int num) { for (int i = 0; i < pairs.length; i++) { if (pairs[i].isAliquot(num)) { return true; } } return false; } }
http://anond.hatelabo.jp/20070511095003
こりゃ中途半端に拡張性を意識した名残だろうね。fizz 変数の値で割り切れる場合は "Fizz" と表示して buzz 変数の値で割り切れる場合は "Buzz" と表示するようになってるわけだけど、これを少し発展させれば、適当なコンテナ container を準備して container[0].num で割り切れる場合は container[0].message を、container[1].num で割り切れる場合は container[1].message を……と続けていっていくらでも対応できるようになる。でも今回は適当にざっと作るのが目的だからこの状態になってしまったんだと思う。コンテナ方式の実現方法は色々考えられるのでご自由にどうぞ。ぼくはかんがえるのめんどくさい。
あ、なるほど。ありがとうございます。
ついでにもうひとつ聞いてみたいんですけど
パラメータってなんでもかんでもメンバ変数にしてしまうのがclassの設計作法としてあるんですかね?
このプログラムの場合、startとlastは外部から与えられそうな値ですが
fizzとbuzzはどっちかというとロジックの仕様として組み込まれている感じの値ですよね。
これが同じように並んでいることに、なんとなく気持ち悪い感じを受けるんですけど…(そもそもclassの設計が悪い?)。
割る数と割られる数と余りが0の時に返す文字列をプロパティに持って
割り切れるかどうかのチェックを行うメソッドと
割り切れないときには数字、割り切れる時には文字を返すメソッドをもつようなclassを作って
それに委譲するようにすればいいのかな?
剰余不可より100回ループ不可、てほうが制限としては面白いかもね。
まあそれは再帰するだけの話で
$arr = [nil,"Fizz","Buzz","FizzBuzz"] def fzbz(i) f = ((i%3) == 0) ? 1 : 0 f |= ((i%5) == 0) ? 2 : 0 $arr[0]=i puts $arr[f] fzbz(i+1) if i<100 end fzbz(1)
これを変形すると、条件判断&ループ禁止が書けるな。
$arr = [nil,"Fizz","Buzz","FizzBuzz"] $f3 = [1,0,0] $f5 = [2,0,0,0,0] def fzbz(i) f = $f3[i%3] f |= $f5[i%5] $arr[0]=i puts $arr[f] ([lambda{|i| fzbz(i+1)}, lambda{}])[i/100][i] end fzbz(1)
http://anond.hatelabo.jp/20070508170219 こいつをアセンブラで書こうとしていたが、
すでに
http://anond.hatelabo.jp/20070510170511 にそれっぽいものが書かれていた。
しかしデクリメントした直後に判定するならフラグですむがそうじゃないときはtest命令入れないといけないのでうまくいかんと思った。
とりあえず8086アセンブラで書いてみたが長くなったので実行ファイル(fizzbuzz.com)をBase64で下に書いておくよ。
~) ls -al fizzbuzz.com -a--rwx 98 May 11 03:28 fizzbuzz.com* ~) base64 < fizzbuzz.com uwUDuQoJvl0B/s91ErcD/st1BrpSAesOkLpLAesWkP7LdQi6VgGzBesKkLg6OivBiQSL1rQJzSH+ zXXNtQr+yXXHulYBzSG0TM0hRml6eg0KJEZpenpCdXp6DQokVU0NCiQ=
数字の表示の処理で10で割った余りを使っていたのでまずいと思って修正した。ついでに98バイトまで縮めてみた。
こんなことに時間を使っている俺はバカだ。
ソースも載せとこう。8086なんてほとんど初めてに等しいので汚いだろうけど。
CODE SEGMENT ASSUME CS:CODE,DS:CODE ORG 100H START: mov bx, 0305h mov cx, 090Ah mov si, OFFSET NUM LOOP: dec bh jnz skip1 ; 3の倍数だった mov bh, 3 dec bl jnz skip2 ; 3の倍数で5の倍数だった mov dx, OFFSET FIZZBUZZ jmp loop5 skip2: ; 3の倍数で5の倍数じゃなかった mov dx, OFFSET FIZZ jmp loopend skip1: ; 3の倍数じゃないとき dec bl jnz skip3 ; 3の倍数じゃなくて5の倍数だった mov dx, OFFSET BUZZ loop5: mov bl, 5 jmp loopend skip3: ; 3の倍数じゃなくて5の倍数でもなかった ; 数字を表示する。2桁でいい mov ax, 3A3Ah sub ax, cx mov [si],ax mov dx, si loopend: mov ah,9 int 21h dec ch jne loop mov ch,10 dec cl jne loop ; 最後のBuzzを表示する mov dx, OFFSET BUZZ int 21h mov ax, 4c00H int 21h FIZZ: DB 'Fizz', 0dh, 0ah, '$' FIZZBUZZ: DB 'Fizz' BUZZ: DB 'Buzz', 0dh, 0ah, '$' NUM: DB 'UM', 0dh, 0ah, '$' CODE ENDS END START