1 名前:(´・ω・`) ◆Hc1VAagKMg [2008/04/29(火) 20:06:06 ] 1から100までの数をプリントするプログラムを書け。 ただし3の倍数のときは数の代わりに「Fizz」と、5の倍数のときは「Buzz」とプリントし、3と5両方の倍数の場合には「FizzBuzz」とプリントすること。 www.aoky.net/articles/jeff_atwood/why_cant_programmers_program.htm 言語自由
363 名前:仕様書無しさん mailto:sage [2011/07/21(木) 01:29:31.99 ] ホットスーププロセッサなら for n,1,100:s="":if n\3=0{s="Fizz"}if n\5=0{s+"Buzz"}if s=""{s=n}mes s:next
364 名前:仕様書無しさん mailto:sage [2011/07/21(木) 12:30:50.58 ] using System; class FizzBuzz { static void Main() { int m3 = 0, m5 = 0; for (int i = 1; i <= 100; i++) { if (++m3 == 3) { Console.Write("Fizz"); m3 = 0; } if (++m5 == 5) { Console.Write("Buzz"); m5 = 0; } if (m3 != 0 && m5 != 0) Console.WriteLine(i); else Console.WriteLine(); } } }
365 名前:362 mailto:sage [2011/07/21(木) 23:31:27.81 ] >>363 そんなかんたんにいくのね・・・
366 名前:仕様書無しさん mailto:sage [2011/08/01(月) 10:21:21.51 ] クソコードを書きたくなったから書いてみる print ':'.join('FizzBuzz' if n % 15 == 0 else 'Fizz' if n % 3 == 0 else 'Buzz' if n % 5 == 0 else str(n) for n in xrange(1, 101))
367 名前:仕様書無しさん mailto:sage [2011/08/01(月) 10:23:28.39 ] \nに直すの忘れてたが多分どうでもいいな
368 名前:仕様書無しさん [2011/08/07(日) 04:17:05.04 ] #include <stdio.h> main(void){ int i = 0,flag = 0; while(i < 101){ if(i % 3 == 0){ printf("Fizz"); flag = 1; } if(i % 5 == 0){ printf("Buzz"); flag = 1; } if(flag == 1){ printf("%d\n",i); }else{ printf("\n"); } flag = 0; i ++; } } 完全独学+初心者+ゲームしか作った事ねぇ・・・ 俺ダメダメかのぉ?orz
369 名前:仕様書無しさん [2011/08/07(日) 04:20:51.13 ] 見返したら色々間違えてる。なんかカオス。 俺赤面。こんな時間に眠い目こするからいけなかったんだ(言い訳 もう寝る。お休み
370 名前:仕様書無しさん mailto:sage [2011/08/07(日) 07:29:01.96 ] 本物のマなら、寝ずにデバッグする。
371 名前:仕様書無しさん mailto:sage [2011/08/07(日) 17:07:39.64 ] 真のマなら、寝て起きてからデバッグする。
372 名前:仕様書無しさん mailto:sage [2011/08/07(日) 18:05:59.34 ] >>371 それは正しい
373 名前:仕様書無しさん mailto:sage [2011/08/07(日) 18:50:41.19 ] 俺ぐらいになると寝てる間にデバッグするね
374 名前:仕様書無しさん mailto:sage [2011/08/07(日) 20:10:30.23 ] >>368 関数の型をうろ覚えで済ますな、ぐぐれ ループの範囲が1から100までなんだから、素直に1と100をコードに入れられるならそうした方が見やすい つーかループ変数の初期化とか更新とかはforを使えばもっと見やすいし、見やすければバグりにくい 最近のC/C++のforならスコープも付くしな
375 名前:仕様書無しさん [2011/08/25(木) 17:49:38.05 ] >>352 #include <stdio.h> int disp(int num, int flag, int sizeofarray, char *s[] ) { if (flag == sizeofarray-1) printf("%d\n", num) ; else printf("%s\n",s[flag]) ; return 0; }
376 名前:仕様書無しさん [2011/08/25(木) 17:52:39.16 ] (続き) int main(void) { int num1 = 1 ; int num2 = 100 ; int sizeofarray = 4 ; int a[] = {15,5,3,1} ; char *s[] = { "FizzBuzz","Buzz","Fizz"," "}; int i,j ; for (i = num1 ; i <= num2 ; i++) { for (j = 0 ; j < sizeofarray ; j++){ if (i % a[j] == 0 ) { break ; } } disp(i,j,sizeofarray,*s[]) ; } return 0; }
377 名前:仕様書無しさん [2011/08/25(木) 17:58:22.94 ] >>352 1 可変性 標準出力以外に出力する必要が生じたときは、disp()を修正する。 また、項目を追加する必要が生じたときは、変数の初期値を変える。 2 実行速度 可変性を重視すると、その分実行速度が落ちる。
378 名前:仕様書無しさん mailto:sage [2011/08/25(木) 19:01:16.31 ] >>375-376 まで行くと、可変性を無駄に重視しすぎだろ 要求が変更されたら、コードを書き換えて対応するのは当たり前なんだから、ほどほどに書き換えが やりやすくなってりゃいいのよ 実行効率どころか可読性まで大きく落として、まだ見ぬ要求変更の可能性に幅広く対応するのは無駄
379 名前:仕様書無しさん [2011/08/26(金) 15:09:14.82 ] ユーザー様から、仕様の大幅変更の要求が来た。 3で割り切れたときはFizz、5で割り切れたときはBuzz、 3と5で割り切れたときはFizzBuzzでいいんだけど、 それに加えて、7のときはGizz、13のときはKizz、 3と7のときはFizzGizz、3と13のときはFizzKizz、 5と7のときはBuzzGizz、5と13のときはBuzzKizz、 7と13のときはGizzKizzだ。 それから、計算の範囲は、1から100ではなく、100から1000までね。 修正作業をすぐにやってくれ。締め切りは明日ね。
380 名前:仕様書無しさん [2011/08/26(金) 15:17:48.71 ] int num1 = 100 ; int num2 = 1000 ; int sizeofarray = 11 ; int a[] = {91,65,39,35,21,15,13,7,5,3,1} ; char *s[] = { "GizzKizz","BuzzKizz","FizzKizz","BuzzGizz","FizzGizz","FizzBuzz","Kizz","Gizz","Buzz","Fizz"," "}; よかった。 実行効率どころか可読性まで大きく犠牲にして、 まだ見ぬ要求変更の可能性に幅広く対応したコードを書いておいて…
381 名前:仕様書無しさん mailto:sage [2011/08/26(金) 17:24:33.68 ] そんなピンポイントな仕変出す客おるかいw
382 名前:仕様書無しさん mailto:sage [2011/08/26(金) 17:42:45.50 ] 105(3,5,7で割れる)とかどうするんだろ、って思ったけどたぶんBuzzGizzなんだろうなぁ 直接"FizzBuzz"とか書かず、割れた数から出力すれば楽だと思ったんだが、そうするとFizzBuzzGizzになっちゃうんだよなぁ Fizz,Buzz,…の数だけフラグ用意して、立てたり立てなかったりしつつ、その後3本以上になったら小さいほうを折って…って面倒だわ
383 名前:仕様書無しさん mailto:sage [2011/08/26(金) 19:36:59.46 ] その前にギャラの話をしようじゃないか…
384 名前:仕様書無しさん mailto:sage [2011/08/26(金) 21:33:38.93 ] つーかその程度の変更なら、丸々書き換えても30分も要らんだろw
385 名前:仕様書無しさん mailto:sage [2011/08/27(土) 00:02:00.57 ] 面倒なだけで興味をひかないネタだな こういうところにもその人のスキルって出るよな よって>>379 は低スキルのバカグラマー
386 名前:仕様書無しさん mailto:sage [2011/08/27(土) 02:50:52.15 ] 明らかに>>375-376 に都合のいいように考えただけの仕様だもんな
387 名前:仕様書無しさん mailto:sage [2011/08/27(土) 02:55:14.40 ] 3で割り切れる時は3倍、5で割り切れる時は5倍にして表示してね、という簡単な変更要求が来た途端、 可変性が高いつもりでただ重いだけの無駄コードと化すしな
388 名前:仕様書無しさん mailto:sage [2011/08/27(土) 02:55:56.16 ] 可読性が落ちてることが一番問題じゃね?
389 名前:仕様書無しさん mailto:sage [2011/08/27(土) 15:09:54.05 ] この程度の規模のコードで、コードの再利用を考慮しすぎるのはムダ。 仕様変更に伴って書き直した方が早い。 >>1 のリンク先には > ちゃんとしたプログラマであれば、これを実行するプログラムを > 2分とかからずに紙に書き出せるはずだ。怖い事実を聞きたい? > コンピュータサイエンス学科卒業生の過半数にはそれができないのだ。 > 自称上級プログラマが答えを書くのに10-15分もかかっているのを見たこともある。 とある。 2分とかからずに書き出せる程度の規模のコードで再利用とかムダムダ。 仕様変更があったら数分かけて書き直せ。
390 名前:仕様書無しさん mailto:sage [2011/08/27(土) 21:59:59.72 ] int sizeofarray = sizeof(a) / sizeof(a[0]); くらい書け(もちろん宣言の順序も入れ替えて)、と思ったけど、どっちにしろ配列サイズが一致しないバグ を抱える可能性が気持ち悪いから、本気でやるなら三次元配列かstruct/classの配列にすべきか あと、末尾のダミー文字列が気持ち悪すぎるけど、これ無くても鼻から悪魔出ないよね? でも実際問題としては>>389 に完全同意
391 名前:仕様書無しさん mailto:sage [2011/08/27(土) 22:08:29.33 ] unsignedも付けろ
392 名前:仕様書無しさん mailto:sage [2011/08/27(土) 23:12:30.03 ] >>391 追加料金が1人月発生しますが良いですか?
393 名前:仕様書無しさん mailto:sage [2012/02/09(木) 02:03:42.02 ] さあ、忘れたころにやってくる。
394 名前:仕様書無しさん [2012/02/12(日) 22:03:06.96 ] ひよこグミを参考にしながらOpenCOBOLでショートコーディングに挑戦してみました IDENTIFICATION DIVISION. PROGRAM-ID. FIZZBUZZ. DATA DIVISION. WORKING-STORAGE SECTION. 01 N PIC 999. PROCEDURE DIVISION. RU-PU. ADD 1 TO N IF 0 = N(3:) OR 5 = N(3:) IF N = N / 3 * 3 DISPLAY "FizzBuzz" ELSE DISPLAY "Buzz" END-IF ELSE IF N = N / 3 * 3 DISPLAY "Fizz" ELSE DISPLAY N(3 - 0 ^ (9 / N):) END-IF END-IF IF N < 100 GO RU-PU END-IF STOP RUN.
395 名前:仕様書無しさん mailto:sage [2012/02/13(月) 22:10:32.70 ] RU-PU. がいいね。
396 名前:仕様書無しさん [2012/02/14(火) 01:26:49.30 ] これでいいのかな?VB.net Dim fizz As String = "Fizz" Dim buzz As String = "Buzz" Dim i As Integer For i = 1 To 100 Dim fl As Boolean = True If i Mod 3 = 0 Then rtAnswer.Text &= fizz fl = False End If If i Mod 5 = 0 Then rtAnswer.Text &= buzz fl = False End If If fl Then rtAnswer.Text &= i End If rtAnswer.Text &= " " If i Mod 10 = 0 Then rtAnswer.Text &= vbCrLf End If Next
397 名前:仕様書無しさん mailto:sage [2012/02/14(火) 20:47:20.57 ] >If i Mod 10 = 0 Then ???
398 名前:仕様書無しさん [2012/02/14(火) 21:31:53.79 ] >>397 10個ごとに改行入れるってことだろ?見やすくするために
399 名前:仕様書無しさん mailto:sage [2012/02/14(火) 21:53:06.43 ] 引用のおっさんここにもいるのか
400 名前:仕様書無しさん mailto:sage [2012/02/16(木) 03:14:53.62 ] なんだ 引用のおっさん て?
401 名前:仕様書無しさん mailto:sage [2012/04/09(月) 23:59:48.08 ] FizzBuzzクイズ 1.fizz.buzz #=> 1 3.fizz.buzz #=> "Fizz" 5.fizz.buzz #=> "Buzz" 15.fizz.buzz #=> "FizzBuzz" となるようなメソッドfizz、buzzは定義可能か? 可能である場合、同様にgizzを追加定義し、 7.fizz.buzz.gizz #=> "Gizz" 21.fizz.buzz.gizz #=> "FizzGizz" 35.fizz.buzz.gizz #=> "BuzzGizz" 105.fizz.buzz.gizz #=> "FizzBuzzGizz" 105.fizz.gizz.buzz #=> "FizzGizzBuzz" と拡張・応用ができるか? メソッドのコールに()が必須の言語では 3.fizz().buzz() 形式でも構わない。 オープンクラス機構やメソッドのない言語では関数(buzz(fizz(3)) #=> "Fizz" など)で。