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 言語自由
190 名前:仕様書無しさん mailto:sage [2009/09/17(木) 21:36:42 ] なんでこの問題が有名なのかイマイチわからんのだが、 重複さえ気をつければ他に別にひっかけがあるようなもんでは無いよね。
191 名前:仕様書無しさん mailto:sage [2009/09/17(木) 22:03:23 ] 引っかけがあるように見えるので、しばらく考えるが、 実は、引っかけがないことに気付く。 これが、最大の引っかけ。
192 名前:仕様書無しさん mailto:sage [2009/09/17(木) 23:17:09 ] >>190-191 そもそもプログラマとしての素養を見るための問題の例として挙げられたものだから 引っかけとか特に必要ないんだよ
193 名前:仕様書無しさん mailto:sage [2009/09/18(金) 23:12:18 ] 普通のプログラマなら2分以内で書けて当たり前という程度には簡単。
194 名前:仕様書無しさん mailto:sage [2009/09/19(土) 14:18:17 ] 「2分」ってよく言われるけど、 「問題用紙をめくって下さい」から、「動作確認終わりました」まで、 必ずしも2分以内に終わらないよ。 特に、自分が普段はあまり使っていないような言語では。 問題文見て、面食らってる時間とか、 改行コードの出力、全パターンで共用した方がいいのかどうか思案する時間とか、 インクルード文なんだっけ、main関数の戻り値にvoid許可されてたっけとか、 Javaのクラスパスが通ってないとかw 2分以内と言ってる人は、何度も書いてるから、2分で出来るようになっただけ。
195 名前:仕様書無しさん mailto:sage [2009/09/19(土) 14:31:04 ] んなこたーどうでもいいんだよ
196 名前:仕様書無しさん [2009/09/19(土) 14:43:36 ] FizzBuzz
197 名前:仕様書無しさん mailto:sage [2009/09/19(土) 14:45:47 ] 195取られた
198 名前:仕様書無しさん mailto:sage [2009/09/20(日) 15:04:59 ] >>194 ん?言語の指定はないんだが……
199 名前:仕様書無しさん mailto:sage [2009/09/20(日) 20:44:10 ] >>194 FizzBuzzの2分は誤訳だってよ。
200 名前:仕様書無しさん mailto:sage [2009/09/20(日) 22:37:29 ] #pythonのリストコンプリヘンションで遊んでみた def nvl(x,y): if x: return x; return y; fizz = (['','','fizz']*100)[0:100]; buzz = (['','','','','buzz']*100)[0:100]; num = map(lambda x:str(x),range(1,101)); print map(nvl,map(lambda x,y:x+y,fizz,buzz),num);
201 名前:仕様書無しさん mailto:sage [2009/09/20(日) 23:13:31 ] ちょっとだけ、悪ノリ。(C言語) #include <stdio.h> #include <memory.h> int main(void) { int i; char buf[8]; printf("<html><head><title>クソスレ</title></head><body><dl>"); for (i=1;i<=1001;i++) { char* s1, *s2, *s3, *s4; sprintf(buf,"%d",i); s2 = "blue"; s3 = " "; s4 = "投稿日: 2009/09/20(日) 23:59:59 ID:FizzBuzz"; if (i%1001==0) { s1 = "このスレッドは1000を超え(ry"; s2="green"; s4="投稿日: Over 1000 Thread"; } else if (i%15==0) { s1 = "fizzbuzz"; s3="[fizzbuzz]"; } else if (i%3==0) { s1 = "fizz"; s3="[fizz]"; } else if (i%5==0) { s1 = "buzz"; s3="[buzz]"; } else { s1 = buf; s2 = "green"; s3 = " "; } printf("<dt>%d 名前:<font color=\"%s\"><b>仕様書無しさん</b>%s</font> %s</dt> ",i,s2,s3,s4); printf("<dd style=\"padding:1em 0em\";>%s</dd>",s1); } printf("</dl></body></html>"); return 0; }
202 名前:仕様書無しさん mailto:sage [2009/09/21(月) 11:41:01 ] >>192 プログラマの素養が関係ないような問題で素養を見ようとする意図って何なんだろうな。 結局、元のブログ主の?話題づくりに利用されているだけな気が知る
203 名前:仕様書無しさん mailto:sage [2009/09/21(月) 12:19:30 ] 元ネタ知らずにレスしてる香具師いたのか。
204 名前:ぅゅ ◆e6.oHu1j.o [2009/09/22(火) 12:13:28 ] この問題って日本のものじゃないよね 海外っていうとレベル高そうにおもえるけど実はそうでもないんじゃ
205 名前:仕様書無しさん mailto:sage [2009/09/22(火) 12:19:23 ] PowerShellバージョンが最強だな
206 名前:仕様書無しさん mailto:sage [2009/09/22(火) 19:19:48 ] >>202 この問題すら解けない奴がいるって事なんじゃまいか?
207 名前:仕様書無しさん mailto:sage [2009/09/23(水) 00:08:33 ] >>202 たとえ時間を充分にかけても正答にたどり着けないような人が 現実にはたくさん面接に来るんだよ 素養があるかどうかを見るんではなくて 素養がまるでない人をふるい落とすための簡易的な試験という位置づけ
208 名前:仕様書無しさん [2009/09/23(水) 00:23:36 ] Fortran90 program hoge implicit none integer :: i do i=1,200 if (mod(i,15).eq.0) then print *,'Fizz Buzz' else if (mod(i,5).eq.0) then print *,'Buzz' else if (mod(i,3).eq.0) then print *,'Fizz' else print *,i end if end do end program hoge
209 名前:仕様書無しさん mailto:sage [2009/09/24(木) 12:59:58 ] >>203 >>1 のリンク先すら読まない莫迦が そんだけ沢山いるってことでしょうな。
210 名前:仕様書無しさん mailto:sage [2009/09/24(木) 16:41:34 ] スレタイ嫁、1嫁だけなら分かるけど、 1のリンク先まで必須となると、何か違うような気がする。 あと、何ていうか、「リンク先まで嫁」と、「2分以内」って、同じ部類のように思える。 自分の脳内ででっち上げた完璧さを、周囲の人に対して、期待している点において。 嫌味な言い方をすれば、配慮や謙虚さが足りないって言うか。
211 名前:仕様書無しさん mailto:sage [2009/09/25(金) 03:28:04 ] それをたらたら書いてる時間でリンク先読むのは十分可能だよな? 元ネタは採用試験の話だ、くらいはFizzBuzzより簡単にわかるよな。 配慮や謙虚さが足りないって、むしろそっちじゃないのか。 嫌味な言い方だがな。
212 名前:仕様書無しさん mailto:sage [2009/09/25(金) 15:11:26 ] 情報の提示の仕方が悪い、 ボクちゃんは悪くない、おまえが悪い、おまえの教え方が悪い というのは、典型的なゆとり脳の主張ですw
213 名前:仕様書無しさん [2009/10/19(月) 21:26:19 ] 出来るだけ短く ここで一応動いたよ。→codepad.org/ #include <stdio.h> #define p printf main(){int i;for(i=1;i<=100;i++)if(!p("%s",p("%s%s",i%3?0:"Fizz",i%5?0:"Buzz")?"\n":0))p("%d\n",i);}
214 名前:仕様書無しさん mailto:sage [2009/10/19(月) 22:09:10 ] これはコードゴルフじゃないんだぜ。 実行環境はなし。もしコンパイルが通らない、結果が間違っていたらその場で銃殺。 というシビアな条件で最も間違いにくいコードに最高得点をあげたい。
215 名前:仕様書無しさん [2009/10/19(月) 22:28:45 ] その条件だと、HQ9F+で書くのが、最強か? ttp://cfs.maxn.jp/neta/HQ9F+.html ※元になったのはHQ9+という、ネタ言語。 Hと入力すれば、Hello worldを出力してくれる。 ttp://ja.wikipedia.org/wiki/HQ9%2B
216 名前:コード書き忘れた mailto:sage [2009/10/19(月) 22:30:41 ] ++++++++++f 私の個人的な意見になるけど、 Fの一文字で、FizzBuzzを出力できるようにした方が、HQ9+っぽいと思うんだけどね。
217 名前:仕様書無しさん mailto:sage [2009/10/19(月) 22:45:37 ] Cで書いたら緊張のあまりセミコロン忘れてあぼーんだなw
218 名前:Go mailto:sage [2009/11/17(火) 17:06:00 ] package main import "fmt" func main() { for i:=1;i<101;i++ { s:=""; if i%3==0 { s+="Fizz" } if i%5==0 { s+="Buzz" } if s=="" { s=fmt.Sprintf("%d",i) } fmt.Printf(s+"¥n") } }
219 名前:仕様書無しさん mailto:sage [2009/11/17(火) 19:50:32 ] 何度見ても気持ち悪い文法だなあ
220 名前:仕様書無しさん mailto:sage [2009/11/18(水) 05:13:33 ] for i in range(100): if (i % 3) == 0 and (i % 5) == 0: print u'FizzBuzz' elif (i % 3) == 0: print u'Fizz' elif (i % 5) == 0: print u'Buzz' else: print i
221 名前:うゆ ◆e6.oHu1j.o mailto:sage [2009/12/03(木) 05:10:19 ] 100.times do |n| str = String.new str = n%15==0?:fizzbuzz:n%5==0?:fizz:n%3==0?:buzz:"" print "%03d:%s\n" % [n,str] end
222 名前:仕様書無しさん mailto:sage [2010/04/21(水) 22:59:37 ] 剰余(割り算の余り)を出すのに演算子の % 以外で計算できますか? % を忘れると大変だぞ!
223 名前:仕様書無しさん [2010/04/21(水) 23:31:11 ] 剰余 % を忘れたときに使える方法だと思う。 この問題で肝心なところは % と 「かつ」の && だな。あー恥ずかしい class TestFizBuz { public void mes() { int int3 = 0; int int5 = 0; for (int i = 1; i <= 100; i++) { if (int3 < i/3 && int5 < i/5) { System.out.println("FizzBuzz: " + i); int3 = i/3; int5 = i/5; } else if (int3 < i/3) { System.out.println("Fizz: " + i); int3 = i/3; } else if (int5 < i/5) { System.out.println("Buzz: " + i); int5 = i/5; } else { System.out.println(i); } } } public static void main(String[] args) { TestFizBuz tfb = new TestFizBuz(); tfb.mes(); } }
224 名前:仕様書無しさん mailto:sage [2010/04/22(木) 00:07:26 ] 向こうの子供はハッキングしまくりだってのにお前らときたら… 【調査】13歳までにハッキングをした経験した34%――米英の若者の実態調査(10/04/15) pc11.2ch.net/test/read.cgi/pcnews/1271336569/
225 名前:仕様書無しさん mailto:sage [2010/04/22(木) 02:12:40 ] >>221-223 うゆw問題からしてわかってねぇwwさすが天才www "mes"w "kard"とおんなじwwメソッドwww
226 名前:仕様書無しさん [2010/04/23(金) 00:56:20 ] >>225 223は動作は当たっているんじゃない。 % を使用しない方法ではこれでいいんじゃない?
227 名前:仕様書無しさん mailto:sage [2010/04/23(金) 01:42:01 ] >>224 それってさ、漏れパスを使ったとか 正しい言い方忘れたが、「スクリプト使用のガキ」も含んででない?
228 名前:仕様書無しさん mailto:sage [2010/04/23(金) 01:44:07 ] Script kiddie ?
229 名前:仕様書無しさん mailto:sage [2010/04/23(金) 02:07:26 ] >>226 %を使う使わない以前に結果を他のコードと比べるくらいなぜできない? 数学のテストで「計算結果は違うけど式はあってますよね」とか言うクチか。
230 名前:仕様書無しさん mailto:sage [2010/04/23(金) 02:59:12 ] %を忘れたwという変な条件を入れたとしても、 int reminder(int divisor, int dividend) みたいな相当するメソッドを作るだろふつー。 直近の3と5の倍数を保持して商と比べるなんてせんでも。 void型のメソッドしか認めんwのなら別だけどさ。
231 名前:仕様書無しさん mailto:sage [2010/04/23(金) 14:41:46 ] >>229 結果は当たっているよ。書き方の問題ね。
232 名前:仕様書無しさん mailto:sage [2010/04/23(金) 14:57:18 ] >>1 >1から100までの数をプリントするプログラムを書け。 >ただし3の倍数のときは数の代わりに「Fizz」と、5の倍数のときは「Buzz」とプリントし、3と5両方の倍数の場合には「FizzBuzz」とプリントすること。 とあるのに3や5をプリントアウトしたらただの間違いだろ。 問題をちゃんと読んでねぇアホじゃねーか。
233 名前:231 mailto:sage [2010/04/23(金) 15:26:12 ] >>232 あー そこか
234 名前:仕様書無しさん mailto:sage [2010/04/24(土) 03:25:23 ] 223に感動した。 コード読んでも、何やってるのかワカランかったが、 int3, i/3, int5, i/5 の値を出力してみたら、発想の奇抜さにたまげた。
235 名前:234 mailto:sage [2010/04/24(土) 03:33:23 ] 233の計算テクはそのままで、変数int3,int5を取り去ったコード。 if ((i-1)/3!=i/3 && (i-1)/5!=i/5) { printf("FizzBuzz\n"); } else if ((i-1)/3!=i/3) { printf("Fizz\n"); } else if ((i-1)/5!=i/5) { printf("Buzz\n"); } else { printf("%d\n",i); }
236 名前:仕様書無しさん mailto:sage [2010/04/24(土) 03:35:25 ] 訂正 ×233 ○223 あと、if ((i-1)/15!=i/15) でOKだ。
237 名前:仕様書無しさん mailto:sage [2010/04/24(土) 03:59:03 ] iが正の整数なら剰余%は除数xについてi-(int(i/x)*x)なんだから当たり前じゃん。 %を忘れてどうこうってのがどうかしてる。馬鹿?
238 名前:仕様書無しさん mailto:sage [2010/04/24(土) 10:03:06 ] %を忘れた人のため:その2 #include <stdio.h> int rem3is0[16]={1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1}; int rem5is0[16]={1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1}; int compact( unsigned int n ) { n = ( n & 0x0f0f0f0f ) + ((n>>4 )&0x0f0f0f0f); n = ( n & 0x00ff00ff ) + ((n>>8 )&0x00ff00ff); n = ( n & 0x0000ffff ) + ((n>>16 )&0x0000ffff); return ( n > 15 )? compact(n): n; } #define N 100 int main( ) { unsigned int i; for( i = 1; i <= N; ++i ) { int j = compact(i); if( rem3is0[j] & rem5is0[j] ) { printf( "FizzBuzz " ); } else if( rem3is0[j] ) { printf( "Fizz " ); } else if( rem5is0[j] ) { printf( "Buzz " ); } else { printf( "%i ", i ); } } }
239 名前:仕様書無しさん mailto:sage [2010/04/24(土) 10:14:09 ] 修正: "%i " → "%u "
240 名前:仕様書無しさん mailto:sage [2010/04/24(土) 13:09:56 ] >238の応用 その3 ifも忘れた人のため #include <stdio.h> char *fz[16]={"","%u ","%u ","Fizz ","%u ","Buzz ","Fizz ", "%u ","%u ","Fizz ","Buzz ","%u ","Fizz ","%u ","%u ","FizzBuzz "}; int compact( unsigned int n ) { n = ( n & 0x0f0f0f0f ) + ((n>>4 )&0x0f0f0f0f); n = ( n & 0x00ff00ff ) + ((n>>8 )&0x00ff00ff); n = ( n & 0x0000ffff ) + ((n>>16 )&0x0000ffff); return ( n > 15 )? compact(n): n; } #define N 100 int main( ) { unsigned int i; for( i = 1; i <= N; ++i )printf( fz[compact(i)],i); }
241 名前:仕様書無しさん mailto:sage [2010/04/24(土) 13:23:30 ] >>240 いや、それだとこれと変わらなくて興が削がれるからだめだろ。 #include <stdio.h> char *fz[16]={"","%u ","%u ","Fizz ","%u ","Buzz ","Fizz ", "%u ","%u ","Fizz ","Buzz ","%u ","Fizz ","%u ","%u ","FizzBuzz "}; int main( ) { unsigned int i; for( i = 1; i <= 100; ++i )printf( fz[i-i/15*15],i); }
242 名前:仕様書無しさん mailto:sage [2010/04/24(土) 13:35:29 ] あまり変わらんけど関数テーブル版 #include <stdio.h> #include <stdint.h> void fb(uint32_t x){ printf( "FizzBuzz " ); } void f(uint32_t x){ printf( "Fizz " ); } void b(uint32_t x){ printf( "Buzz " ); } void n(uint32_t x){ printf( "%lu ", (unsigned long)x ); } void (*fn[4])(uint32_t) = { n, b, f, fb }; const uint32_t FN = 0xc1241843; unsigned int compact( uint32_t n ) { n = ( n & 0x0f0f0f0f ) + ((n>>4 )&0x0f0f0f0f); n = ( n & 0x00ff00ff ) + ((n>>8 )&0x00ff00ff); n = ( n & 0x000000ff ) + ((n>>16 )&0x000000ff); n = ( n & 0x0000000f ) + ((n>>4 )&0x0000000f); n = ( n & 0x0000000f ) + ((n>>4 )&0x0000000f); return n; } #define N 100 int main( ) { for( uint32_t i = 1; i <= N; ++i ) { (*fn[(FN>>compact(i)*2)&3])(i); } }
243 名前:仕様書無しさん mailto:sage [2010/04/24(土) 21:33:16 ] これはすごいね。 15回に1回ごとに3と5の倍数が来ることを想定して配列に代入しているという 理解でいいのかな。 class FizzBuzz { static final String strFizBuz[] = {"","","Fizz ","","Buzz ","Fizz ", "","","Fizz ","Buzz ","","Fizz ","","","FizzBuzz "}; public static void main(String[] args) { int count = 0; for (int i = 1; i <= 100; i++) { if (strFizBuz[count].equals("")) { System.out.println(i); count++; } else if (strFizBuz[count].equals("Fizz ") || strFizBuz[count].equals("Buzz ")) { System.out.println(strFizBuz[count]); count++; } else if (strFizBuz[count].equals("FizzBuzz ")) { System.out.println(strFizBuz[count]); count = 0; } } } } 簡単にするとこれでもOKでしょ
244 名前:仕様書無しさん mailto:sage [2010/04/24(土) 22:55:00 ] >243 >15回に1回ごとに3と5の倍数が来ることを想定して配列に代入しているという >理解でいいのかな。 全然違う。 関数compactが15で割った余りを(%演算子無しで)計算しているのがポイント。 下から4bitづつに区切って(まぁ上からでも同じだけど)、それを全部足したものと元の値では 15で割った余りが同じになることを利用している。 なぜそうなるかはちょっと頭をしぼって考えてみな
245 名前:仕様書無しさん mailto:sage [2010/04/24(土) 23:07:38 ] 10進数でmod 9が各桁の値の和に等しいってのと同じ話か。 16進数で考えてみようと思ったことが無かったぜ。
246 名前:仕様書無しさん mailto:sage [2010/04/24(土) 23:53:32 ] 明らかに%演算子より知名度低そうな知識だな…
247 名前:243 mailto:sage [2010/04/25(日) 09:43:48 ] >>244 違っていたか。しぼって考えてみます。
248 名前:(u_・y) ◆e6.oHu1j.o mailto:sage [2010/04/26(月) 04:48:47 ] >>225 おれが過去にかいたコードを描いたときにかんがえてた事を 予想すると、お前のその意味不明なレスもなんとなくわかるよ おれが適当に描いた部分は、 たとえ、プログラミング知らない奴でも修正できそうなレベルだ っていうところまではわかるか?? だれにでも解ける場所とか、自分が過去に解いた場所は適当になる それがuy。 その適当具合は、常軌を逸しているかもしれない 問題すら適当に読むか読まないし、コンパイルチェックもしないで2chに貼り付けたりもする たとえそれが間違っていてもどうでもいいやという気分になる まとめると: おれは忙しいから 無駄なことに時間は使いたくない
249 名前:仕様書無しさん mailto:sage [2010/04/26(月) 05:26:25 ] >>246 mod 9 = 0 の場合に限れば、「全桁の数字を足すと9の倍数になる数は9の倍数」 っていう中学生でも知ってる話だぜ。
250 名前:仕様書無しさん mailto:sage [2010/04/26(月) 08:13:08 ] 言い訳にもなってねえ 流石屑ニート様
251 名前:革命家[uy] ◆rT33C51l9k mailto:sage [2010/05/01(土) 21:52:31 ] え・・・、って思った よほどのヴぁかか、全然初心者レベルだろお前
252 名前:仕様書無しさん mailto:sage [2010/05/02(日) 00:20:36 ] 頭大丈夫?
253 名前:革命家[uy] ◆e6.oHu1j.o mailto:sage [2010/05/04(火) 10:42:56 ] さっさと追いつけよのろま
254 名前:仕様書無しさん mailto:sage [2010/05/04(火) 13:54:14 ] 職歴なしニートにおいつくのはもう無理なんで。。
255 名前:仕様書無しさん mailto:sage [2010/05/07(金) 19:45:27 ] using System; public class FizzBuzzFormat : IFormatProvider, ICustomFormatter { private static char[] Z = new char[] {'Z'}; public object GetFormat(Type formatType) { return formatType == typeof(ICustomFormatter) ? this : null; } public string Format(string format, object arg, IFormatProvider provider) { if (format == null) return String.Format("{0}", arg); if (format.StartsWith("Z")) { int n = (int) arg; bool m3 = n % 3 == 0, m5 = n % 5 == 0; return m3 ? (m5 ? "FizzBuzz" : "Fizz") : (m5 ? "Buzz" : n.ToString()); } if (arg is IFormattable) return ((IFormattable)arg).ToString(format, provider); return arg.ToString(); } } public class FizzBuzz { static void Main() { var fbf = new FizzBuzzFormat(); for (var i = 1; i <= 100; i++) Console.WriteLine(String.Format(fbf, "{0:Z}", i)); } }
256 名前:仕様書無しさん [2010/05/23(日) 02:47:37 ] for i=1,100 do s ="" if( i % 3 == 0 )then s="Fizz" end if( i % 5 == 0 )then s=s.."Buzz" end if( s == "" )then s=i end print( s ) end 安直だなぁ、自分。
257 名前:仕様書無しさん [2010/05/23(日) 04:13:08 ] >>256 その方法が一番だよ シンプルイズベスト 業務のプログラムであんまり凝ったコード書かれると困る
258 名前:仕様書無しさん mailto:sage [2010/05/26(水) 18:28:21 ] 割り算や余剰を使うと計算コストが高い。 平凡にカウンタを使うほうが早い。 正しく解くだけじゃなくて高速性を考えないといけないのにわかってないアホ多すぎ
259 名前:仕様書無しさん [2010/05/26(水) 20:40:51 ] 確かにそうだけど 今の時代はI/O関係なければそんなに速度なんて変わらないから ぱっと見でわかりやすいほうがいいだろ いつの時代だよ
260 名前:仕様書無しさん [2010/05/26(水) 22:45:50 ] using System; class FizzBuzz { static void Main() { var a = new[] { new { Multiple = 3, Indication = "Fizz" }, new { Multiple = 5, Indication = "Buzz" } }; int[] c = new int[a.Length]; for (int i = 1; i <= 100; i++) { bool fb = false; for (int j = 0; j < a.Length; j++) { if (++c[j] == a[j].Multiple) { Console.Write(a[j].Indication); c[j] = 0; fb = true; } } Console.WriteLine(fb ? "" : i.ToString()); } } }
261 名前:仕様書無しさん mailto:sage [2010/05/27(木) 13:32:51 ] >>258 その労力は、検索アルゴリズムの選択とか、枝刈りとか、効果出やすい所につぎこめよw 値を記憶するのは、どうしようもなく高速化最優先の場合か、せいぜい、三角関数のテーブル化あたりだね。
262 名前:仕様書無しさん mailto:sage [2010/05/28(金) 02:01:12 ] Python、短絡評価とジェネレータ内包表記で。 def fizz(x): return x % 3 == 0 and 'Fizz' or '' def buzz(x): return x % 5 == 0 and 'Buzz' or '' def fizzbuzz(x): return ''.join((fizz(x), buzz(x))) or str(x) print '\n'.join(fizzbuzz(x) for x in xrange(1, 101))
263 名前:仕様書無しさん mailto:sage [2010/05/31(月) 13:22:37 ] Pythonでとりあえず標準的に書いてみる 見れば分かるとおり、無限ループするよ i=0 while True: print i, if i%3==0: print "Fizz", if i%5== 0: print "Buzz", print '\n' i=i+1
264 名前:仕様書無しさん mailto:sage [2010/05/31(月) 13:24:29 ] あれ?スペースが消えた あ、全角じゃないとだめなのか スレ汚ししてすいません
265 名前:仕様書無しさん mailto:sage [2010/05/31(月) 13:29:59 ] >>263-264 こう書きたかったんだろうけど、iの値が常に表示されてしまう i=0 while True: print i, if i%3==0: print "Fizz", if i%5== 0: print "Buzz", print '\n' i=i+1
266 名前:仕様書無しさん mailto:sage [2010/05/31(月) 13:31:13 ] [1から100まで]ってのは仕様だからそれを満たさないと失格だよぅ
267 名前:仕様書無しさん mailto:sage [2010/05/31(月) 13:38:35 ] すんません for i in range(1,100): if i%3==0: print("Fizz",end='') if i%5==0: print("Buzz",end='') print('\n') i=i+1 Python3で書き直し。
268 名前:仕様書無しさん mailto:sage [2010/06/01(火) 00:11:02 ] >>267 問題文を再確認して下さい。 時間がかかってもいいので、落ち着いて。 1 2 Fizz 4 Buzz Fizz 7 8 Fizz Buzz 11 Fizz 13 14 FizzBuzz …
269 名前:仕様書無しさん mailto:sage [2010/06/01(火) 00:26:53 ] #include <stdio.h> #include <stdlib.h> int fizzbuzz(int pos) { if (pos%15==0) { printf("振り出しに戻る\n"); return 1; } else if (pos%5==0) { printf("コンビニまでパシり\n"); } else if (pos%3==0) { printf("服を1枚脱ぐ\n"); } else { printf("%d\n",pos); } return pos; } int main(void) { int pos = 1, saikoro; randomize(); while (pos<100) { saikoro = rand() % 6 + 1; printf("現在位置%d-> %d が出ました\n",pos,saikoro); pos = fizzbuzz(pos+saikoro); } printf("ゴール"); return 0; }
270 名前:仕様書無しさん mailto:sage [2010/06/01(火) 23:40:39 ] for i in range(1,100): if i%3==0: print("Fizz",end='') if i%5==0: print("Buzz",end='') i=i+1 次はLuaでやろうかな
271 名前:仕様書無しさん mailto:sage [2010/06/01(火) 23:42:58 ] ミス for i in range(1,100): print(i,end=' ') if i%3==0: print("Fizz",end='') if i%5==0: print("Buzz",end='') print(' ') i=i+1 こうかな?
272 名前:仕様書無しさん mailto:sage [2010/06/02(水) 00:56:00 ] それも駄目です。
273 名前:仕様書無しさん [2010/06/02(水) 03:23:50 ] perl言語で $c = 0; while ($c < 100){ $c++; print $c . "\n"; if (($c % 3) == 0){print " fizz\n" } if (($c % 5) == 0){print " bizz\n" } }
274 名前:仕様書無しさん [2010/06/02(水) 03:36:33 ] アウトプットを修正 while ($c < 100){ $f = 0; $c++; unless (($c % 15) == 0 ){ if (($c % 3 ) == 0 ) {print "fizz\n"; $f = 1 } if (($c % 5 ) == 0 ) {print "buzz\n"; $f = 1 } }else { print "fizzbuzz\n"; $f = 1 } if ($f == 0 ) { print $c . "\n" } }
275 名前:仕様書無しさん [2010/06/02(水) 03:42:32 ] 274 2chの雑談程度で1分程度で書くとちょっと美しさにかけるな。 もう少し美しさを考えてみる
276 名前:仕様書無しさん mailto:sage [2010/06/02(水) 03:51:17 ] てーか>1読んでから書けよ馬鹿
277 名前:仕様書無しさん [2010/06/02(水) 03:58:46 ] >>276 何が間違ってる?1読んで正しい結果出てると思うんだけど。
278 名前:仕様書無しさん [2010/06/02(水) 04:01:21 ] 大文字の事? while ($c < 100){ $f = 0; $c++; unless (($c % 15) == 0 ){ if (($c % 3 ) == 0 ) {print "Fizz\n"; $f = 1 } if (($c % 5 ) == 0 ) {print "Buzz\n"; $f = 1 } }else { print "FizzBuzz\n"; $f = 1 } if ($f == 0 ) { print $c . "\n" } }
279 名前:仕様書無しさん mailto:sage [2010/06/02(水) 04:05:52 ] while ($c < 100){ $f = 0; $c++; if (($c % 3 ) == 0 ) {print "Fizz"; $f = 1 } if (($c % 5 ) == 0 ) {print "Buzz"; $f = 1 } if ($f == 0 ) { print $c } print "¥n" }
280 名前:仕様書無しさん [2010/06/02(水) 04:11:15 ] >>279 ちょっと綺麗に手直ししてくれてサンクス
281 名前:仕様書無しさん mailto:sage [2010/06/02(水) 05:21:20 ] #include<stdio.h> int main(void){ int i; for(i=1;i<=100;i++){ if(i%15 == 0){ printf("FizzBuzz "); } else if(i%3 == 0){ printf("Fizz "); } else if(i%5 == 0){ printf("Buzz "); } else{ printf("%d ",i); } } return 0; }
282 名前:仕様書無しさん [2010/06/02(水) 15:49:55 ] print" ",($_%3?"":"Fizz").($_%5?"":"Buzz")||$_ for 1..100 最短記録48byteとかどういうことなの…
283 名前:仕様書無しさん mailto:sage [2010/06/02(水) 16:33:50 ] while条件にi<100とか書いてる奴はクビ range(1,100)とか書いてる奴もクビ
284 名前:仕様書無しさん mailto:sage [2010/06/02(水) 16:53:53 ] ttp://golf.shinh.org/p.rb?FizzBuzz#ranking ここだな ちなみに2010/06/02現在だと、 GolfScriptの37文字が今のところ最短 Bashが意外に短くて43文字で二位 Perl6が44文字で三位 Perlが48文字で四位 z80マシンコードが49文字で五位
285 名前:仕様書無しさん mailto:sage [2010/06/02(水) 17:15:41 ] >>282 print+(Fizz)[$_%3].(Buzz)[$_%5]||$_,$/for 1..100
286 名前:仕様書無しさん [2010/06/02(水) 17:48:41 ] >>284 それって、 1位 Bash, 2位 Perl(ver6), 3位 z80 (番外…GolfScript, HQ9F+) のような気がする。 COBOLが、Brainf*ckやWhitespaceのようなネタ言語より、更に下…。 まあ、出力結果の414バイトよりは、小さくなるけど。
287 名前:仕様書無しさん mailto:sage [2010/06/02(水) 17:56:24 ] …出力結果をlha圧縮したら、202バイトになった。 コマンド「lhasa a.lzh」と合わせても、213バイト。 つまり、出力結果>>>>>Esoteric(ネタ言語)>>>>>COBOL
288 名前:仕様書無しさん mailto:sage [2010/06/02(水) 18:59:05 ] いや、COBOLってもともと冗長なの目的な言語だし。 なにいってんのおまいら。
289 名前:仕様書無しさん mailto:sage [2010/06/02(水) 20:58:14 ] >>286 あくまでもここの仕様でのランキングだから、実質とか考える意味は無い 元々ここのランク対象外なHQ9F+を持ち出す意味も無い COBOLが冗長なのも当たり前っちゃ当たり前 Bashっつっても実質ほぼGNU sedだから環境依存だろとか、言い出したらきりがない
290 名前:仕様書無しさん mailto:sage [2010/06/02(水) 21:02:49 ] つーか言語の優劣ランキングと勘違いしてる奴が痛い
291 名前:仕様書無しさん mailto:sage [2010/06/03(木) 00:30:49 ] >>288 「おまいら」っていうか、俺一人。(286=287) この板、ID出ないんだね。 COBOLネタで釣れると思ったら、極めて常識的な意見ばかりで、がっかりだ。
292 名前:仕様書無しさん mailto:sage [2010/06/03(木) 01:24:07 ] 今さらCOBOLなんて知らない世代のほうが多いのかもよ
293 名前:仕様書無しさん mailto:sage [2010/06/03(木) 02:05:48 ] 「釣れると思ったら」は前置と後置で全く印象が変わるな
294 名前:仕様書無しさん mailto:sage [2010/06/03(木) 20:45:17 ] ご迷惑おかけします、>>271 です。 これでどうですか、ダメですか? def fizzbuzz(): i=1 text="" while i<=100: if i%3==0: text += "Fizz" if i%5==0: text += "Buzz" if text=="": yield i else: yield text i+=1 text="" for a in fizzbuzz(): print a,
295 名前:仕様書無しさん mailto:sage [2010/06/04(金) 00:58:12 ] おめでとうございます
296 名前:仕様書無しさん mailto:sage [2010/06/04(金) 02:11:38 ] ジェネレータとか使って関数分けてるのが半端に汎用的で無駄な気もするけど、似た戦略で書くなら、 def fizzbuzz(nums=range(1,101)): for i in nums: s = "" if i % 3 == 0: s += "Fizz" if i % 5 == 0: s += "Buzz" yield i if s == "" else s for s in fizzbuzz(): print s こんな感じにするかなぁ俺だと。さらに悪乗りするなら、 def general_fizzbuzz(nums, *fv): for i in nums: s = "" for f, v in fv: if f(i): s += v yield str(i) if s == "" else s def fizzbuzz(nums=range(1,101)): return general_fizzbuzz(nums, (lambda i: i % 3 == 0, "Fizz"), (lambda i: i % 5 == 0, "Buzz"), ) for s in fizzbuzz(): print s
297 名前:仕様書無しさん mailto:sage [2010/06/04(金) 12:41:52 ] 100が変動することも踏まえて定数にすべきだよな
298 名前:仕様書無しさん mailto:sage [2010/06/04(金) 18:12:44 ] for s in fizzbuzz(itertools.count(-100000)): print s とかに変えたりな
299 名前:仕様書無しさん mailto:sage [2010/06/04(金) 19:06:16 ] 100は所詮デフォルトパラメータだから埋め込んでも問題なくね
300 名前:仕様書無しさん mailto:sage [2010/06/05(土) 00:08:07 ] 一方、Perlはやっぱりキチガイだった ttp://d.hatena.ne.jp/sugyan/20100321/1269174230
301 名前:仕様書無しさん [2010/06/06(日) 01:21:02 ] for i in range(1,101): script = i if (i%3==0)and(i%5==0): script = "FizzBuzz" elif i%3==0: script = "Fizz" elif i%5==0: script = "Buzz" print script
302 名前:仕様書無しさん mailto:sage [2010/06/06(日) 02:00:29 ] pythonはコピペに向かない
303 名前:仕様書無しさん mailto:sage [2010/06/06(日) 23:43:14 ] プログラマーなら「 変換プログラム」作れるよな?
304 名前:仕様書無しさん mailto:sage [2010/06/06(日) 23:53:17 ] >>303 単にスペース置き換えるだけですね?
305 名前:仕様書無しさん [2010/06/07(月) 23:07:35 ] 俺は超高度なセキュリティ対策用データコンバータープログラム作れるぜ。 これによってXSSという世界的脅威を打破できる。
306 名前:仕様書無しさん mailto:sage [2010/06/25(金) 15:51:42 ] dc [sg[]]sx1[ddd3%d[Fizz]r0<xnr5%d[Buzz]r0<xn*0=xpsg1+dd101>M]dsMx
307 名前:仕様書無しさん mailto:sage [2010/07/28(水) 21:13:41 ] あー、Cって文字列直接入れられなかったんだorz。ずっとテスターでorz状態だ c=1; fcint=3; bcint=5; max = 100; fc=fcint; bc=bcint; for (c=1; c>max; c++,fc--,bc--){ f = ""; b = ""; if (fc==1){ f = "fuzz"; fc = fcint; } if (bc==1){ b = "buzz"; bc = bcint; } if (f=="" && b==""){ printf(c) } else{ printf(f + b) } }
308 名前:仕様書無しさん mailto:sage [2010/07/28(水) 23:27:57 ] これは酷い…。
309 名前:仕様書無しさん mailto:sage [2010/07/29(木) 15:47:08 ] #include <stdio.h> //printf使うには、インクルード文が必要 #include <string.h> int main(void) { //main関数が必要 int c=1; //型の宣言が必要 int fcint=3 - 1; //同上 + 下のほうでfc==0に書き換えた分、1をマイナス (※最初に表示する数が1だから) int bcint=5 - 1; //同上 + 下のほうでbc==0に書き換えた分、1をマイナス int max = 100; //同上 int fc=fcint; //同上 int bc=bcint; //同上 for (c=1; c<=max; c++,fc--,bc--){ // c<=maxにしないとループ回らないよ!! char* f = ""; //型の宣言が必要(C++ならstring型を使うこと) char* b = ""; if (fc==0){ //3つおきじゃなくて2つおきになってたよ!! f = "fizz"; //fuzzじゃなくってfizz(笑) fc = fcint + 1; } if (bc==0){ //5つおきじゃなくて4つおきになってたよ!! b = "buzz"; bc = bcint + 1; } if (strcmp(f,"")==0 && strcmp(b,"")==0){ //ポインタと空文字列を比較しないこと(C++なら元のままでOK) printf("%d",c); //数は直接printfできない } else{ printf(f); printf(b); //文字列型ではないので、足し算しないこと(C++なら元のままでOK) } printf("\n"); //できれば、改行すること } return 0; //main関数の戻り値 }
310 名前:仕様書無しさん mailto:sage [2010/07/29(木) 15:52:42 ] ごめん、 fcint=3, bcint=5, fc=fcint-1, bc=bcint-1で、 ループ内が、fc=fcint, bc=bcintだね。 上のでも正常に動くけど。
311 名前:307 mailto:sage [2010/07/29(木) 19:09:51 ] >>309 わお。訂正していただけて、マジ参考になりますthx つか俺は文法勉強しなおしだー・・・
312 名前:仕様書無しさん mailto:sage [2010/09/19(日) 01:44:08 ] main(i){for(;i-101;puts(i++%5?"":"Buzz")){printf(i%3?i%5:"%d":0:"Fizz");}
313 名前:仕様書無しさん [2010/09/20(月) 20:33:16 ] print 1 print 2 print Fizz print 4 print Buzz print Fizz ... end.
314 名前:仕様書無しさん mailto:sage [2010/09/22(水) 00:04:40 ] >>312 printfの引数、なにそれ?
315 名前:仕様書無しさん mailto:sage [2010/09/24(金) 21:14:51 ] とりあえず動かして見ろ
316 名前:仕様書無しさん mailto:sage [2010/09/25(土) 00:54:15 ] バグってるって話だろ。 main(i){for(;i-101;puts(i++%5?"":"Buzz")){printf(i%3?i%5?"%d":"Buzz":"Fizz",i);}}
317 名前:仕様書無しさん mailto:sage [2010/09/25(土) 01:08:43 ] あ、いけね俺も失敗してら。結果は見た目正常風だとは思うが。
318 名前:仕様書無しさん [2010/10/22(金) 13:04:46 ] FizzBuzzを極めてもう2年ほどたちます。 そろそろ採用してくれる会社を紹介してください。
319 名前:仕様書無しさん mailto:sage [2010/10/23(土) 21:07:58 ] 条件@ もっとも安く仕上げよ 条件A 運用コストは電源を入れてから1秒あたり1ドルかかる システムは以下の性能 1. キー入力は1入力あたり1秒かかる shiftキー等の押下・離放もカウントする 2. 文字入力は1文字あたり1ドルかかる 3. プログラム入力後、コンパイル・実行開始までの秒数はカウントしない 4. 実行は1行表示ごとに1秒かかる。表示した後同じ行に上書き表示 するようなものは、上書きの度に1秒かかる 5. 100行目(Buzz) 表示完了時までをコスト計算する
320 名前:仕様書無しさん mailto:sage [2010/10/23(土) 23:07:51 ] Webプログラムじゃないのに{}を省略する理由はなんだろうか? 俺が昔読んだ本では{}は省略するなとあったけど 流行かな?
321 名前:仕様書無しさん mailto:sage [2010/10/23(土) 23:43:24 ] >>319 条件が曖昧すぎて、パズルとして成り立ってないよ プロ奴隷使えば安くなるんじゃねw >>320 宗教論争
322 名前:仕様書無しさん mailto:sage [2010/10/24(日) 10:36:38 ] たしかコンパイルしたら同じだから人間が読みやすいように 括弧でわかりやすく書くとあったけど。 そういう俺もめんどくさいとき括弧を省略するけど。
323 名前:仕様書無しさん mailto:sage [2011/01/02(日) 07:37:02 ] Cのifとかの話なのかなぁ LinuxカーネルやGnuみたいにメジャーなところでも、ifの{}は複文じゃなければ必ず 省略すること(ネストした時を除く)というルールを採用してる超大規模コードも あるのよ オフサイドルールで成り立っちゃってる言語もあるくらいだから、本当は言うほどの 危険は無いのかもしれん、と思うようになってからは、省略派に鞍替えしたというか、 元々省略してた(それでバグった記憶も無かった)ので省略派に戻ったというか
324 名前:仕様書無しさん mailto:sage [2011/01/14(金) 20:35:03 ] 迷路の最短経路を求める問題が、とあるブログで出題された okajima.air-nifty.com/b/2010/01/post-abc6.html 人材獲得作戦・4 試験問題ほか まともなプログラマーなら幅優先探索ぐらい知ってるから当然のことながら解くことが出来るよな
325 名前:仕様書無しさん mailto:sage [2011/01/18(火) 02:22:56 ] ↑「幅優先探索」とか、答え書かないでよ…。 でも、単純な幅優先なら、計算量爆発するよね。 25分〜3時間か。FizzBuzz位ならともかく、やってらんない。ギブアップだわ。寝る。
326 名前:325 mailto:sage [2011/01/18(火) 02:37:27 ] ゴメン、枝切りすれば、それなりに実用的な速度にはなりそうではあるね。(全部スペースとかでない限り。) まぁ、なんか面倒臭そうなので、プライド捨てるわ。 実行時間無視の書き捨てコードとかじゃ、ダメ扱いされそうだし。
327 名前:325 mailto:sage [2011/01/18(火) 03:48:46 ] 大学は情報系でないので、力技。(全てのセルに、最初のポイントからの位置を書き込み。) 予想通り、デバッグで時間取られる。 そもそも、やる気ないから、コードは汚いし。 バカバカしくなってきたから、中断する。 「まともなプログラマーなら〜」って言葉に、どうしても反応してしまう。 挑発に乗っちゃうクセを直さないとね。
328 名前:325 mailto:sage [2011/01/18(火) 03:54:46 ] 何かイライラする。 さらっと数行で書けるものならともかく、意味の無いコード、1時間も書かされるとちょっと。 別に、芸のある出題でもないし。 スルーして、フリーソフトのメンテしとくんだったと後悔。
329 名前:325 mailto:sage [2011/01/18(火) 03:56:46 ] 一応、Cで、セルに番号振るところまで書いた。 デバッグ含め、1時間半か。 ちょっと無能かもしれんが、馬鹿にするなら、馬鹿にしてくれ。
330 名前:325 mailto:sage [2011/01/18(火) 04:44:16 ] あ、出来た。 嫌々やるのやめて、コード整理したら、出来た。 100ステップって、ちょっと簡単に書き捨てられる量じゃない。 頭でアルゴリズム簡単に思いついても、デバッグに時間がかかるし。 「プログラマーなら出来なきゃ困る」なら、実際に書かなければならないんだから、時間のことも考えて欲しい。 あと、ブログで示されていたアルゴリズム、文系には辛いよ。 こっち系だとは思ったけど、昔、本で名前知った程度だから、ググルや参考書なしでは無理。力技しかなかった。 まあ、>>324 は、スルー力検定だったのだなw
331 名前:仕様書無しさん mailto:sage [2011/01/18(火) 12:40:58 ] リアル厨房の時に、マイクロマウスでやったな。 8bitマイコンでモータやらセンサやらの面倒を見つつ、 迷路脱出させてた。 出口が隅じゃなく、内部に有ると泣いたw
332 名前:325 mailto:sage [2011/01/18(火) 15:33:00 ] >>331 あれって、総当り方式じゃん。左側か右側かの壁伝ってくんだっけ? >>324 の問題って、なんか、「求職者を見下したい」感がヒシヒシ伝わってきて嫌。 プログラムって、もっと、大らかに、何日もかけて、じっくり楽しむべきものなんだよね。 3時間とか、時間区切ってコーディングするのは、仕事でもない限り、邪道。 マイコンロボを試行錯誤して動かしたりとか、何日も考えてパズルの最適アルゴリズムを見出したりとか。
333 名前:仕様書無しさん mailto:sage [2011/01/18(火) 20:42:37 ] >あれって、総当り方式じゃん。左側か右側かの壁伝ってくんだっけ? だから、それだと出口が内部に有ると駄目だし、ループしてる柱みたいな 場所が有ると永久ループ。 一応、自分が通った経路を記憶しておいてマッピングしながら移動する のだが、タイヤのスリップとかセンサの誤検知とか有るので、信頼度の 重み付けしながらファジーにマッピングして行く。 汚部屋と言う名の迷路を掃除するロボット、ルンバも作れなさそうだな。 中国製ランダムウォークのパチ物に負けるぞ。
334 名前:仕様書無しさん mailto:sage [2011/02/06(日) 02:07:41 ] >>324 ためしにやってみた hibari.2ch.net/test/read.cgi/tech/1215352849/294 >>325->>330 きにすんな 幅優先探索という言葉は知っていてもロジックを忘れてしまったから 解くのに3時間ぐらいかかった ところで何のフリーソフト作ってる? すごく気になるから教えて 使ってみたい
335 名前:仕様書無しさん mailto:sage [2011/02/08(火) 23:42:25 ] >>325 幅優先探索の場合、計算時間より計算空間の方が先に破綻するんじゃ ないかな。特にRAMの容量に限りの有る組込み制御の場合。 8bit時代は、オセロとか将棋も深さ優先探索してた。例外は森田和郎 ぐらいで、これもSSS*探索とαβ探索のハイブリッド。
336 名前:仕様書無しさん mailto:sage [2011/03/07(月) 11:10:02.94 ] なつかしい話題発見。 全セル分のワークと若干のキューが確保できればいいんだから そんなにメモリ圧迫するってほどでもないような。 といっても対象フィールドの広さにもよるだろうが、 例の出題程度の広さだったら破綻の心配はまずしなくていいでしょう。 各セルごとにゴール、スタート、障害物、未踏地、 既に歩いた地(「来た方向」の保持兼用)の区別がつけばいいので ワークは各セルごとに1バイト(最低4ビット)あれば十分足りるし。 でも深さ優先探索しか知らなかった(書いたことがなかった)ので 試しに解いてみた時にはちょっと手こずってしまった。 ちなみに件の例題では深さ優先探索でも実用時間内に解けてしまう。 これって結構ワナかもな、と思った。
337 名前:仕様書無しさん mailto:sage [2011/03/18(金) 10:49:36.47 ] 空気読まずにCLOSでfizzbuzz, (defgeneric fbzz (%3 %5 n) (:method (%3 %5 n) (print n)) (:method ((%3 fixnum) %5 n) (print 'fizz)) (:method (%3 (%5 fixnum) n) (print 'buzz)) (:method ((%3 fixnum) (%5 fixnum) n) (print 'fizzbuzz))) (defun fizz-buzz (n) (fbzz (/ n 3) (/ n 5) n)) (loop for i from 1 to 100 do (fizz-buzz i))
338 名前:プログラマ志望の経済学部4年生 mailto:sage [2011/06/10(金) 16:54:07.54 ] プログラミング始めて3週間です、どうですか? #include <stdio.h> int main(void) { int a; for (a = 1; a <= 100; a++) { if (a % 3 == 0 && a % 5 == 0) printf ("FizzBuzz\n"); else if (a % 3 == 0) printf("Fizz\n"); else if (a % 5 == 0) printf("Buzz\n"); else printf("%d\n", a); } return 0; }
339 名前:仕様書無しさん mailto:sage [2011/06/11(土) 00:06:20.06 ] どうですかって言われても まぁいいんじゃね あえて言えば平凡すぎて面白みがなくてつまらん
340 名前:仕様書無しさん [2011/06/11(土) 03:43:41.34 ] いい機会なんで?演算子を使ってみよう
341 名前:仕様書無しさん mailto:sage [2011/06/11(土) 10:56:59.64 ] まいど = まいど?まいどぉ:まいどぅ
342 名前:仕様書無しさん mailto:sage [2011/06/11(土) 11:19:06.80 ] こうかな int main(void){ char *s[4] = { " ","Fizz","Buzz","FizzBuzz"}; int i; for (i=1;1<=100;i++){ sprintf(s[0],"%d",i) puts(s[(i%5==0)<<1+(i%3==0)]); } } 確認してないからわからんがかなり速の筈 sprintf部分を自分で書けばもっと速くなる
343 名前:仕様書無しさん mailto:sage [2011/06/11(土) 11:31:36.95 ] こうすればもっと早いな int main(void){ char *s[4] = { " ","Fizz","Buzz","FizzBuzz"}; int i, j; for (i=1;1<=100;i++){ j=(i%5==0)<<1+(i%3==0); if(j==0) sprintf(s[0],"%d",i); puts(s[j]); } }
344 名前:仕様書無しさん mailto:sage [2011/06/11(土) 17:32:44.94 ] 無限ループするじゃん。
345 名前:仕様書無しさん mailto:sage [2011/06/11(土) 18:10:12.16 ] 1<=100はともかく、<<演算子の優先順位が+より低いのにハマってるよ。 *2にしても多分同じオブジェクトが出るとは思うけどね。 ↓結果 int main(void){ char *s[4] = { " %d¥n","Fizz¥n","Buzz¥n","FizzBuzz¥n"}; int i; for (i=1;i<=100;i++)printf(s[(!(i%5)<<1)+!(i%3)],i); }
346 名前:仕様書無しさん mailto:sage [2011/06/11(土) 21:04:59.44 ] 確認してないからわからんがかなり速の筈
347 名前:仕様書無しさん mailto:sage [2011/06/11(土) 21:07:23.93 ] Link: codepad.org/OUmFv01u int main(void){ char *s[4] = { " ","Fizz","Buzz","FizzBuzz"}; int i; for (i=1;1<=100;i++){ sprintf(s[0],"%d",i) puts(s[(i%5==0)<<1+(i%3==0)]); } } In function 'main': Line 6: error: expected ';' before 'puts'
348 名前:仕様書無しさん mailto:sage [2011/06/11(土) 21:09:13.71 ] Link: codepad.org/LsWu5lBF int main(void){ char *s[4] = { " ","Fizz","Buzz","FizzBuzz"}; int i, j; for (i=1;1<=100;i++){ j=(i%5==0)<<1+(i%3==0); if(j==0) sprintf(s[0],"%d",i); puts(s[j]); } } Output: Segmentation fault
349 名前:仕様書無しさん mailto:sage [2011/06/12(日) 02:55:39.33 ] FizzBuzzはできて当たり前、がんばるもんじゃないんだけどな。 「どうだっ」みたいな人が会社にいて困った。
350 名前:仕様書無しさん mailto:sage [2011/06/12(日) 12:27:40.95 ] int main(void){ char *p, c[] = " "; char *s[] = { "","Fizz","Buzz","FizzBuzz"}; int i, j, k; s[0] = c; for (i=1;i<=100;i++){ j = ((i%5 == 0)<<1) + (i%3 == 0); if(j==0) { p = c; k = i; if(k >= 100) { *p++ =k/100 +'0'; k =k%100; } if(k >= 10) { *p++ =k/10 +'0'; k =k%10; } *p++ =k +'0'; *p = NULL; } puts(s[j]); } return 0; } 動くようにするとこうだな sprintfはよくわからんのではずしたわ
351 名前:仕様書無しさん mailto:sage [2011/06/12(日) 18:18:48.82 ] 平凡 use strict ; my $m3 = 3 ; my $m5 = 5 ; for( my $n = 1 ; $n <= 100 ; ++$n ) { if( $m3 == $n ) { $m3 += 3 ; if( $m5 == $n ) { $m5 += 5 ; print STDOUT "FizzBuzz\n" ; } else { print STDOUT "Fizz\n" ; } next ; } if( $m5 == $n ) { $m5 += 5 ; print STDOUT "Buzz\n" ; next ; } print STDOUT $n, "\n" ; } exit(0) ; __END__
352 名前:仕様書無しさん mailto:sage [2011/06/13(月) 23:12:21.79 ] 1.可変性 このプログラムが実用になった場合、標準出力以外のものに出すよう変更の必要があると思われるが、簡単にできるよう考慮されているか 倍数が3のみで5なしになったら?逆に両方残したまま7が増えたら?条件変わってもすぐに変更できるか 2.動作速度 十分速いかあるいは速度アップの必要が生じた場合、どこをいじればよいか?具体的に内部でどういう動作が 行われているかわかっているか 等をワシなら気にするな 最初黙っててできた後から上記のような質問してもすぐに対応したら、かなりできる奴だと思うわ
353 名前:仕様書無しさん mailto:sage [2011/06/14(火) 01:46:04.12 ] いや、そもそも「かなりできる」奴か見るためのテストじゃないし。 がんばるもんじゃないったらスレ終わりじゃん。ここマ板だし。 こんな書き方もある、ってお遊びだよ?言わせんな恥ずかしいw
354 名前:仕様書無しさん mailto:sage [2011/06/15(水) 00:34:09.43 ] ♪フィズバズフィズバズよよいがよい ♪フィズバズフィズバズどどんがどん ♪三の倍数の時はフィズ ♪五の倍数の時はバズ ♪三と五の三と五の ♪公倍数ではフィズバズ印字 ♪フィズバズ音頭でどどんがどん そこのズブズブの日本人のあなた 自然にメロディが浮かんで来たでしょ
355 名前:uy ◆yyC0rYWEq2 mailto:sage [2011/06/16(木) 22:02:56.19 ] メタでかけよ
356 名前:仕様書無しさん mailto:sage [2011/06/17(金) 00:03:58.61 ] >>355 お手本プリーズ
357 名前:仕様書無しさん mailto:sage [2011/06/17(金) 10:22:50.20 ] メタと付く言語はMLとmetafontしか知らんな…
358 名前:仕様書無しさん mailto:sage [2011/06/17(金) 16:55:18.24 ] メタで書けば3や5プリントしてもいいのかw
359 名前:仕様書無しさん mailto:sage [2011/07/07(木) 21:47:26.61 ] haskellとcで!!と思ったら、すでに書かれてた。。。Orz haskellの内包表記で書けないか考えてみる
360 名前:仕様書無しさん mailto:sage [2011/07/08(金) 12:32:30.06 ] using System; class FizzBuzz { static void Main() { for (var n = 1; n <= 100; n++) { var f = (n % 3 == 0 ? "Fizz" : "") + (n % 5 == 0 ? "Buzz" : ""); Console.WriteLine(f == "" ? "{0}" : f, n); } } }
361 名前:仕様書無しさん mailto:sage [2011/07/08(金) 20:37:40.13 ] これがどう問題なのか 誰か詳しく教えてくれ 913 :名無しさん@12周年 :sage :2011/07/02(土) 21:53:57.61 ID:vEYqWa5o0 >>871 アメリカで例えると オバマ大統領がアルカイダにいる、ビンラディンの家族に資金援助していたという事で騒ぎになってる。 オバマがこっそり9.11実行犯の釈放嘆願書に署名 ↓ オバマ「私ははめられた!!うっかり署名してしまった! 私は卑怯で残忍なテロリストを絶対許さない!!」 ↓ オバマはイスラム原理主義の団体から多額の寄付を受け取っていた←追加分 ↓ オバマがこっそりビンラディンの家族に毎年、計6250万円献金 ↓ クリントンもこっそりビンラディンの家族に1000万円献金 ←ここが鳩山分★ ↓ アメリカのメディアは全く報じず ねーよwww
362 名前:仕様書無しさん mailto:sage [2011/07/17(日) 17:04:57.69 ] repeat 99 mes n+cnt if n\15=0 : mes "FizzBuzz": else { if n\3=0 : mes "Fizz" if n\5=0 : mes "Buzz" } loop ;未RUN
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" など)で。