プログラマーなら「FizzBuzz問題」解けるよな?
プログラマーなら「FizzBuzz問題」解けるよな?
元スレ
1 :(´・ω・`) ◆Hc1VAagKMg :2008/04/29(火) 20:06:06 .net
1から100までの数をプリントするプログラムを書け。
ただし3の倍数のときは数の代わりに「Fizz」と、5の倍数のときは「Buzz」とプリントし、3と5両方の倍数の場合には「FizzBuzz」とプリントすること。
http://www.aoky.net/articles/jeff_atwood/why_cant_programmers_program.htm
言語自由
7 :仕様書無しさん:2008/04/29(火) 21:35:32 .net
379 :仕様書無しさん:2011/08/26(金) 15:09:14.82 .net
ユーザー様から、仕様の大幅変更の要求が来た。
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までね。
修正作業をすぐにやってくれ。締め切りは明日ね。
197 :仕様書無しさん:2009/09/19(土) 14:45:47 .net
55 :仕様書無しさん:2008/05/05(月) 23:42:56 .net
145 :仕様書無しさん:2009/01/25(日) 15:38:05 .net
>>143
あからさまに括弧の対応が変。
最初からやり直せ。
447 :仕様書無しさん:2015/07/30(木) 17:34:29.19 .net
フーターズコンテストジャパンで二位だったSerinaが、
黒人に輪姦されてる動画が流出したようですね。
鮮明だし最後は狂ったように泣きながらイキまくってる。
ちんこたった。
425 :仕様書無しさん:2013/09/23(月) 15:25:42.14 .net
for(var i=1;i<101;i++){
var str=i;
if(i%3==0)str=”Fizz”;
if(i%5==0)str=”Buzz”;
if(i%15==0)str=”FizzBuzz”;
document.write(str+”<br>”);
}
54 :仕様書無しさん:2008/05/05(月) 23:41:08 .net
X86アセンブラ、C、C++、Java、VB辺りが出たので他のないすかー?
ぴゅう太とかリアルで動かしてくれたら泣ける。
182 :仕様書無しさん:2009/07/12(日) 04:57:48 .net
>void main(void)
ここで既に警告が出てるぞ。
300 :仕様書無しさん:2010/06/05(土) 00:08:07 .net
一方、Perlはやっぱりキチガイだった
ttp://d.hatena.ne.jp/sugyan/20100321/1269174230
80 :仕様書無しさん:2008/05/06(火) 22:13:43 .net
//2/4
//表示する数字の変数
int tgt_num = int_st;
//変換メソッド
do{
bool b_fizz=false,b_buzz=false;
char* str_out = str_none;
if(tgt_num%3 == 0) b_fizz = true;
if(tgt_num%5 == 0) b_buzz = true;
if(!(b_fizz || b_buzz)){
char* str_out = ltoa(tgt_num);
str_fb = new(str_num);
str_fb = str_out;
}
109 :仕様書無しさん:2008/05/23(金) 02:00:16 .net
なんで未初期化のまま使ってるんだろうと思ってたが、
mainの第1引数であることに今さら気づいたorz
73 :仕様書無しさん:2008/05/06(火) 13:29:31 .net
>>71
書けない奴はこんな問題、
ある意味歯牙にもかけないだろ
157 :仕様書無しさん:2009/03/13(金) 23:16:03 .net
388 :仕様書無しさん:2011/08/27(土) 02:55:56.16 .net
255 :仕様書無しさん:2010/05/07(金) 19:45:27 .net
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));
}
}
396 :仕様書無しさん:2012/02/14(火) 01:26:49.30 .net
これでいいのかな?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
159 :仕様書無しさん:2009/03/16(月) 00:30:30 .net
161 :仕様書無しさん:2009/03/25(水) 23:43:51 .net
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();
}
}
}
8 :4:2008/04/29(火) 22:15:06 .net
カウント変数の初期化位置ミスってるなww
無限ループだわ(´・ω・`)
動くか知らんが
389 :仕様書無しさん:2011/08/27(土) 15:09:54.05 .net
この程度の規模のコードで、コードの再利用を考慮しすぎるのはムダ。
仕様変更に伴って書き直した方が早い。
>>1のリンク先には
> ちゃんとしたプログラマであれば、これを実行するプログラムを
> 2分とかからずに紙に書き出せるはずだ。怖い事実を聞きたい?
> コンピュータサイエンス学科卒業生の過半数にはそれができないのだ。
> 自称上級プログラマが答えを書くのに10-15分もかかっているのを見たこともある。
とある。
2分とかからずに書き出せる程度の規模のコードで再利用とかムダムダ。
仕様変更があったら数分かけて書き直せ。
229 :仕様書無しさん:2010/04/23(金) 02:07:26 .net
>>226
%を使う使わない以前に結果を他のコードと比べるくらいなぜできない?
数学のテストで「計算結果は違うけど式はあってますよね」とか言うクチか。
229 :仕様書無しさん:2010/04/23(金) 02:07:26 .net
>>226
%を使う使わない以前に結果を他のコードと比べるくらいなぜできない?
数学のテストで「計算結果は違うけど式はあってますよね」とか言うクチか。
220 :仕様書無しさん:2009/11/18(水) 05:13:33 .net
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
188 :仕様書無しさん:2009/09/16(水) 23:18:17 .net
遊びがてら、出力が汚いのを作ってみた。後悔はしてない。(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;
}
412 :仕様書無しさん:2012/10/09(火) 21:21:50.29 .net
Duff’s Deviceはふつくしいけど見たくない。
333 :仕様書無しさん:2011/01/18(火) 20:42:37 .net
>あれって、総当り方式じゃん。左側か右側かの壁伝ってくんだっけ?
だから、それだと出口が内部に有ると駄目だし、ループしてる柱みたいな
場所が有ると永久ループ。
一応、自分が通った経路を記憶しておいてマッピングしながら移動する
のだが、タイヤのスリップとかセンサの誤検知とか有るので、信頼度の
重み付けしながらファジーにマッピングして行く。
汚部屋と言う名の迷路を掃除するロボット、ルンバも作れなさそうだな。
中国製ランダムウォークのパチ物に負けるぞ。
382 :仕様書無しさん:2011/08/26(金) 17:42:45.50 .net
105(3,5,7で割れる)とかどうするんだろ、って思ったけどたぶんBuzzGizzなんだろうなぁ
直接”FizzBuzz”とか書かず、割れた数から出力すれば楽だと思ったんだが、そうするとFizzBuzzGizzになっちゃうんだよなぁ
Fizz,Buzz,…の数だけフラグ用意して、立てたり立てなかったりしつつ、その後3本以上になったら小さいほうを折って…って面倒だわ
400 :仕様書無しさん:2012/02/16(木) 03:14:53.62 .net
40 :仕様書無しさん:2008/05/02(金) 14:07:56 .net
168 :仕様書無しさん:2009/04/26(日) 19:17:12 .net
あ〜…投稿しておいてなんだけど、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)
18 :仕様書無しさん:2008/04/30(水) 02:49:06 .net
String s;
for(i=1;i<=100;i++){
s=””;
if(i%3==0) s=”Fizz”;
if(i%5==0) s+=”Buzz”;
if(s==””){
print(i.toString());
}else{
print(s);
}
}
248 :(u_・y) ◆e6.oHu1j.o :2010/04/26(月) 04:48:47 .net
>>225
おれが過去にかいたコードを描いたときにかんがえてた事を
予想すると、お前のその意味不明なレスもなんとなくわかるよ
おれが適当に描いた部分は、 たとえ、プログラミング知らない奴でも修正できそうなレベルだ
っていうところまではわかるか??
だれにでも解ける場所とか、自分が過去に解いた場所は適当になる
それがuy。
その適当具合は、常軌を逸しているかもしれない
問題すら適当に読むか読まないし、コンパイルチェックもしないで2chに貼り付けたりもする
たとえそれが間違っていてもどうでもいいやという気分になる
まとめると:
おれは忙しいから
無駄なことに時間は使いたくない
232 :仕様書無しさん:2010/04/23(金) 14:57:18 .net
>>1
>1から100までの数をプリントするプログラムを書け。
>ただし3の倍数のときは数の代わりに「Fizz」と、5の倍数のときは「Buzz」とプリントし、3と5両方の倍数の場合には「FizzBuzz」とプリントすること。
とあるのに3や5をプリントアウトしたらただの間違いだろ。
問題をちゃんと読んでねぇアホじゃねーか。
407 :仕様書無しさん:2012/10/07(日) 06:58:51.71 .net
function kuso(n) {
switch(n) {
default: return n;
case 3: return ‘Fizz’;
case 5: return ‘Buzz’;
case 6: return ‘Fizz’;
case 9: return ‘Fizz’;
case 10: return ‘Buzz’;
case 12: return ‘Fizz’;
case 15: return ‘FizzBuzz’;
とかネタで書いてたら、こういう発想のコードに実際関わる羽目に遭った時の記憶が蘇って嫌になった
263 :仕様書無しさん:2010/05/31(月) 13:22:37 .net
Pythonでとりあえず標準的に書いてみる
見れば分かるとおり、無限ループするよ
i=0
while True:
print i,
if i%3==0:
print “Fizz”,
if i%5== 0:
print “Buzz”,
print ‘¥n’
i=i+1
178 :仕様書無しさん:2009/06/20(土) 18:14:32 .net
多分最速、既出?
#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;
};
}
85 :仕様書無しさん:2008/05/07(水) 01:49:10 .net
void fizzbuzz(int num) {
if (num) {
fizzbuzz(num-1);
switch( (((num % 5) == 0) << 1) | ((num % 3) == 0) ) {
case 0: printf(“%d¥n”, num); break;
case 1: printf(“fizz¥n”); break;
case 2: printf(“buzz¥n”); break;
case 3: printf(“fizzbuzz¥n”); break;
}
}
}
void main() { fizzbuzz(100); }
353 :仕様書無しさん:2011/06/14(火) 01:46:04.12 .net
いや、そもそも「かなりできる」奴か見るためのテストじゃないし。
がんばるもんじゃないったらスレ終わりじゃん。ここマ板だし。
こんな書き方もある、ってお遊びだよ?言わせんな恥ずかしいw
309 :仕様書無しさん:2010/07/29(木) 15:47:08 .net
#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関数の戻り値
}
250 :仕様書無しさん:2010/04/26(月) 08:13:08 .net
23 :仕様書無しさん:2008/05/01(木) 01:56:38 .net
const char *pfizz = “fizz”;
const char *pbuzz = “buzz”;
const char *psuhzi = “%d”; //const char *pkaigyo = “¥n”;
__asm {
mov cx, 1
loop1:
push ecx
mov ax, cx
mov dl, 3h
div dl
mov bl, ah //n%3余り
mov ax, cx
mov dl, 5h
div dl
mov bh, ah //n%5余り
cmp bl,0
je fizz
cmp bh,0
jne suhzi
fizz:
cmp bl,0
jne buzz
31 :仕様書無しさん:2008/05/01(木) 23:40:16 .net
String fizz = “Fizz”;
String buzz = “Buzz”;
StringBuffer ret = new StringBuffer();
for (int i = 1; i < 101; i++) {
if ((i % 3) == 0) {
ret.append(fizz);
}
if ((i % 5) == 0) {
ret.append(buzz);
}
if (ret.length() == 0) {
System.out.println(i);
} else {
System.out.println(ret.toString());
ret = new StringBuffer();
}
}
312 :仕様書無しさん:2010/09/19(日) 01:44:08 .net
main(i){for(;i-101;puts(i++%5?””:”Buzz”)){printf(i%3?i%5:”%d”:0:”Fizz”);}
198 :仕様書無しさん:2009/09/20(日) 15:04:59 .net
319 :仕様書無しさん:2010/10/23(土) 21:07:58 .net
条件
もっとも安く仕上げよ
条件
運用コストは電源を入れてから1秒あたり1ドルかかる
システムは以下の性能
1. キー入力は1入力あたり1秒かかる
shiftキー等の押下・離放もカウントする
2. 文字入力は1文字あたり1ドルかかる
3. プログラム入力後、コンパイル・実行開始までの秒数はカウントしない
4. 実行は1行表示ごとに1秒かかる。表示した後同じ行に上書き表示
するようなものは、上書きの度に1秒かかる
5. 100行目(Buzz) 表示完了時までをコスト計算する
357 :仕様書無しさん:2011/06/17(金) 10:22:50.20 .net
メタと付く言語はMLとmetafontしか知らんな…
139 :仕様書無しさん:2009/01/21(水) 17:45:44 .net
78 :75:2008/05/06(火) 20:45:28 .net
219 :仕様書無しさん:2009/11/17(火) 19:50:32 .net
303 :仕様書無しさん:2010/06/06(日) 23:43:14 .net
327 :325:2011/01/18(火) 03:48:46 .net
大学は情報系でないので、力技。(全てのセルに、最初のポイントからの位置を書き込み。)
予想通り、デバッグで時間取られる。
そもそも、やる気ないから、コードは汚いし。
バカバカしくなってきたから、中断する。
「まともなプログラマーなら〜」って言葉に、どうしても反応してしまう。
挑発に乗っちゃうクセを直さないとね。
378 :仕様書無しさん:2011/08/25(木) 19:01:16.31 .net
>>375-376まで行くと、可変性を無駄に重視しすぎだろ
要求が変更されたら、コードを書き換えて対応するのは当たり前なんだから、ほどほどに書き換えが
やりやすくなってりゃいいのよ
実行効率どころか可読性まで大きく落として、まだ見ぬ要求変更の可能性に幅広く対応するのは無駄
133 :仕様書無しさん:2009/01/19(月) 10:19:53 .net
J
wd&>((0 i.‾15 3 5|]){((;;])’Fizz’;’Buzz’),<)”0>:i.100
246 :仕様書無しさん:2010/04/24(土) 23:53:32 .net
134 :あぼーん:あぼーん.net
431 :仕様書無しさん:2013/10/07(月) 07:16:35.86 .net
/* 混ぜて糞コードにしてみた */
#include<stdio.h>
int main(int c,char **v){
int i,j;
for(i=j=1;i<=100;i++,j++){
switch(j){
default: printf(“%d¥n”,i); continue;
case 3: case 6:
case 9: case 12: printf(“Fizz¥n”); continue;
case 5: case 10: printf(“Buzz¥n”); continue;
case 15: j = 0; printf(“FizzBuzz¥n”); continue;
}
}
}
399 :仕様書無しさん:2012/02/14(火) 21:53:06.43 .net
449 :仕様書無しさん:2016/01/30(土) 19:50:18.24 .net
000100 IDENTIFICATION DIVISION.
000200 PROGRAM-ID. YARANAIKA.
000300 ENVIRONMENT DIVISION.
000400 DATA DIVISION.
000500 WORKING-STORAGE SECTION.
000600 01 I PIC 9(3).
000700 01 HENSHU-RYOIKI.
000800 05 NUM PIC ZZZ9.
000900 01 DUMMY-RYOIKI PIC X(1).
001000 01 HYOJI-RYOIKI PIC X(8).
001100 PROCEDURE DIVISION.
001200 PERFORM VARYING I FROM 1 BY 1 UNTIL IDX-01 > 100
001300 MOVE SPACE TO HYOJI-RYOIKI
001400 IF FUNCTION MOD(I 3) = ZERO
001500 MOVE
46 :仕様書無しさん:2008/05/03(土) 01:52:10 .net
>>45
だったらそのままコンパイルから実行までやっちゃおうぜ
65 :仕様書無しさん:2008/05/06(火) 09:36:11 .net
こうですかわかりません><
<?php
for ($i=1 ; $i<101 ; $i++ ){
$a=””;
if (!$i%3)$a.=”fizz”;
if (!$i%5)$a.=”buzz”;
if ($a=””)$a=$i;
echo $a;
}
?>
351 :仕様書無しさん:2011/06/12(日) 18:18:48.82 .net
平凡
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__
437 :仕様書無しさん:2013/10/17(木) 09:34:59.61 .net
rubyで割り算使わないでみたら長くなった・・・
a=[]
33.times do|i|
a.push(i+1)
end
j3,j5,cnt=0,0,1
100.times do
a.each do|b|
if cnt==3*b
j3=1
end
if cnt==5*b
j5=1
end
end
if j3==1 && j5==0
mes=”fizz”
elsif j5==1 && j3==0
mes=”buzz”
elsif j3==1 && j5==1
mes=”lenny kravitz”
else
mes=cnt
end
puts mes
cnt+=1
j3,j5=0,0
end
156 :うゆ ◆e6.oHu1j.o :2009/03/13(金) 20:49:29 .net
173 :仕様書無しさん:2009/05/17(日) 23:32:19 .net
XXでは当たり前、で思考停止してるから、糞コードが減らないんじゃね?w
209 :仕様書無しさん:2009/09/24(木) 12:59:58 .net
>>203
>>1 のリンク先すら読まない莫迦が
そんだけ沢山いるってことでしょうな。
330 :325:2011/01/18(火) 04:44:16 .net
あ、出来た。
嫌々やるのやめて、コード整理したら、出来た。
100ステップって、ちょっと簡単に書き捨てられる量じゃない。
頭でアルゴリズム簡単に思いついても、デバッグに時間がかかるし。
「プログラマーなら出来なきゃ困る」なら、実際に書かなければならないんだから、時間のことも考えて欲しい。
あと、ブログで示されていたアルゴリズム、文系には辛いよ。
こっち系だとは思ったけど、昔、本で名前知った程度だから、ググルや参考書なしでは無理。力技しかなかった。
まあ、>>324は、スルー力検定だったのだなw
104 :新入り:2008/05/18(日) 14:02:12 .net
64 :仕様書無しさん:2008/05/06(火) 09:32:46 .net
259 :仕様書無しさん:2010/05/26(水) 20:40:51 .net
確かにそうだけど
今の時代はI/O関係なければそんなに速度なんて変わらないから
ぱっと見でわかりやすいほうがいいだろ
いつの時代だよ
レスを投稿する(名前省略可)