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 言語自由
145 名前:仕様書無しさん mailto:sage [2009/01/25(日) 15:38:05 ] >>143 あからさまに括弧の対応が変。 最初からやり直せ。
146 名前:仕様書無しさん [2009/01/25(日) 17:48:27 ] >>144 thx >>145 そうします。。thx
147 名前:仕様書無しさん mailto:sage [2009/01/25(日) 18:42:08 ] 2chに書き込むときに消えただけかもしれないけど、 ちゃんとインデントして、括弧の位置をそろえると、 無駄な作業を減らせるよ
148 名前:仕様書無しさん mailto:sage [2009/01/25(日) 23:02:54 ] viで%押せば済むだろ。
149 名前:仕様書無しさん mailto:sage [2009/01/26(月) 09:51:37 ] >>148
150 名前:仕様書無しさん mailto:sage [2009/01/27(火) 04:44:11 ] #/bin/sh N=1 while [ $N -le 100 ] do R3=`expr $N % 3` R5=`expr $N % 5` if [ $R3 -eq 0 -a $R5 -eq 0 ] then echo FizzBuzz elif [ $R3 -eq 0 ] then echo Fizz elif [ $R5 -eq 0 ] then echo Buzz else echo $N fi N=`expr $N + 1` done
151 名前:仕様書無しさん mailto:sage [2009/01/27(火) 21:53:31 ] 無駄なfork&exec大杉
152 名前:仕様書無しさん mailto:sage [2009/02/05(木) 00:42:24 ] for(int i = 1, mod3 = 3, mod5 = 5; i <= 100; i++){ if(--mod3 == 0){ mod3 = 3; System.out.print("Fizz"); } if(--mod5 == 0){ mod5 = 5; System.out.print("Buzz"); } System.out.println(mod3 == 3 || mod5 == 5 ? "" : i); }
153 名前:仕様書無しさん mailto:sage [2009/02/14(土) 17:52:59 ] Pythonで、リスト内包表記を使う以外は割と素直にやってみる。 def fizzbuzz(n): if n % 15 == 0: return 'FizzBuzz' if n % 5 == 0: return 'Buzz' if n % 3 == 0: return 'Fizz' return n for x in [fizzbuzz(n) for n in range(1,101)]: print x
154 名前:仕様書無しさん [2009/03/09(月) 22:16:08 ] // これ、もっと簡単になる? using System; using System.Linq; class Program { static void Main(string[] args) { var n = from x in Enumerable.Range(1, 100) select new { Num = x, Print = "" }; var result = from p in n join q in from x in n where x.Num % 3 == 0 select new { x.Num, Print = "Fizz" } on p.Num equals q.Num into r from s in r.DefaultIfEmpty(new { p.Num, Print = "" }) join t in from x in n where x.Num % 5 == 0 select new { x.Num, Print = "Buzz" } on s.Num equals t.Num into u from v in u.DefaultIfEmpty(new { s.Num, Print = "" }) select new { s.Num, Print = s.Print + v.Print } into w select w.Print == "" ? w.Num.ToString() : w.Print; foreach (var i in result) Console.WriteLine(i); } }
155 名前:仕様書無しさん mailto:sage [2009/03/12(木) 05:37:27 ] むしろ、よくそんな書き方が出来たなと言いたい フツーに書いた方が簡単な希ガスw
156 名前:うゆ ◆e6.oHu1j.o mailto:sage [2009/03/13(金) 20:49:29 ] Ozyでぐぐれかす
157 名前:仕様書無しさん mailto:sage [2009/03/13(金) 23:16:03 ] 失せろカス
158 名前:仕様書無しさん mailto:sage [2009/03/15(日) 23:48:00 ] #! /usr/bin/perl foreach(1..100){ print 'Fizz' if $_ % 3; print 'Buzz' if $_ % 5; print $_ unless $_ % 3 or $_ % 5; print "\n"; } 恥ずかしいくらい単純すぎるかな…
159 名前:仕様書無しさん mailto:sage [2009/03/16(月) 00:30:30 ] 恥ずかしいくらい単純なミスしてた…orz
160 名前:仕様書無しさん mailto:sage [2009/03/16(月) 07:37:32 ] 三行以上のプログラムにはバグはつきものさ
161 名前:仕様書無しさん mailto:sage [2009/03/25(水) 23:43:51 ] using System; using System.Collections.Generic; class Program { [STAThread] static void Main() { const int max = 100; var zz = new[] { new KeyValuePair<int, string>(3, "Fizz"), new KeyValuePair<int, string>(5, "Buzz") }; for (var i = 1; i <= max; i++) { var f = true; for (var j = 0; j < zz.Length; j++) { if (i % zz[j].Key == 0) { Console.Write(zz[j].Value); f = false; } } if (f) Console.Write(i); Console.WriteLine(); } } }
162 名前:仕様書無しさん mailto:sage [2009/04/17(金) 20:08:51 ] /* いまさらだけど、C言語でif無し */ #include <stdio.h> void main(void){ int i ; for(i=1 ; i<=100 ; i++){ ((i%3)==0 && (printf("Fizz"),1)) + ((i%5==0) && (printf("Buzz"),1))!=0 || printf("%d", i) ; printf("\n") ; } }
163 名前:仕様書無しさん mailto:sage [2009/04/25(土) 01:04:12 ] #include<stdio.h> void fizz(){static int i=1;if(i==0)printf("Fizz");i=(i+1)%3;} void buzz(){static int i=1;if(i==0)printf("Buzz");i=(i+1)%5;} void num() {static int i=1;if(i%3!=0&&i%5!=0)printf("%d",i);i++;} void ret() {printf("\n");} #define repeat10(x) x x x x x x x x x x int main() { repeat10(repeat10(fizz();buzz();num();ret();)); }
164 名前:仕様書無しさん mailto:sage [2009/04/25(土) 02:16:20 ] #include<stdio.h> int i=1; void fb(){printf("FizzBuzz\n");} void f(){printf("Fizz\n");} void b(){printf("Buzz\n");} void n(){printf("%d\n",i);} class f_list { public: f_list *nxt; void (*f)(); f_list(void (*x)()){nxt=NULL;f=x;} f_list *next(){f();i++;return nxt;} }; #define repeat10(x) x x x x x x x x x x int main() { f_list *p; f_list *s; s=p= new f_list(n);p->nxt= new f_list(n);p=p->nxt; p->nxt=new f_list(f);p=p->nxt;p->nxt=new f_list(n);p=p->nxt; p->nxt=new f_list(b);p=p->nxt;p->nxt=new f_list(f);p=p->nxt; p->nxt=new f_list(n);p=p->nxt;p->nxt=new f_list(n);p=p->nxt; p->nxt=new f_list(f);p=p->nxt;p->nxt=new f_list(b);p=p->nxt; p->nxt=new f_list(n);p=p->nxt;p->nxt=new f_list(n);p=p->nxt; p->nxt=new f_list(f);p=p->nxt;p->nxt=new f_list(n);p=p->nxt; p->nxt=new f_list(fb);p=p->nxt;p->nxt=s; repeat10(repeat10(s=s->next();)); }
165 名前:仕様書無しさん mailto:sage [2009/04/25(土) 06:37:45 ] 15個並べたのか
166 名前:164 mailto:sage [2009/04/25(土) 07:30:10 ] FizzBuzzを実装できるほど優秀なプログラマであるお前らに聞きたいんだが、 最初はfb(),f(),b(),n()といった関数の戻り値を関数ポインタにして 関数自身に次の関数を返させることで循環リストを作るつもりだったんだ。 func_type f1(){ do_something;return f2;} func_type f2(){ do_something;return f3;} func_type f3(){ do_something;return f1;} func_type fp=f1; fp=fp(); fp=fp(); fp=fp(); ... でもfunc_typeをどう宣言していいかわからなかったのでf_listなんてクラスを導入せざるを得なかった。 func_typeはどうやって宣言すればいいの?そもそも無理なの?
167 名前:仕様書無しさん mailto:sage [2009/04/26(日) 19:02:12 ] def Fizz(x): return 'Fizz' def Buzz(x): return 'Buzz' def FizzBuzz(x): return 'FizzBuzz' def N(x): return x print ','.join([str([FizzBuzz, N, N, Fizz, N, Buzz, Fizz, N, N, Fizz, Buzz, N, Fizz, N, N][i % 15](i)) for i in range(1,101)])
168 名前:仕様書無しさん mailto:sage [2009/04/26(日) 19:17:12 ] あ〜…投稿しておいてなんだけど、str()はN(x)の中に書いた方が良かったか。 ついでに読みやすく分解。 def Fizz(x): return 'Fizz' def Buzz(x): return 'Buzz' def FizzBuzz(x): return 'FizzBuzz' def N(x): return str(x) func_list = [FizzBuzz, N, N, Fizz, N, Buzz, Fizz, N, N, Fizz, Buzz, N, Fizz, N, N] def mapfunc(i): func = func_list[i % 15] return func(i) ary = map(mapfunc, range(1,101)) print ','.join(ary)
169 名前:仕様書無しさん mailto:sage [2009/04/26(日) 22:49:00 ] %sed 's/ /\ /g' fizzbuzz.cs using System; class Program { static void Main() { for (int n = 1, c3 = 1, c5 = 1; n <= 100; n++, c3++, c5++) { bool fizz = c3 == 3; bool buzz = c5 == 5; if (fizz) { Console.Write("Fizz"); c3 = 0; } if (buzz) { Console.Write("Buzz"); c5 = 0; } if (! (fizz || buzz)) Console.Write(n); Console.WriteLine(); } } }
170 名前:仕様書無しさん mailto:sage [2009/05/16(土) 01:04:18 ] #include<stdio.h> int main(void) { for(int i=1;i<=100;++i) { if(!(i%15))puts("Fizz Buzz"); else if(!(i%5))puts("Buzz"); else if(!(i%3))puts("Fizz"); else printf("%d\n",i); } return 0; } 初心者がちょっとそれっぽく書いてみた
171 名前:仕様書無しさん mailto:sage [2009/05/16(土) 22:57:37 ] >>170 それっぽくはあるけど、良いコードじゃないぞ 実装するなら、実装意図を明確にするべきで、 if (!(i%15)) この記述で無理矢理論理判断に持ち込むのは、良くない例 たしかにコレでも動くけども、 このコードでは 15で割ったあまりが ==0である、ことに意味がある 関数の戻りが0/1で戻ってくるから、それを論理判断にしているわけではない そこをはき違えると、意図が不明確で、他人が読みづらいコードになる
172 名前:仕様書無しさん mailto:sage [2009/05/17(日) 23:12:18 ] Cでは当たり前の記述だがな。
173 名前:仕様書無しさん mailto:sage [2009/05/17(日) 23:32:19 ] XXでは当たり前、で思考停止してるから、糞コードが減らないんじゃね?w
174 名前:仕様書無しさん mailto:sage [2009/05/17(日) 23:36:21 ] コードに15という定数を使っているのは今一
175 名前:仕様書無しさん mailto:sage [2009/05/18(月) 21:52:46 ] #include<stdio.h> int main(void) { for(int i=1;i<=100;++i) { if(i%3==0&&i%5==0) puts("Fizz Buzz"); else if(i%5==0) puts("Buzz"); else if(i%3==0) puts("Fizz"); else printf("%d",i); } } 初心者が意見を取り入れて普通に書いた
176 名前:仕様書無しさん mailto:sage [2009/05/20(水) 20:57:48 ] #include<stdio.h> #define FIZZ_MOD_NUMBER 3 #define BUZZ_MOD_NUMBER 5 #define IS_FIZZ_NUMBER(x) ((x)%FIZZ_MOD_NUMBER==0) #define IS_BUZZ_NUMBER ((x)%BUZZ_MOD_NUMBER==0) #define IS_FIZZ_BUZZ_NUMBER(x) (IS_FIZZ_NUMBER(x) && IS_BUZZ_NUMBER(x)) #define FIZZ_STRING "Fizz" #define BUZZ_STRING "Buzz" #define FIZZBUZZ_STRING FIZZ_STRING " " BUZZ_STRING int main() {
177 名前:仕様書無しさん mailto:sage [2009/05/20(水) 20:59:00 ] 途中で書き込んじまったorz 修正するのもメンドクサイから放置しよ。
178 名前:仕様書無しさん mailto:sage [2009/06/20(土) 18:14:32 ] 多分最速、既出? #include <stdio.h> void main(void) { int i=0,end=100; for(;;){ i++; printf("%d\n",i); //if(i==end)break; i++; printf("%d\n",i); //if(i==end)break; i++; printf("Fizz\n"); //if(i==end)break; i++; printf("%d\n",i); //if(i==end)break; i++; printf("Buzz\n"); //if(i==end)break; i++; printf("Fizz\n"); //if(i==end)break; i++; printf("%d\n",i); //if(i==end)break; i++; printf("%d\n",i); //if(i==end)break; i++; printf("Fizz\n"); //if(i==end)break; i++; printf("Buzz\n"); if(i==end)break; i++; printf("%d\n",i); //if(i==end)break; i++; printf("Fizz\n"); //if(i==end)break; i++; printf("%d\n",i); //if(i==end)break; i++; printf("%d\n",i); //if(i==end)break; i++; printf("FizzBuzz\n"); //if(i==end)break; }; }
179 名前:178 mailto:sage [2009/06/20(土) 18:19:20 ] あー、 100個の結果をそのままprintfした方が早いか... orz 私がバカでした
180 名前:仕様書無しさん mailto:sage [2009/06/20(土) 18:27:44 ] これ最強。 #include <stdio.h> void main(void) { printf( "1,2,Fizz,4,Buzz,Fizz,7,8,Fizz,Buzz,11,Fizz,13,14,FizzBuzz,16,17,Fizz,19,Buzz,Fiz" "z,22,23,Fizz,Buzz,26,Fizz,28,29,FizzBuzz,31,32,Fizz,34,Buzz,Fizz,37,38,Fizz,Buzz" ",41,Fizz,43,44,FizzBuzz,46,47,Fizz,49,Buzz,Fizz,52,53,Fizz,Buzz,56,Fizz,58,59,Fi" "zzBuzz,61,62,Fizz,64,Buzz,Fizz,67,68,Fizz,Buzz,71,Fizz,73,74,FizzBuzz,76,77,Fizz" ",79,Buzz,Fizz,82,83,Fizz,Buzz,86,Fizz,88,89,FizzBuzz,91,92,Fizz,94,Buzz,Fizz,97," "98,Fizz,Buzz" ); };
181 名前:仕様書無しさん mailto:sage [2009/07/11(土) 07:42:40 ] main(i){for(;i<101;puts("Buzz"-i*i++%5))printf(i%3?i%5?"%d":0:"Fizz",i);}
182 名前:仕様書無しさん mailto:sage [2009/07/12(日) 04:57:48 ] >void main(void) ここで既に警告が出てるぞ。
183 名前:仕様書無しさん mailto:sage [2009/08/04(火) 19:56:50 ] @echo off setlocal set A=0 :LOOP if %A% EQU 100 goto :END set /a A=A+1 set /a B=A%%3 set /a C=A%%5 set /a D=B+C if %D% EQU 0 goto :FB IF %B% EQU 0 goto :FIZZ IF %C% EQU 0 goto :BUZZ echo %A% goto :LOOP :FIZZ echo Fizz goto :LOOP :BUZZ echo Buzz goto :LOOP :FB echo FizzBuzz goto :LOOP :END endlocal @echo on
184 名前:183 mailto:sage [2009/08/04(火) 20:03:18 ] >>183 はDOS窓用バッチ
185 名前:cobol mailto:sage [2009/09/07(月) 17:08:09 ] identification division. program-id. fizzbuzz. environment division. data division. working-storage section. 77 i pic 9(3). 77 a pic 99. 01 r3 pic 9. 88 r3-zero value zero. 01 r5 pic 9. 88 r5-zero value zero. procedure division. perform varying i from 1 by 1 until i > 100 perform fizzbuzz end-perform. stop run. fizzbuzz. divide 3 into i giving a remainder r3 end-divide divide 5 into i giving a remainder r5 end-divide if r3-zero and r5-zero then display "FizzBuzz" upon console else if r3-zero and not r5-zero then display "Fizz" upon console else if r5-zero and not r3-zero then display "Buzz" upon console else display i upon console end-if.
186 名前:仕様書無しさん mailto:sage [2009/09/08(火) 00:03:08 ] 無駄に長いなと思ったらCobolか...
187 名前:仕様書無しさん mailto:sage [2009/09/16(水) 20:54:30 ] SQL見た時、なんか冗長だな〜COBOLみて〜、と思った。
188 名前:仕様書無しさん mailto:sage [2009/09/16(水) 23:18:17 ] 遊びがてら、出力が汚いのを作ってみた。後悔はしてない。(C言語) (パターン1) #include <stdio.h> #include <memory.h> int main(void) { int i = 0; char buf[900+1]; char* ptr; char* end = buf+900; *end = '\0'; for (ptr=buf;ptr<end;ptr+=9) snprintf(ptr,9,"%6d \n",i++); for (ptr=buf;ptr<end;ptr+=27) snprintf(ptr,6,"fizz "); for (ptr=buf+4;ptr<end;ptr+=45) snprintf(ptr,4,"buzz"); printf(buf); return 0; }
189 名前:仕様書無しさん mailto:sage [2009/09/16(水) 23:19:50 ] (パターン2) #include <stdio.h> #include <memory.h> int main(void) { //fi zz bu zz _ 1 _ 2 _ fi zz _ 4 _ bu zz _ fi zz _ 7 _ 8 _ fi zz _ bu zz _ 11 _ fi zz _ 13 _ 14 _ char* a = "243410101241013412410101241341012410101"; char* b[5] = {"00","\r\n","fi","bu","zz"}; char* p = a; while (b[0][0]<='9') { if (*p=='1') { b[0][0] += (b[0][1]-'0' + 1)/10; b[0][1] = '0' + (b[0][1]-'0'+1) % 10; } printf(b[*p++-'0']); if (!*p) p = a; } return 0; }
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進数で考えてみようと思ったことが無かったぜ。