Fizz-Buzz問題at PROG
Fizz-Buzz問題 - 暇つぶし2ch200:仕様書無しさん
07/05/17 11:24:29
j

201:仕様書無しさん
07/05/17 11:53:22
>>198
面白くて不快でスレ違い(愚痴スレへどうぞ)

202:仕様書無しさん
07/05/17 14:26:49
ループカウンタiって駄目なの?

203:仕様書無しさん
07/05/17 15:35:55
>>202
別に構わないだろ
昔に比べて i という一文字変数を使う理由は減ってるから
「1文字変数にする理由がない」と言う人もいる

204:仕様書無しさん
07/05/17 16:42:40
実にくだらん理屈だな。
慣用的に意味が通じて簡潔に書けるんだから、別にいいじゃんと思うけどな。


205:仕様書無しさん
07/05/17 17:08:10
すごい!これならiの代わりにぴったりだね!


206:仕様書無しさん
07/05/17 17:08:14
iがだめならj,k,l,n,mと使った火にゃあ

207:仕様書無しさん
07/05/17 17:36:07
i2,i3,i4
ii,iii,iiii

208:仕様書無しさん
07/05/17 17:41:35
生産性を低下させる悪名高き構造化の名の下に、
for文宣言時にfor文そのものにも名前を付けれるようにすべき。

for uhauha{
 uhauha.func={ 無名関数っぽくループ続行条件処理を記述、もちろんスコープ限定 };
 uhauha.continue;//contiune
 uhauha.break;//break

 for hogehoge{
  hogehoge.cunt={ /* asdfujikotyan */ };
  if(a==b) uhauha.continue;//一気にuhauhaをcontinue
  if(c==d) hogehoge.break;
  if(tekitou==sinekasu)
   uhauha.break;//一気に脱出
 }
}

209:仕様書無しさん
07/05/17 17:48:52
>>208
それ、面白いつもりで書いてるの?
それだけがちょっと知りたい。

210:仕様書無しさん
07/05/17 17:59:23
>>209
別に
結局どんな手法を採用しようにも、
イタチゴッコな問題は結局イタチゴッコにしかならないというのが言いたかっただけ。

211:仕様書無しさん
07/05/17 18:04:41
>>210 はああ???

212:仕様書無しさん
07/05/17 18:05:24
関数オブジェクト?

213:仕様書無しさん
07/05/17 20:09:00
クロージャ

214:仕様書無しさん
07/05/17 20:38:06
ここに俺の亀頭落ちてなかった?
参ったな・・・昨日買い換えたばっかりなのに・・・・

215:仕様書無しさん
07/05/17 20:40:31
ミニサイズのやつだろ?
さっきぬこが咥えて持ってったけど?

216:仕様書無しさん
07/05/17 23:42:26
わらかすなぁ

217:仕様書無しさん
07/05/18 00:42:58
>>197
なに、このバカ
>>199
なに、このアホ

218:仕様書無しさん
07/05/18 18:12:06
他スレでもFizzBuzzやってるとこあるけど
LispとPythonの例は少し趣向が違うねぇ

Rubyは書き方自体は色々出てるみたいだが
他言語の真似に落ち着いてるものが多い
一つだけ特徴的なのはあったが、あれはちと面倒臭いなw

219:仕様書無しさん
07/05/18 22:04:55
fizzbuzzでshort codingをやった人が、
2番目に短いコードを開始2分以内に発見したとか言ってるのを聞いて非常に驚いた。
流石に現在の最短コードにたどり着くには結構時間かかったらしいけど…

220:仕様書無しさん
07/05/18 23:44:09
>現在の最短コード
これどんなコード?

221:仕様書無しさん
07/05/19 00:16:26
URLリンク(golf.shinh.org)

222:仕様書無しさん
07/05/19 00:29:51
そのURLのどこにコードがあるんじゃい

223:仕様書無しさん
07/05/19 01:14:40
最短のコードだと、読む(理解する)のには時間かかりそうだ

224:仕様書無しさん
07/05/19 08:58:58
あったー
URLリンク(jarp.does.notwork.org)

225:仕様書無しさん
07/05/19 08:59:49
無駄時間取り戻しポンプが切実に欲しい今日この頃

226:仕様書無しさん
07/05/19 20:23:29
>>221
ゴルフ的には、Perlかと思ってたら、Bashが一番短いのかー。
しかし、対応言語が半端なく多くてすげえなw

227:仕様書無しさん
07/05/20 16:10:58
Cで素数を求めるプログラムを作ってもらえばその人のセンスが結構分かるな

228:仕様書無しさん
07/05/20 16:12:36
そんなのアルゴリズムを知ってるかどうかじゃん
センスは関係なくねーか

229:仕様書無しさん
07/05/20 16:22:50
そういう知識もあわせてセンスという事にすりゃ
ポジティブシンキングっぽくていい気がする

230:仕様書無しさん
07/05/20 16:23:34
氏ねばいいとおもうよ(AA略

231:仕様書無しさん
07/05/20 16:23:57
まぁとりあえず書いてみりゃ分かる
素数はかなり奥が深いが付加軽減を考えると限がないのも確か

232:仕様書無しさん
07/05/20 16:25:17
あー付加じゃなく負荷

233:仕様書無しさん
07/05/20 16:26:10
プログラマとしての センス はわからない
プログラマとしての 常識のあるなし はわかる

234:仕様書無しさん
07/05/20 16:31:37
漏れなら最初に

素数ってなんですか?

と質問する。
次に

サンプルソース下さい。

と要求し、
最後に

仕様がいい加減で分かりませんでした。

と言い訳する。

235:仕様書無しさん
07/05/20 16:45:03
こういうのって本当は慣用句感覚で使えないと駄目なんだろうな…
普通の人間においては、これらのようなちょっとした知識の積み重ねがあって
初めて新しいアルゴリズムを考えることが出来るらしいし

236:仕様書無しさん
07/05/20 16:57:10
アルゴリズムの発明は理学部に任せます

237:仕様書無しさん
07/05/20 17:09:34
じゃあ素数じゃなくて完全数を見つけるプログラムにしようぜ

238:仕様書無しさん
07/05/20 17:13:09
「こんなん誰でもできるだろ( ´,_ゝ`)」と思ってコード貼ったら
バグを指摘されまくって吊りたくなる問題がいいな

239:仕様書無しさん
07/05/20 23:51:35
素数判定はアリだと思う。
試し割りだっけ?forで全ての数で割るようなアルゴリズム。
あれで作らせて100までの素数を出力しろ、って感じ。

経験者って言うならば、30分で出来なきゃお帰り願いたい。

240:仕様書無しさん
07/05/21 03:46:24
>>239
そんなん誰でもできるだろ( ´,_ゝ`)

241:仕様書無しさん
07/05/21 04:58:38
完全食よりターローだろ

242:仕様書無しさん
07/05/21 05:13:15
>>237
5つ目が2時間半経っても出て来ねえw...

243:仕様書無しさん
07/05/23 00:49:49
>>240
だが現実は30分でできない人続出www

うちの職場ならザラにいそうだな…

244:仕様書無しさん
07/05/23 08:05:21
>243
30分以内に書ける人と丸1日(6時間として12倍)掛かる人。
給料がほとんどかわらないという現実を先に何とかして欲しいところ。

245:仕様書無しさん
07/05/23 21:43:43
>>243
そこらの、ちょっとプログラミングかじっただけの奴ですら10分ぐらいでできると思うぞ。

マジでそんな職場あるんだな。

246:仕様書無しさん
07/05/23 21:56:33
>>245
おいおい、そんな職場ばかりだぞ
なにせマトモに研修とか勉強でアルゴリズムとか、習ってない人が多数。
それが経験者を装って現場に投入され、経験年数だけが溜まる。

247:仕様書無しさん
07/05/23 23:02:33
>246
じゃ日曜アマグラマやどこぞの刑務所出身の人達雇った方がマシなワケだ

248:仕様書無しさん
07/05/24 00:06:08
経験年数が足りなくて就職できん

249:仕様書無しさん
07/05/24 00:45:21
どっかにいろんな言語のまとめないかな?
バイト数じゃなくてコードが見れるとこ

250:仕様書無しさん
07/05/24 06:23:07
>247
コードを書くという作業だけを考えればマシかもしれんな。
問題は単純作業とかやらせると飽きる人が多いとか、勝手に仕様変えちゃうとか、そっちの問題はあるかもしれんけど。

>248
腕にある程度の自信があるならば、ハッタリかませてOK。
登録派遣とか採用する時なんて、経歴書の1行で決めやがる。
現場に入ってしまえば嘘なんてばれるんだけどな。
経験年数を2年とかにしておけば、どっかは拾ってくれる。
そこで本当に年数を稼いでしまえば、後はどうとでもなるさ。
本当に優秀と認められれば、正社員にならないかって絶対に来る。
どっちにしろ、テメエの腕次第。

251:仕様書無しさん
07/05/24 18:39:02
アセンブラのコードがないね

252:仕様書無しさん
07/05/24 23:26:17
そうだね

253:仕様書無しさん
07/05/25 00:30:35
「出力」のとこが問題かなぁ。
実質Brainf*ckの類はアセンブラに近かろう。

254:仕様書無しさん
07/05/26 17:03:05
素因数分解ってこんな感じでええんかいな?
当方ブランク13年(戻る気なし)

#include <stdio.h>

int main()
{
 int i, j, k;
 
 for (i = 2; i <= 100; i++) {
  k = 1;
  for (j = 2; j < i; j++) {
   if ((i % j) == 0) {
    k = 0;
    break;
   }
  }
  if ( k ) {
   printf("%d\n", i);
  }
 }
 return 0;
}


255:仕様書無しさん
07/05/26 17:24:52
pythonバージョン

for x in range(2,100):
    for y in range(2,x):
        if x%y==0:
            break
    else:
        print x

256:仕様書無しさん
07/05/26 19:09:33
> 254
kの意味わからん・・・
break するならばいらんのでは?

257:仕様書無しさん
07/05/26 22:30:23
n = i^k* j^l... とやろうとして失敗したんじゃないかな。と思って書いてみた。

# ASiB.pl - Anchoku SoInsuu Bunkai

for ($i = 1; $i < 100; ++$i) {
    printf("%d = %s\n", $i, Asib($i));
}

sub Asib {
    my ($n, $i, $k) = @_;
    my $ceil = int($n/2);
    my $expr = "";

    for ($i = 2; $i <= $ceil; ++$i) {
        $k = 0;
        while ($n % $i == 0) {
            ++$k;
            $n /= $i;
        }
        if ($k == 1) {
            $expr .= sprintf("%d * ", $i);
        }elsif ($k > 1) {
            $expr .= sprintf("%d^%d * ", $i, $k);
        }
    }
    $expr =~ s/ \* $//;
    return $expr ? $expr : $n;
}

258:仕様書無しさん
07/05/26 22:51:57
>>257 の小改造版; 上限を $n/2 から srqt($n) にしてループ回数を節約

<            my $ceil = int($n/2);
---
>            my $ceil = int(sqrt($n));

<            $expr =~ s/ \* $//;
<            return $expr ? $expr : $n;
---
>            if ($expr && $n == 1) {
>                        $expr =~ s/ \* $//;
>            }else{
>                        $expr .= $n;
>            }
>            return $expr;

# 100までだから $i<=100 か。ミスってた。

259:仕様書無しさん
07/05/27 07:39:33
>>256
break で抜けるのは j のループだけなんじゃないの?

260:仕様書無しさん
07/05/27 14:43:37
勝手に最適化(最不適化)しないで最初は素直な実装を試みるって所を見てるんだよ!!

261:仕様書無しさん
07/05/30 17:22:13
偶数を除くとか、√(被除数) までしか試さないってのを
真っ先に思いついた俺は素直じゃないですか?

#define ITERATE 100
int main(int argc, char *argv[])
{
  for (int i=1; i<=ITERATE; i++) {
    bool prime = true;
    for (int j=3, m=sqrt(i); j<=m; j+=2)
      if (i % j == 0) {
        prime = false;
        break;
      }
    if (prime)
      printf("%d\n", i);
    if (i > 2)
      i++;
  }
  getchar();
  return 0;
}

262:仕様書無しさん
07/05/30 19:50:33
>>261
確かにそうなんだけど、sqrtって計算コスト軽いの?

263:仕様書無しさん
07/05/31 11:53:50
意外と軽いけど間の変換が無駄なんだよな

264:仕様書無しさん
07/06/11 20:56:27
めっちゃ初心者だけど書いてみた

#include "stdafx.h"
#include<stdio.h>


int _tmain(int argc, _TCHAR* argv[])
{

for(int i=1;i<101;i++){
if((i%3)!=0 && (i%5)!=0){
printf("%d",i);
}
else
if((i%3)==0){
printf("%s","Fizz");
}
if((i%5)==0){
printf("%s","Buzz");
}
printf("\n");

}

}

265:仕様書無しさん
07/06/11 22:15:56
>>264
もっと素直に

266:仕様書無しさん
07/06/11 22:20:45
ぬるぽ!

267:仕様書無しさん
07/06/11 22:57:29
>>265
彼女にそういったらふられた

268:仕様書無しさん
07/06/12 12:19:51
>>265 的確な指摘ワロスw

269:仕様書無しさん
07/06/15 01:16:13
すごいな>>1さんは・・・俺には1から100までの数を表示するプログラムなんて書けないよ。
ええっと、πは何億桁表示すれば許していただけますか?

整数とか自然数って書いて欲しいな。要件定義はしっかりしてもらわないと。
あ、1から100ってのが、2進数だという可能性もあるな。

270:仕様書無しさん
07/06/15 06:30:14
>>269
そうやって屁理屈こねて、結局何のプログラムも書けないタイプか?w

271:仕様書無しさん
07/06/15 07:39:52
>>270
いるよね、こういうのw
屁理屈こねるけどそれも間違っていることが多い。

ちなみに1から100が2進数とか言うのもツッコミどころ多すぎ。
001から100までならば2進表記の可能性もある、が正しい。
色々で直しておいで、ぼうや。


272:仕様書無しさん
07/06/15 14:49:52
001から100までならば何進表記なんだか全然わからない
が正しいのでは?

273:仕様書無しさん
07/06/15 16:21:16
0 から (900-800) まで

これでok

274:仕様書無しさん
07/06/15 19:30:39
だからその900や800は何進法で表記されているのか?

275:仕様書無しさん
07/06/15 19:30:59
ちょっとウンコしてくる

276:仕様書無しさん
07/06/16 00:23:12
>274
とりあえずn進法(n>8)だけは確かだと思われ
アラビア数字で書いてあるから、いろはを使う48進法でもないなw

277:仕様書無しさん
07/06/17 01:59:48
何の指定もないんだから、10進法に決まってんだろカスが

278:仕様書無しさん
07/06/17 02:30:16
どうしてですか

279:仕様書無しさん
07/06/17 09:55:38
「何の指定もないんだから、10進法」が通るんだったら素直に100って書きゃいいじゃん。

280:仕様書無しさん
07/06/17 10:19:20
何も指定ないんだから10進数に決まっている、というのは問題かもしれない。
でも、何も指定ないんだから2進数の可能性が!というのはもっと問題だと思う。

281:仕様書無しさん
07/06/17 18:44:13
えっと
>>269
が悪いでOK?w

282:仕様書無しさん
07/06/17 19:49:51
>>269 の頭が悪いでOK

283:仕様書無しさん
07/06/17 20:14:14
#include<stdio.h>
void main(void)
{
for(int i=1;i<=100;i++)
{
if(i%3==0)
printf("Fizz");

if(i%5==0)
printf("Buzz");

if(i%3!=0&&i%5!=0)
printf("%d",i);

printf("\n");
}
}

まだ学生なので批判や指摘、アドバイス等please

284:仕様書無しさん
07/06/17 20:29:06
>>283
ふつう。
というか、出題者はこのようなシンプルで正しい解答を期待している

285:仕様書無しさん
07/06/17 21:13:14
#include<stdio.h>
 
void main(void)
{
  int i;

  for( i=1; i<=100; i++ ) {

    if ( i % 3 != 0 && i % 5 != 0 ) {
      printf("%d",i);
    } else {
    if(i%3==0) {
      printf("Fizz");
    }
    if(i%5==0) {
      printf("Buzz");
    }

    printf("\n");
  }
}
 
単に自分の書き方にしただけで模範でもなんでもないんだけどね

286:仕様書無しさん
07/06/17 22:34:34
剰余演算は各ループ2回づつじゃないと駄目だと思うの。

287:仕様書無しさん
07/06/17 22:49:57
>>286
なんで?
283も285も1回で、必要な出力を得られるのでは?

288:仕様書無しさん
07/06/17 23:59:22
>>285 テキトーすぎたよ カッコ閉じてないしインデント無茶苦茶w失格w

289:仕様書無しさん
07/06/19 02:40:53
職業プログラマと情報サイエンスとでは、求める資質が違うだろ。

マの入社試験であれば、シンプルで素直なコードが正解だが、
学者になるんだったら、時間かけて練った答えも有りだと思う。

たとえ最終的な解が同じ物になるにしても、生産性の高い道具を目指すのか、
新しいパラダイムを生み出すことを目指すのかで、たどる過程は異なるものだ。

そういう意味で、>>1の筆者は、この問題の本質を取り違えている。

290:仕様書無しさん
07/06/19 07:29:26
この程度の問題で情報サイエンス(笑)って本気かwww
学者になるやつのテストならば最低でもアルゴリズムだろwwwww

291:仕様書無しさん
07/06/19 07:30:08
簡単なプログラムも書けない情報サイエンスの学者って許されるのか?

新しいパラダイムを生み出すにしても、基礎を知ってないと話にならんだろう。
何もないところから新しいものを生み出すなんてことができるのは、天才だけだ。

292:仕様書無しさん
07/06/19 20:05:32
>>291
書くだけなら猿でも書けるだろ。
言われたとおりに正確に手っ取り早く書く、っていうのが職業プログラマのアプローチで、
コンパイラと相談しながら、最適解を追い求める、ってのがオタクのアプローチ。

情報サイエンス学科ってのはオタク養成の場でもあるんだから、専学出身の奴らとは
アプローチの仕方が異なるだろって話。

情報サイエンス学科が馬鹿の集まりだなんて、一言も言ってないよ。

293:291
07/06/19 20:56:08
>>292
>情報サイエンス学科が馬鹿の集まりだなんて、一言も言ってないよ。

はて、どこをどう読んでそういう理解に至ったのやら。
俺もそんなこと一言も言ってませんが、何か。

「理論や知識は一杯知っているが、それを適用して実際に動くものは作れない
(プログラミングもできない)」ような頭でっかち秀才君が、学者になれるのかって話。
他の学問領域はともかく、情報サイエンスでは難しいと思うが。

294:仕様書無しさん
07/06/19 21:02:35
>>292
>書くだけなら猿でも書けるだろ。
それが書けない、と何度も繰り返し書かれているわけだが。
>アプローチの仕方が異なるだろって話。
自己弁護乙。

295:仕様書無しさん
07/06/19 21:20:28
>>292
書くことのできる猿を連れてくるか、猿以下らしい新人を書ける様に教育してくれないかな?w

296:仕様書無しさん
07/06/19 22:08:49
Fizz-Buzz問題を目にするまでは
>猿でも書けるだろ
と自分も思いこんでいた。

だが経験を振り返ってみるとシンプルなプログラムを思いつくことが出来ずに
時間をかけて人が書いたプログラムの猿まねをするしか出来ない人間は
確かに多い。

>学者になるんだったら、時間かけて練った答えも有りだと思う。
単純な課題に短時間でシンプルな答えを出せない人は職業プログラマはもちろん
学者にも向いてない。
学者になるには知識以上にシンプルなプログラムを素早く思いつくことが
出来る論理的思考能力が必要なのだ。

プログラマに向いてないからといって人間の価値が否定されるわけではないのだし
猿まねしかできない人間がプログラマになろうとするのは
雇う側にとっても雇われる側にとっても不幸なことだ。


297:仕様書無しさん
07/06/19 22:23:17
プログラムを紙に書き出すような人間には
プログラムを書いてほしくないなあ

298:仕様書無しさん
07/06/19 22:41:40
>>297
昔は紙に書くのがあたりまえだった。
マシンの使用時間が貴重だったから、あらかじめ紙の上でプログラムを組んでこれまた紙の上で
デバッグして、完成させてから打ち込まないといけなかった。

大昔のことと言わないでくれ。
コンピュータ上のエディタでちまちました編集を繰り返してプログラムをようやく完成させるのでなく、
コンピュータを使わなくても頭の中で完成に近いコードを組める力があるのは、大事なことだと思うんだ。

299:仕様書無しさん
07/06/19 22:48:08
>>298
あんたがコボラじゃないなら、話を聞いてやる

300:仕様書無しさん
07/06/19 22:56:18
大昔 COBOL & FORTRAN
昔 C/C++ & Java
今 VB & C# & Perl & Ruby
のジジイじゃが、駄目かね?

301:仕様書無しさん
07/06/19 23:16:04
概念図みたいなものは紙に書くし、
コードもラフスケッチ(でかくなりそうなコードの俯瞰みたいなの)は
やっぱり紙に書いたりすることもあるなぁ。

302:仕様書無しさん
07/06/19 23:17:42
脳内でコーディングを済ませて後はそれを一気に打つだけ
みたいなスタイルでいけるほど慣れてないと駄目ってことですか?

303:仕様書無しさん
07/06/19 23:26:53
>>300
Rubyを紙で、ってのがよくわからん

ブロックはどう表現するんだ?

304:仕様書無しさん
07/06/19 23:28:15
仕事の話ならドキュメントの充実度次第

305:仕様書無しさん
07/06/19 23:32:45
>>303
Ruby は別に紙に書いとらんのじゃが。
紙に書いとったのは大昔のことじゃな。
読み返して思ったが、お前さんがレスしようとしたのは>>301さんかね?
ワシも同じようなことやっとるよ。(概念図やロジックの見当をつけるためのラフなコードの書き出し)
若者と話を通じさせるのは難しいもんじゃて。ワシの頭も固くなった。ふぉふぉ。

306:仕様書無しさん
07/06/19 23:44:59
>>302
この問題が出題されるような所は、そうでないと駄目だってことだろうね。
時間制限の中で必要なロジックを記述できることが大事だと思うので、
ある程度の誤記は免じてもらえるんじゃないかと思うけれども。
不合格の回答例を見たい。

307:303
07/06/19 23:53:15
>>305
俺はエディタ上じゃなければモノを考えられんのだが、
直接コードを書かずに脳内で推敲したり紙に書いたりするメリットが
よくわからないので教えてほしい

>>303>>300==>>301と誤認しただけ

308:仕様書無しさん
07/06/20 00:05:40
頭脳内に構築した論理構造体を写像して最終的にコードにするんだろ。
構築中の論理構造体に曖昧な点があったらコードに写像できないだろ。
その曖昧さを解消するために紙と言う中間媒体を使う人が多いというだけの話だと思うが。

309:仕様書無しさん
07/06/20 00:14:02
>>307
頭のできがちがうようじゃね。
ワシは、エディタの画面だけだとコードやロジックを追い切れんことがあるので、
紙に全体像のスケッチや巨視的なコードを書き出して整理したい性分なのじゃが。
お前さんは、エディタの画面だけで、プログラムの全体像が見えなさるのかね?
リファクタリングが必要になった時は? ワシもこれがわからんので教えて欲しい。

310:仕様書無しさん
07/06/20 00:30:37
>>309
コード書いてるときにプログラムの全体像はみえんが、
別にそれでもこまらん気がする。なんかこまるか?
リファクタリングについては、なにがわからんのかわからん。

311:仕様書無しさん
07/06/20 00:37:09
>>310
例えば、同じようなロジックを別々の場所で再開発していた時に困る。
使用言語やエディタによるかもしれんが。

312:仕様書無しさん
07/06/20 00:55:46
>>311
コードの抽象化を進める過程で、全く違うことをやるための
ロジックが結果的に似てしまうってのはよくある

313:仕様書無しさん
07/06/20 03:46:42
コードがでかくなるとエディタで追えんくなってくるね
そーゆー時に紙とペン使うのは良いと思う
業務でも学問でもFizzBuzzくらいは
メモ帳でも書けてくれにゃ困るが

314:仕様書無しさん
07/06/20 06:27:46
細かい文法上の問題とかはIDEが補完してくれるからどうでもいい。
問題はforとifの構造すら思いつかない猿以下のPG

315:仕様書無しさん
07/06/20 06:36:13
IDEの補完に頼りすぎた猿以下のPGはこれから増えるんでないかなー

316:仕様書無しさん
07/06/20 06:47:50
IDE使おうがよく打つ人間ならそのうち頼らなくても打てるようになるさ
補完機能って大抵馬鹿だし

317:仕様書無しさん
07/06/20 07:09:33
インデント等の補完が大嫌いだ
オレは自分でやりたいんだよ・・・・なぜか。

318:仕様書無しさん
07/06/20 08:51:18
多人数の場合、論外な書き方が出にくい利点はある。

俺はVBの自動スタイルが大嫌いだが
VBマの平均レベルを考えるとあれで良いんだろう。
むしろもっとキツくして良いくらい。

319:仕様書無しさん
07/06/20 10:59:18
>>314
禿同
>問題はforとifの構造すら思いつかない猿以下のPG
さらなる問題は携帯の開発現場などを見渡してみても
実際そのレベルのPGが圧倒的に多く派遣されているってことだ。

PGをやるから猿以下って言われるだけで他の仕事なら
能力を活かせて人並みに評価される場もあるはずだから、
PGに向いてないのに無理してPGをやりたがるなよ
と言いたい。

320:仕様書無しさん
07/06/21 10:03:13
>>319
そうだね。ホント、携帯の周りには多いよね。

前のケータイ系サーバ開発(C言語)で

char a[10];
long l;

ってコードがあって、自称PGに

「a に文字列で数値が入るから数値に変換して l に入れてください」

って言ったら

l = (long)a;

という異次元コードをコミットして、「うまくいきません。」だってwwwwwww
どんな未来C言語だよwwwwwwww

いるだけでただのデスマーチがデスマーチVistaくらいになって大迷惑。

321:仕様書無しさん
07/06/21 10:48:39
C言語って一度ポインタの壁超えたあと
全編に渡って「ポインタ的な理解」をしてやっと基礎終了でしょう
Fizz-Buzzはそのレベルの問題ですらないんだな・・・・

322:仕様書無しさん
07/06/21 11:25:54
>>320
キャストの使い方は見たことがあるけどデータ型について
理解してないのに自称PGですか。
そういう自称PGって生産性ゼロならまだいいけど
切羽詰まった開発現場の雰囲気をさらに殺伐とさせることを含めて
全体の生産性を下げるから困ったモンです。

以前は大学とか院までいってFizz-Buzz問題が出来ない奴
はいないだろという思いこみがあったんで
なんで、いくら教えても、知識はついているように見えるのに
PGとしての能力が向上しないのか?と何年も悩んだ経験がある。

Fizz-Buzz問題関連トピックのおかげで
そういう自称PGがたくさんいるということに気がついたから
これからはPG適性のない人たちを開発プロジェクトに投入して
お互いに消耗することはしなくて済みそうだ。

323:仕様書無しさん
07/06/21 11:35:55
自主的に組む経験が少ないのさ
フリーゲームとかつまらないのでも良いから沢山作ってる人達にはそんな人は居ないだろう

324:仕様書無しさん
07/06/21 16:36:10
>>320
冗談ではなく、そういうのいるぞ。

char a[10];
long l;

lにある数値を文字列化してaに入れるのが

a = (char *)l;

うまく行きませんとか答えるの。orz

325:仕様書無しさん
07/06/21 23:05:57
char a[10];
long l;

l = a.toLong();

先輩、うまく行きません。

326:仕様書無しさん
07/06/22 01:52:20
>>324
それ、>>320のと同一人物だろwww

327:仕様書無しさん
07/06/22 02:18:41
VBじゃねぇつーのww

まぁ、大卒と言っても文系だと、むしろ高卒以下
のことが多い。
派遣先の新人プロパーがまさに>>320なコードを
書いて「何かオカシイんですけど…」と言ってた。
ゆとり世代の大卒、まして文系に期待するな。


328:仕様書無しさん
07/06/22 03:22:20

char a[10];
long l;

l = boost::lexical_cast<long>(a);

こうですか?わかりません


329:仕様書無しさん
07/06/22 12:39:08
>>327
文系ならいいんだよ、こっちも適性があるかどうか見極める気になるし。

問題は工学系の大卒、院卒の奴
基礎は>>320レベルなのに出来そうに見せるための知識は持っていて
プライドだけが高いから基礎からやりなおそうともしない。

雇った後で気がついてもアトの祭りorz


330:仕様書無しさん
07/06/22 13:08:09
2分じゃ無理だなー
割り算して求めればいいやと思いつつEclipse立ち上げながら2ch見てなんとなくメインクラス作って
変数何にしようか考えて
でこのあたりで2分は超える

331:仕様書無しさん
07/06/22 15:17:00
大学でCの演習やってたら普通
atoiとかやるはずなんだけどなー。

332:仕様書無しさん
07/06/22 16:10:56
atoiでいいのか?

333:仕様書無しさん
07/06/22 16:21:10
常識的に考えてsnprintfだろ

334:仕様書無しさん
07/06/22 16:34:01
これが現実

335:仕様書無しさん
07/06/22 16:54:53
元問題の話か
まぁいいや、さぁいくか。

336:仕様書無しさん
07/06/22 19:35:51
>>328
C++ じゃなくて C。
しかも boost なんてどこで採用されてんだよwwww

337:仕様書無しさん
07/06/22 20:24:01
ここで、Fizz-Buzz的な問題を一問。
問:3000までの親和数を求めるプログラムを書け。

# 親和数とは
異なる2つの自然数の自分自身を除いた約数の和が、互いに他方と等しくなるような数。
例えば(220, 284)は、224の約数のうち224を除いたものの和は280となり、280の約数のうち280を除いたものの和は224になる。

338:仕様書無しさん
07/06/22 21:50:09
#include <stdio.h>
#include <memory.h>

#define SEARCH_MAX 3000

int getSumofDiv(int target) {
 int ret = 0;
 for (int i = 1; i <= target/2; ++i)
  if ( target % i == 0) ret += i;
 return ret;
}

int main() {
 int nums[SEARCH_MAX];
 int i,j;

 memset(nums, 0, sizeof(nums));

 for(i = 1; i <= SEARCH_MAX; ++i)
  nums[i-1] = getSumofDiv(i);

 for(i = 1; i <= SEARCH_MAX; ++i) {
  for(j = 1; j <= SEARCH_MAX; ++j) {
   if ( nums[i-1] == j && nums[j-1] == i && i != j) {
    printf("%d:%d\n", i, j);
    nums[i-1] = nums[j-1] = 0;
    }
  }
 }
 return 0;
}
強引だけどこんなもんで

339:仕様書無しさん
07/06/22 22:10:57
何も考えずにこんなんでどよ
#include<stdio.h>
int main(){
        int table[3001]={0};
        int i,j;
        for(i=1;i<=3000;++i)
        for(j=i+i;j<=3000;j+=i)
                table[j] += i;
        for(i=1;i<=3000;++i){
                if(i <= table[i])continue;
                if(table[table[i]]==i )
                        printf("%d %d\n",table[i],i);
        }
        return 0;
}


340:仕様書無しさん
07/06/22 22:15:37
#include <stdio.h>
#include <memory.h>

#define SEARCH_MAX 3000
#define toOffset(x) (x-1)

void makeSumofDivs(int* nums) {
 unsigned int i, j;
 for (i = 1; i <= SEARCH_MAX; ++i) {
  for(j = 2; j*i <= SEARCH_MAX; ++j)
   nums[toOffset(i*j)] += i;
 }
}

int main() {
 int nums[SEARCH_MAX];
 int i,j;

 memset(nums, 0, sizeof(nums));
 makeSumofDivs(nums);

 for(i = 1; i <= SEARCH_MAX; ++i) {
  for(j = 1; j <= SEARCH_MAX; ++j) {
   if ( nums[toOffset(i)] == j && nums[toOffset(j)] == i && i != j) {
    printf("%d:%d\n", i, j);
    nums[toOffset(i)] = nums[toOffset(j)] = 0;
   }
  }
 }
 return 0;
}
もうこれでいいよね

341:338=340
07/06/22 22:22:28
>>339
こんなのが一発で思い浮かぶようになりたいぜ…orz

342:仕様書無しさん
07/06/22 23:52:10
#include <stdio.h>
#include <stdlib.h>
int dsum(int);
int main(int argc, char *argv[]) {
  int pairbase;
  int *skiplist = NULL;
  int skipnum = 0;
  for (pairbase = 1; pairbase <= 3000; pairbase++) {
    int pairtest;
    pairtest = dsum(pairbase);
    if (dsum(pairtest) == pairbase) {
      int search;
      for (search = 0; search < skipnum; search++) if (*(skiplist + search) == pairbase) break;
      if (search == skipnum) {
        printf("(%d, %d)\n", pairbase, pairtest);
        skiplist = (int *)realloc(skiplist, sizeof(int) * (skipnum + 1));
        *(skiplist + skipnum) = pairtest;
        skipnum++;
      }
    }
  }
  if (skiplist != NULL) free(skiplist);
  return 0;
}
int dsum(int num) {
  int roopmax, d, rtnsum;
  rtnsum = 0;
  roopmax = num / 2;
  for (d = 1; d <= roopmax; d++) if (num % d == 0) rtnsum += d;
  return rtnsum;
}

343:仕様書無しさん
07/06/23 00:09:35
何の役にも立たないプログラムを書く奴のモチベーションがどこから来ているのかを誰か教えてくれ。

344:仕様書無しさん
07/06/23 00:11:30
わからない人には教えてもわからない

345:仕様書無しさん
07/06/23 00:20:17
そこに問題があったら解きたくなるのが人情ってもんだろ。違うか?


346:仕様書無しさん
07/06/23 00:35:05
URLリンク(www.agusa.i.is.nagoya-u.ac.jp)

347:仕様書無しさん
07/06/23 01:13:53
知恵遅れのためにCOBOLとかRPGでも書いてやれよw

348:仕様書無しさん
07/06/23 08:49:56
検証する側から考えると改行の有無で評価が分かれそうだな

349:343
07/06/23 09:01:24
>>345
解がないならね。
自分は解けると判っている問題を解くことの面倒の事を言っているんだけど

350:仕様書無しさん
07/06/23 09:02:43
ボケ防止兼、腕試し

351:仕様書無しさん
07/06/23 09:08:14
趣味でなにかやってる人にやる意味あるのかとか聞くのか。へぇ。

352:仕様書無しさん
07/06/23 09:20:05
趣味プログラムは多少なりとも自分の役に立つものだろう

353:仕様書無しさん
07/06/23 09:28:01
fiber使ってライフゲームとかそういう下らんものしか作ってないぜ…

354:仕様書無しさん
07/06/23 10:25:17
数独やピクロスみたいなパズルって、壮大な時間の無駄だし、解くの面倒だよな。
しかもパズルとして与えられた以上解けるのはわかっているし、時間をかければ解けるのは確実だし。


355:仕様書無しさん
07/06/23 10:33:25
大学って別にコンピュータの専門学校じゃないから
「Cの演習」なんてやらんところも多いよ。
別にPGを育てるのが大学じゃないから。

356:355
07/06/23 10:34:50
ああ、もちろん「コンピュータ系の学部でも」という意味で。

357:仕様書無しさん
07/06/23 10:39:27
受験の頃に苦戦した数学の問題をプログラムで解いて俺tueeee!するのが趣味です

358:仕様書無しさん
07/06/23 14:17:20
高校で古文や漢文をやるのと同様に、
大学でCをやるのさ。

359:仕様書無しさん
07/06/23 14:22:21
>>343
>>337を見たとき、おっ面白そうじゃんと思って
ついプログラムを書いてみたくなるのがプログラマ向きの人

>何の役にも立たないプログラムを書く奴のモチベーションがどこから来ているのかを誰か教えてくれ。
反射的にそう思ってしまう人は
さんざん苦労したらこの程度の問題はとけるかもしれないが
無能プログラマと呼ばれて35歳前に力尽きてしまう人



360:仕様書無しさん
07/06/23 14:37:20
つまんねー流れ

361:仕様書無しさん
07/06/23 16:03:39
>>359
全く同意できないわけだが。
パズルの鮮やかな解法を見つける頭脳なんてのは大半のプログラマには全く要求されない。
趣味と仕事が一致すれば幸せかという問いにYesと答えられるほど暢気な業界でもないしな。


362:仕様書無しさん
07/06/23 17:59:53
>>361
全く同意できないというのはよく分かる
だが、切羽詰まった開発の現場でなんとかバグをつぶしてプロジェクトを
終わらせているのはパズルの鮮やかな解法を見つける頭脳を持った
連中だという事実がある。
単なるデータ入力要員でしかない大半の人間にプログラマという
呼称を与えているのは人材派遣会社の権益確保のためとしか言いようがない。

363:仕様書無しさん
07/06/23 19:12:00
362を読んで詭弁のガイドラインを思い出した

364:仕様書無しさん
07/06/23 19:14:41
URLリンク(blogs.yahoo.co.jp)

パズルとプログラムが無関係だからなんだというんだ。

だが簡単で無意味な問題だから俺は解かない。という態度のヤツが、
もし本当に複雑で重要な問題を任されてみてはたして解けるのか・・・

そもそも、その簡単な問題を「解かなかった」のか「解けなかった」のか・・・

365:仕様書無しさん
07/06/23 20:24:13
四の五の言わずに2分以内に解け
さもなくば不採用だ

366:仕様書無しさん
07/06/23 20:39:31
>>365
それにつきる

367:仕様書無しさん
07/06/23 20:50:05
>パズルの鮮やかな解法を見つける頭脳なんてのは大半のプログラマには全く要求されない。
されてるけど気づいてないだけなんじゃないの?

368:仕様書無しさん
07/06/23 20:54:52
>>366
実は担当者と交渉して2分を2週間に伸ばすことが出来るかどうかが真のテストだったのさ
そこを真面目に2分でやるような奴は簡単に使い潰せそうということで採用

369:仕様書無しさん
07/06/23 21:03:28
fizz-buzzみたいな問題では無いだろうが
もっと難しい問題出されてそのオチはありそうで怖いなw

370:仕様書無しさん
07/06/23 23:11:22
そういうテストは教育の中ではやったな。
難しい課題を出して「わかりません」と言える奴は意外と少ない。
言える奴は意外と出来る奴で、出来ない奴は「わからない」と言えない。
言ったとしても何がわからないのかを言えないんだわ。

371:仕様書無しさん
07/06/24 11:07:32
def da(n)
 (2..(n / 2)).inject([1]) {|a, i|
  n % i != 0 ? a : (a << i << (n / i))
 }.sort.uniq
end
def sum(a)
 a.inject(0) {|sum, n| sum += n}
end
(1..3000).inject([]) {|a, n|
 n2 = sum(da(n))
 n != n2 && n == sum(da(n2)) ? a << [n, n2].sort : a
}.sort.uniq.each {|a| puts a.join(' ')}

372:仕様書無しさん
07/06/24 21:59:49
URLリンク(oku.edu.mie-u.ac.jp)
> FizzBuzz問題をわが情報教育課程3年生の優秀な学生42人に制限時間付きでC言語で解かせてみた。

最速の学生でも、5,6分だってよ。
そりゃそうだな。

373:仕様書無しさん
07/06/24 22:54:55
>>372
コンパイルとか、そういうのは時間に入れないんじゃないのかな。
基本的なアルゴリズムを思いつけるかどうか。

実際、FizzBuzz解けないような奴が周りに居るとは思えないが、
最初に思いつくアルゴリズムが最適なものである自信はプロであるオレにも無い。

374:仕様書無しさん
07/06/24 23:29:39
>370
それなんてコバヤシマル・シナリオ?

375:仕様書無しさん
07/06/25 01:07:53
>>373
「最適なアルゴリズム」は学者の仕事さ

376:仕様書無しさん
07/06/25 04:49:16
最速の学生が、結果的に妥協だったのか否かで優秀かどうか評価が分かれる。

377:仕様書無しさん
07/06/25 09:15:38
問題として出た以上
多少凝らなければいけないのかどうか考えたりすると思うのですけれど。
2分でハイ出来ましたじゃ通らないと考えそうだし。

大学の情報系だったら自分がやりたくて昔からやってるバリバリなの居て当然だしね

378:仕様書無しさん
07/06/25 09:33:38
この問題を解かせる時は
「2分で解け」と予め制限時間書いておくのも良いかもね
要は基本的なことがとりあえず書けるか否かを見たいわけだから
2分で書いたテキトーコードでもスキルは出る

379:仕様書無しさん
07/06/25 13:29:04
蒸し返すようだが
動作テスト禁止ってのが基地外

380:仕様書無しさん
07/06/25 16:54:03
なんか、皆Fizz-Buzz問題を時間競争と思っているようだが
10分以上かけても自力でプログラムが書ける人なら
PGとして伸びる可能性があるから採用出来る。
だがサンプルソースが無くインターネットで検索できない状況で
Fizz-Buzz問題を与えたら呆然としてしまう自称プログラマが
実際にゴロゴロしてるのが現状。
そういう奴に限って>>361のようなことを堂々と言って
うまく立ち回る術を心得ているので誑かされてしまう
Fizz-Buzz問題は出来る奴のレベルを判定するためではなく
PGに全然向かない奴を見つけるために価値がある。


381:仕様書無しさん
07/06/25 17:02:44
時間競争っていう意味でも充分でしょ。

スグ出来るやつがいて、そうでないやつがいる。
出来ないやつのうち、黙ってるヤツも、
何かをいうやつも、残念ながらハズレ。

382:仕様書無しさん
07/06/25 17:03:56
>>379
残念ですがお帰りください。

383:仕様書無しさん
07/06/25 17:11:27
数分で紙に書くのはきついかも。。
数分でエディタに打ち込むならなんとか

384:仕様書無しさん
07/06/25 17:20:35
しかし重要な場面でこうやって試されたら
1) アヒャって性能低下(元々低いのがさらに)
2) APIリファレンス無しでは心もとない
3) いいトコ見せようとして欲張って自爆
って感じが。くわばらくわばら。

385:仕様書無しさん
07/06/25 17:28:04
>>383
俺も。
「他人に読める字で書け」となると、5分もらわないと。

386:仕様書無しさん
07/06/25 20:42:08
fizz-buzzはいけるだろうけど友愛数とかやられたしぼん確定

387:仕様書無しさん
07/06/25 21:56:42
>>386
まず問題の意味を理解できない俺チュンリー

388:仕様書無しさん
07/06/25 23:31:03
無難にフィボナッチ数列で

389:仕様書無しさん
07/06/25 23:50:31
フィボナッチはいいね。
何も考えないでこういうコード書く奴いそうで。

int fibonacci(int n) {
 if (n == 1 || n == 2) return 1;
 return fibonacci(n - 2) + fibonacci(n - 1);
}

390:仕様書無しさん
07/06/25 23:53:09
#define fib(n) (((n)==1||(n)==2)?1:fib((n)-1)+fib((n)-2))

391:仕様書無しさん
07/06/26 00:31:43
(define (fib n)
(fib-iter 1 0 0 1 n))

(define (square x) (* x x))

(define (fib-iter a b p q count)
(cond ((= count 0) b)
((even? count) (fib-iter a
b
(+ (square p) (square q))
(+ (* 2 p q) (square q))
(/ count 2)))
(else (fib-iter (+ (* b q) (* a q) (* a p))
(+ (* b p) (* a q))
p
q
(- count 1)))))


392:仕様書無しさん
07/06/26 00:50:05
sub fib{
 my ($n) = @_;
 return (((1+sqrt(5))/2)**$n - ((1-sqrt(5))/2)**$n)/sqrt(5);
}

393:仕様書無しさん
07/06/26 01:19:33
>>390
Cのプリプロセッサって再帰的な展開できるんだっけ?


394:仕様書無しさん
07/06/26 01:44:25
static int[] CalculateFibonacci(int n){
 if(n < 2){
 throw new ArgumentException();
 }
 int[] fib = new int[n];
 fib[0] = fib[1] = 1;
 for(int i = 2; i < n; i++){
 fib[i] = fib[i - 2] + fib[i - 1];
 }
 return fib;
}

395:仕様書無しさん
07/06/26 01:57:25
//何も考えずにやったけどこれでいいのか?
double fibonacci(int n) {
double k1, k2, k3;
int i;
if (n <= 0) return 0.0;
k1 = k2 = k3 = 1;
for (i = 3; i <= n ; i++) {
k3 = k2 + k1;
k1 = k2; k2 = k3;
}
return k3;
}

396:仕様書無しさん
07/06/26 02:35:19
検索しないと解けないような問題でインターネット検索ありで問題解かせるのとかどうよ?
実際探し物のテクニックって重要だと思うし

397:仕様書無しさん
07/06/26 10:58:34
人力検索使われそうだな

398:仕様書無しさん
07/06/26 12:33:51
>>397
ワロタ

399:仕様書無しさん
07/06/26 12:43:40
>>395
できればいっしょに仕事したくない

400:仕様書無しさん
07/06/26 14:00:28
def fibo(n)
 n <= 2 ? n : (fibo(n - 1) + fibo(n - 2))
end
(1..10).each {|n| puts fibo(n)}

401:仕様書無しさん
07/06/26 14:24:14
まったく同じ計算を平気で繰り返す奴ってなんなの?

402:仕様書無しさん
07/06/26 14:53:36
fibonacci数列をO(N)やO(N^2)でしか書けない
プログラマーはダメプログラマーだな。

403:仕様書無しさん
07/06/26 15:19:58
URLリンク(d.hatena.ne.jp)

>俺がコンピュータサイエンス学科に居た頃とTeachingAssistantとして
>一年生の面倒見てた経験から言うと、プログラミングが出来ない人は
>ホントに最初の段階から出来ない。
>
>例えば、
>
>int a = 10;
>
>というのを習うと 50 人中 4,5 人は脱落する。
>変数という概念がどうしても腹の中におちていかないらしい。

泣けるぜ



404:仕様書無しさん
07/06/26 15:51:23
O(N)で駄目、かつ条件がCの標準ライブラリだけ
ってことはその場で行列演算ライブラリを作れってことか
何度もそういうの造って覚えてる人じゃないと無理っぽい

405:仕様書無しさん
07/06/26 16:10:58
行列計算しなくても>>391みたくすればO(log n)に落ちるんでない?
>>392の方法ならO(1)だし
>>391>>392のコードはいいセンスしてるな


406:仕様書無しさん
07/06/26 16:49:56
累乗がO(1)かどうかはさておき
何でこうなるかすら理解できないのは俺が専門外だからか
いや、専門だったとしても理解できるかどうかはわからない

とりあえず>>391>>392の言語が何かだけはどうしても知りたいからマジで教えてください


407:仕様書無しさん
07/06/26 16:56:28
>累乗がO(1)かどうかはさておき
おくなよw

408:仕様書無しさん
07/06/26 16:59:24
O(N^2)で書く方法が思いつかない俺はダメですか

409:仕様書無しさん
07/06/26 17:06:01
391 が lisp か
392 が perl か
400 が ruby か


410:仕様書無しさん
07/06/26 17:22:31
>>391
scheme
>>392
perl
でおk?



411:仕様書無しさん
07/06/26 17:50:43
>>406みたいなやつはいらん知識ばっかり持っててつかえねーんだよ

412:411
07/06/26 17:53:15
スマソ>>392だった。釣ってくる。

うちにも数学マニアみたいなやつがいて優秀で知識も豊富なんだろうけど、
一般常識がまったくできん。こいつ誰かもらってくれ。


413:仕様書無しさん
07/06/26 18:01:07
ググるまでフィボナッチ数列と黄金比の関係を知らなかった ('A`)

414:仕様書無しさん
07/06/26 18:08:04
なんだよこの流れ
ここはム板じゃなくてマ板だ

415:仕様書無しさん
07/06/26 18:15:16
391 が ガリ勉委員長タイプ
392 が 変態キモオタタイプ
400 が 爽やかイケメンタイプ


416:仕様書無しさん
07/06/26 19:19:25
Cで10000番まで試したら>>392のアルゴリズムの速度は>>395の2倍程度だった
やっぱ累乗とかのコスト関係なくかなり速いようです
やっぱ見た目からしてヤバイと思ったけどその通りだったんだなぁ

417:仕様書無しさん
07/06/26 20:04:35
>>416
>Cで10000番まで試したら
まず n = 71 で精度が足りなくなって
次に n = 1475 でオーバーフローしますね。

418:仕様書無しさん
07/06/26 20:16:14
関数が返す値は使ってないからオーバーフローしようが何しようが結果は変わらないよ
演算コストを計るだけだから問題ないかなと思ったんだけどそうでもないのかゐ?
70ぐらいまでだと50ぐらいのあたりで殆ど速度が同じになるのが面白い

419:仕様書無しさん
07/06/26 20:43:57
Cで書き直してfib(0~46)の生成を100000繰り替えしたみた
391考えたやつ頭いいな。

>>391
3.46s user 0.00s system 97% cpu 3.549 total

>>392
5.80s user 0.02s system 97% cpu 5.968 total


420:仕様書無しさん
07/06/26 20:52:51
long longにしてfib(0~93)でもう一回やると

>>391
15.19s user 0.05s system 97% cpu 15.665 total

>>392
14.67s user 0.03s system 97% cpu 15.107 total


421:仕様書無しさん
07/06/26 21:14:45
累乗使ってるのは間違った答え出してきそう

422:仕様書無しさん
07/06/27 09:49:37
>>419
>391考えたやつ頭いいな。
wikipedia くらい読んだら?

423:422
07/06/27 09:50:01
間違えました。
もういいです。

424:仕様書無しさん
07/06/27 13:20:42
>>1
初心者にやらせる場合
まず1-100のプリントを書かせて
後付でFizzBuzz入れるほうがいいかもな

425:仕様書無しさん
07/06/27 14:00:29
>>424
いやいや、「ちゃんとしてないプログラマ」を教育しようって話じゃないから。

426:仕様書無しさん
07/06/27 19:20:46
いわばFizz-Buzzのふるいだな
デンジャラスな追加要員を排除するべく

427:仕様書無しさん
07/06/27 20:14:03
# python ver
def fib(n):
    a, b=0, 1
    for x in range(n):
        a, b=a+b, a
        print a

以外と簡単な問題のほうがセンスはかれそうだな。
黄金比なんて思い付きもしねぇ。

428:仕様書無しさん
07/06/27 20:26:02
↓コボラ登場

429:仕様書無しさん
07/06/27 22:00:26
やっぱ整数論の本とかアルゴリズム辞典見ながら
いろんな言語のいろんな作法でプログラム書いて遊んだりしとしか無理ってことなんですか?


430:仕様書無しさん
07/06/27 22:17:21
ていうか、ひねりも無く足していくだけのフィボナッチ数列だったら
入門者用の解説とかでよく見るし、

友愛数やら素数やらfizzbuzzぐらいのアルゴリズムならすぐに思いつくっしょ。
少しプログラミングかじったらできるレベル。

431:仕様書無しさん
07/06/27 22:20:43
俺の場合は解いた事があるから解けるだけ
もしそれらの問題を解いた事無かったら恐らく解けないだろう…orz
なんか解いた事の無い問題でもすらすら解ける人が羨ましい

432:仕様書無しさん
07/06/27 22:30:31
とはいえqsortのアルゴリズムを単独で発見できる人は滅多にいない

433:仕様書無しさん
07/06/27 23:53:14
あんなんできるか

434:仕様書無しさん
07/06/28 01:49:38
分割統治の考え方やオーダーを落とす方法を知ってて、
既存のアルゴリズムに適用できればいいんだけどねぇ。
暗記ばっかで試験潜り抜けてるバカ学生には無理だよなぁ。

435:仕様書無しさん
07/06/28 02:09:33
そういう基本的な問題解決に対する考え方を勉強したい
多分なんて事無い簡単な方法なんだろうけど、多分それを使いこなす事が出来る人は限られてくるだろうな
ま、俺は暗記すらしないバカ学生だけど

436:仕様書無しさん
07/06/28 02:09:39
434は自力でqsortを導き出したようです。

437:仕様書無しさん
07/06/28 02:42:27
FFTは思い付いたけどqsortは無理だな

438:仕様書無しさん
07/06/28 09:14:26
バカスw

439:仕様書無しさん
07/06/28 11:35:39
>436
>434の話から、なぜqsortのアルゴリズムを自力で見つけたと帰結されるのか・・・


440:仕様書無しさん
07/06/28 11:44:35
俺にはshell sortが精一杯だった。

441:仕様書無しさん
07/06/28 11:48:59
バブルソートは俺にまかせとけw

442:仕様書無しさん
07/06/28 11:50:18
俺が自力で見つけたソートはバケツソートだった

443:仕様書無しさん
07/06/28 11:52:39
つか、qsort のアルゴリズムが何かなんて実装依存なんだが。

444:仕様書無しさん
07/06/28 11:54:27
qsort=クイックソートなのでは?

445:仕様書無しさん
07/06/28 20:18:49
こないだソリティア自作してたんでそこから一つ考えてみた。
2分とは言わないが、ちょっと考えれば出来るよな?



トランプの4種各13枚…計52枚(ジョーカー無し)を
以下の条件にそって出力。
書式:
(スート)の(数字)。

スーツ:
スペード、ハート、クラブ、ダイヤ。

数字:
1…A
11…J
12…Q
13…K
で、それ以外の数字はそのまま数字を出力。

例:
ダイヤのQ

これをシャッフルして52枚全て出力する。

446:仕様書無しさん
07/06/28 21:01:14
>>445
新人にやらせたことあるけど、シャッフルは意外とできないぞ
スワップの繰返しで簡単にできそうなもんだが、アルゴリズムを勉強したことのないって人が意外に多い

447:仕様書無しさん
07/06/28 21:23:23
要はカードをシャッホーすりゃいいの?
using System;
class Program{
static void Main(){
string[] cards = new string[52];
for(int i = 1; i <= 13; i++){
string number =
(i == 1) ? "A" :
(i == 11) ? "J" :
(i == 12) ? "Q" :
(i == 13) ? "K" :
i.ToString();
cards[i - 1] = "スペードの" + number;
cards[12 + i] = "ハートの" + number;
cards[25 + i] = "クラブの" + number;
cards[38 + i] = "ダイヤの" + number;
}
Random random = new Random();
for(int i = 0; i < 52; i++){
int a = random.Next(i + 1);
Swap<string>(ref cards[i], ref cards[a]);
}
Console.WriteLine(String.Join("\n", cards));
}
static void Swap<T>(ref T a, ref T b){
T t = a;
a = b;
b = t;
}
}

448:仕様書無しさん
07/06/28 22:29:55
昔強引な方法でシャッフルしたことがある。
配列に前の方から0-51のランダムな数字を詰め込む時、詰め込む配列の前に詰め込もうとする数字と同じものが無いか確認して、
そいつを52回繰り返すだけ。

最後の方はひたすら既出チェックに引っかかって失敗しているはずなのに、
トランプのシャッフル程度だと案外実用的な速度で動いていた不思議。


449:仕様書無しさん
07/06/28 22:40:21
>>448
ついこの間、研修でそれやったわ
アルゴリズムで配列のスワップやっただろ?と講師に言われて凹んだw

450:仕様書無しさん
07/06/28 22:49:39
むー、俺の配列シャッフルっていつもこんな感じだな
def shuffle(cards)
  newcards = []
  while c=cards.slice!(rand(cards.size)) do
    newcards.push(c)
  end
  return newcards
end

451:仕様書無しさん
07/06/28 23:34:44
むらが出来ないようにきっちり書くのは案外難しい。
というかその知識があるかないかってだけなんだが。

452:仕様書無しさん
07/06/29 01:09:01
初心者ですが作りました。

URLリンク(sourcepost.sytes.net)

453:仕様書無しさん
07/06/29 01:23:27
// カード配列の作成
$cards = array();
foreach (array('スペード', 'クラブ', 'ハート', 'ダイヤ') as $suit) {
  foreach (array_merge(range(2,10), array('A', 'J', 'Q', 'K')) as $number) {
    $cards[] = $suit . 'の' . $number;
  }
}

// ここで俺が罵られる
shuffle($cards);

// シャッフルしたカードの表示
foreach ($cards as $card) {
  print $card . "\n";
}


454:仕様書無しさん
07/06/29 08:03:29
なんか苦戦しているうちにでかくなっちゃいました
これはテストで出されたらまぁ解けない気がします
言語はC++で必要なライブラリはboostとboost sandboxのrange_exライブラリです
URLリンク(www.uploda.net)

455:仕様書無しさん
07/06/29 09:42:28
class Card
 def initialize(type, num, label)
  @type, @num, @label = type, num, label
 end
 def to_s
  "#{@type}の#{@label}"
 end
end
map = {1 => 'A', 11 => 'J', 12 => 'Q', 13 => 'K'}
cards = %w(スペード ハート クラブ ダイヤ).inject([]) {|a, type|
 (1..13).inject(a) {|a, num|
  a << Card.new(type, num, map.key?(num) ? map[num] : num.to_s)
 }
}
cards.sort_by {|i| rand}.each {|card| puts card}

456:仕様書無しさん
07/06/29 11:11:35
>>453>>455 を合体してみた。

#カード生成
cards = Array.new
["スペード", "ハート", "クラブ", "ダイヤ"].each do |s|
  ["A", (2..10).to_a, "J", "Q", "K"].flatten!.each {|n| cards << s + "の" + n.to_s }
end

#シャッフル
cards = cards.sort_by {|c| rand }

#カード表示
cards.each {|c| puts c}

457:仕様書無しさん
07/06/29 12:09:14
いろんなアプローチがあって楽しいね。

458:仕様書無しさん
07/06/29 12:13:13
俺もRubyは使うが、sort_by{rand} は知らんかった
そんな簡単に書けたのかよ…

459:仕様書無しさん
07/06/29 12:23:37
そういや関数型言語のリストのシャッフルってどうやるんだ?
vectorにして混ぜる以外、パッと思いつかないんだが…

460:仕様書無しさん
07/06/29 13:53:43
>>456
みじかっ
ゴルファーだな。

461:仕様書無しさん
07/06/29 19:58:34
Rubyってすごいんだな
仕様と同じくらいの分量で実装が書けてしまうのか

462:仕様書無しさん
07/06/29 21:38:34
それに引き換えC++は・・・

463:仕様書無しさん
07/06/29 23:35:36
>456 のコードはまだ短くなるからゴルファーではないな

464:仕様書無しさん
07/06/30 01:03:35
>>463
トップゴルファーだけがゴルファーではない

465:1/3
07/06/30 15:02:13
#include <vector>
#include <map>
#include <iostream>

class Card {
public:
  enum type_tag {SPADE, DIAMOND, HEART, CLUB};
  Card(enum type_tag type, int num) : _type(type), _num(num) {}
  enum type_tag type() {return _type;}
  int num() {return _num;}
protected:
  enum type_tag _type;
  int _num;
};

466:2/3
07/06/30 15:03:03
class CardWriter {
public:
  CardWriter(std::ostream &out) : _out(out) {
    _tmap[Card::SPADE] = "スペード";
    _tmap[Card::DIAMOND] = "ダイヤ";
    _tmap[Card::HEART] = "ハート";
    _tmap[Card::CLUB] = "クラブ";
    _nmap[1] = "A";_nmap[11] = "J";_nmap[12] = "Q";_nmap[13] = "K";
  }
  void puts(Card *card) {
    if (!card) return;
    
    if (_tmap.find(card->type()) != _tmap.end()) {
      _out << _tmap[card->type()];
    } else {
      _out << card->type();
    }
    _out << "の";
    if (_nmap.find(card->num()) != _nmap.end()) {
      _out << _nmap[card->num()];
    } else {
      _out << card->num();
    }
    _out << std::endl;
  }
protected:
  std::ostream &_out;
  std::map<int, std::string> _tmap;
  std::map<int, std::string> _nmap;
};

467:3/3
07/06/30 15:03:55
void shuffle(std::vector<Card *> &cards) {
  std::vector<Card *> tmp(cards);
  cards.clear();
  for (; 0 < tmp.size();) {
    int i = rand() % tmp.size();
    cards.push_back(tmp[i]);
    tmp.erase(tmp.begin() + i);
  }
}
int main() {
  std::vector<Card *> cards;
  for (int i = 1; i <= 13; i++) {
    cards.push_back(new Card(Card::SPADE, i));
    cards.push_back(new Card(Card::DIAMOND, i));
    cards.push_back(new Card(Card::HEART, i));
    cards.push_back(new Card(Card::CLUB, i));
  }
  shuffle(cards);
  CardWriter writer(std::cout);
  for (int i = 0; i < cards.size(); i++) {
    writer.puts(cards[i]);
  }
}

468:仕様書無しさん
07/06/30 15:04:57
// 素朴に書いたつもりが、三時間かかった( ´ー`)y─┛~~ みんなならどうする?

469:仕様書無しさん
07/06/30 15:24:51
やっぱC++はこういうこじんまりとしたプログラミングには向いてないんだろうな

470:仕様書無しさん
07/06/30 15:49:30
>>452ですが、>>455-456と同じような方法でシャッフルしてみました。
その他色々、セキュアなコードにしてみた。
Javaの勉強になりました。

URLリンク(sourcepost.sytes.net)

471:仕様書無しさん
07/06/30 16:04:42
この問題のおかげでRubyに興味が出てきた

472:仕様書無しさん
07/06/30 16:42:31
import java.util.*;
class Card { // >>470 さんに刺激されて。もうお腹いっぱい。
  protected String type, label;
  protected int num;
  public Card(String type, int num, String label) {
    this.type = type;this.num = num;this.label = label;
  }
  public String toString() {
    return new StringBuffer(type).append("の").append(label).toString();
  }


473:仕様書無しさん
07/06/30 16:43:13
  public static void main(String[] args) {
    Map map = new HashMap();
    map.put(new Integer(1), "A");
    map.put(new Integer(11), "J");
    map.put(new Integer(12), "Q");
    map.put(new Integer(13), "K");
    final List cards = new ArrayList();
    for (int i = 1; i <= 13; i++) {
      String label = (String)map.get(new Integer(i));
      if (label == null) label = String.valueOf(i);
      cards.add(new Card("スペード", i, label));
      cards.add(new Card("ハート", i, label));
      cards.add(new Card("ダイヤ", i, label));
      cards.add(new Card("クラブ", i, label));
    }
    Collections.sort(cards, new Comparator() {
      Map m = new HashMap();
      Random r = new Random();
      {for (int i = 0; i < cards.size(); i++) {
        m.put(cards.get(i), new Integer(r.nextInt()));
      }}
      public int compare(Object o1, Object o2){
        return ((Integer)m.get(o1)).compareTo((Integer)m.get(o2));
      }
    });
    for (int i = 0; i < cards.size(); i++) {
      System.out.println(cards.get(i));
    }
  }
}

474:仕様書無しさん
07/06/30 18:14:52
>>473
つ Collections.shuffler(cards);

475:仕様書無しさん
07/06/30 18:34:37
>>474
>>470

476:仕様書無しさん
07/06/30 18:42:03
pythonバージョン。
だらだら作ってだいたい30分ぐらい?

#!/usr/bin/python
# -*- coding: UTF-8 -*-
import random

#カードを用意する
suit=["スペード","クローバー","ダイア","ハート"]
court=["A","J","Q","K"]
deck=[]

#デッキを作る
for x in suit:
for y in range(2,11):
deck.append(x+"の"+str(y))
for z in court:
deck.append(x+"の"+z)

#カードを混ぜる
random.shuffle(deck)

#配る
for card in deck:
print card

477:仕様書無しさん
07/06/30 18:47:04
>476
Pythonからインデント抜いたら激しく解り難いぞ…
空白を&nbsp;か全角空白に置換して投稿しる

478:仕様書無しさん
07/06/30 18:57:26
>>477
ああ、そうかすっかり忘れてた。インデントって反映されないんだったけな。

#!/usr/bin/python
# -*- coding: UTF-8 -*-
import random

#カードを用意する
suit=["スペード","クローバー","ダイア","ハート"]
court=["A","J","Q","K"]
deck=[]

#デッキを作る
for x in suit:
    for y in range(2,11):
        deck.append(x+"の"+str(y))
    for z in court:
        deck.append(x+"の"+z)

#カードを混ぜる
random.shuffle(deck)

#配る
for card in deck:
    print card

479:仕様書無しさん
07/06/30 20:56:09
>>472-473
>>470ですが、なるほど、勉強になります。
ところで、>>455さんですよね?

480:仕様書無しさん
07/07/01 00:22:44
>>470ですが、>>472-473を参考にさらに作り直しました。

URLリンク(sourcepost.sytes.net)

481:仕様書無しさん
07/07/01 07:55:07
>>478を短縮。

import random

#カード生成
deck = []
for x in ["スペード", "ハート", "クラブ", "ダイヤ"]:
    for y in ["A","J", "Q", "K"]+range(2,11):
        deck.append(x+"の"+str(y))

#シャッフル
random.shuffle(deck)

#カード表示
for x in deck:print x

482:仕様書無しさん
07/07/01 13:40:18
漏れ「どの程度シャッフルするんですか?どうでもいいなら
    1個入れ替えるだけでもいいですよね」

483:仕様書無しさん
07/07/01 13:43:45
俺「一日ください」

そして次の日提出されるのはHello,World

484:仕様書無しさん
07/07/01 15:50:50
>>479
そうです>>455です。Javaにenumがあったなんてオドロキです。
Card.Suits.SPADEっていう形で指定できるのは気持ちいいですね。

# 52枚分をシャッフルして連結したものをputs
puts %w(スペード ハート クラブ ダイヤ).inject([]) {|a, type|
 ((2..10).to_a + %w(A J Q K)).inject(a) {|a, label|
  a << "#{type}の#{label}"
 }
}.sort_by {rand}.join("\n")

485:仕様書無しさん
07/07/01 18:00:45
>>484
おー、ついにほとんどワンライナーになりましたか。。。
自分は最近、Javaを習ったので、拡張構文をふんだんに使いました。

・enum
・拡張for文
・generic
・可変長引数

486:仕様書無しさん
07/07/01 18:15:32
今更ながら>>1のやつを
% 無しで保守性とかのバランス考えて作ってみたけど
おもしろくもなんともないコードになっちゃった

#include <stdio.h>

const char* s_fizz = "Fizz";
const char* s_buzz = "Buzz";
void main(void)
{
  int i, cnt_fz, cnt_bz;

  cnt_fz = 0; cnt_bz = 0;
  for (i=1; i<=100; i++)
  {
    cnt_fz++; cnt_bz++;
    if (cnt_fz == 3)
    {
      cnt_fz = 0; printf(s_fizz);
    }
    if (cnt_bz == 5) /* support concate fizz+buzz */
    {
      cnt_bz = 0; printf(s_buzz);
    }
    if ((cnt_fz != 0) && (cnt_bz != 0)) /* exclusiv fizz buzz print */
    {
      printf("%d",i);
    }
    printf("\n"); /* need? */
  }
}

487:仕様書無しさん
07/07/01 18:26:11
>484
Rubyの puts は引数に配列突っ込むと
要素ごとに改行するから join("\n") は要らないね

「勝手に改行されるの気持ち悪い」って意見も
Rubyスレで何度か出たことあるけどw

488:仕様書無しさん
07/07/01 18:37:10
>>487 おわー! 勉強になりました。ありがとうございます。

489:仕様書無しさん
07/07/04 14:23:26
>>456, >>460
>>456をゴルファーとか言うやつは、ゴルフやったことないやつ。

つか、Rubyをやってれば、sort_by{rand}なんて小技の一つとして知ってるだろw

490:仕様書無しさん
07/07/04 14:31:14
約:おれのほうがすごい、おれをほめて。

491:仕様書無しさん
07/07/04 20:54:38
訳 だろ

492:仕様書無しさん
07/07/04 21:04:56
疫 だろ?

493:仕様書無しさん
07/07/04 22:05:54
口だけの人は何を言っても聴いてもらえませんよ?

494:こんなの
07/07/04 22:13:19
private void CaluculationMethod()
{
for( int i = 1 ; i <= 100 ; i++)
{
if ((i % 3).Equals(0) && !((i % 15) == 0))
{
Debug.WriteLine("Fizz");
}
else if ((i % 5).Equals(0) && !((i % 15) == 0))
{
Debug.WriteLine("Buzz");
}
else if ((i % 15) == 0)
{
Debug.WriteLine("FizzBuzz");
}
else
{
Debug.WriteLine("i = " + i.ToString());
}
}
Debug.WriteLine("Finish !!");
}

楽勝だろ

495:こんなの
07/07/04 22:16:31
PCだと2分ありゃ余裕だが、
神だと10分位かかりそう。

今時、紙に書かせている奴もどうかと思うが。

496:仕様書無しさん
07/07/04 22:16:41
>>494

else if ((i % 15) == 0) これを最初に調べたら、
二箇所の !((i % 15) == 0)) が不要になるよね。

497:こんなの
07/07/04 22:20:21
まぁ、いいじゃん。

498:仕様書無しさん
07/07/04 22:21:01
っつーか
!=つかえw

499:こんなの
07/07/04 22:21:36
それに+2行増えてしまう。
行数が少ないコードは美しい。
コボラのソースは糞長い

500:こんなの
07/07/04 22:22:37
>>498
オッサンC#でコード書いてみろやw
俺がソースレビューしてやるw

501:仕様書無しさん
07/07/04 22:23:54
増えないだろw

if ((i % 15) == 0)
{
Debug.WriteLine("FizzBuzz");
}
else if ((i % 3).Equals(0))
{
Debug.WriteLine("Fizz");
}
else if ((i % 5).Equals(0))
{
Debug.WriteLine("Buzz");
}
else
{
Debug.WriteLine("i = " + i.ToString());
}

502:こんなの
07/07/04 22:29:10
>>501
アホ。
それじゃコンパイル通らねーだろw
ちゃんとメソッド名も書けw

503:こんなの
07/07/04 22:30:27
>>501
あと、
(i % 15) == 0

 統一しろやw小学生でも出来るぞwww
 ↓
(i % 5).Equals(0))

504:仕様書無しさん
07/07/04 22:32:47
>>502-503 増えないだろw

505:仕様書無しさん
07/07/04 22:46:40
int i;
for (i = 1; i <= 100; ++i)
printf("%s%s", (i%3?"":"Fizz"), (i%5?"":"Buzz")) > 3 ? putchar('\n') : printf("\r%d\n", i);


506:仕様書無しさん
07/07/04 22:50:53
#include<iostream>
class Fizz{}; class fizz{};
class Buzz{}; class buzz{};

template<typename T, typename U> struct P {
static void print( int n ) { std::cout << n << std::endl; }
};

template<> struct P<Fizz,Buzz> {
static void print( int n ) { std::cout << "FizzBuzz" << std::endl; }
};

template<typename T> struct P<T,Buzz> {
static void print( int n ) { std::cout << "Buzz" << std::endl; }
};

template<typename T> struct P<Fizz,T> {
static void print( int n ) { std::cout << "Fizz" << std::endl; }
};

507:506続き
07/07/04 22:51:43
template<int N> struct FizzBuzzGen {
typedef typename FizzBuzzGen<N-1>::F1 F0;
typedef typename FizzBuzzGen<N-1>::F2 F1;
typedef typename FizzBuzzGen<N-1>::F0 F2;
typedef typename FizzBuzzGen<N-1>::B1 B0;
typedef typename FizzBuzzGen<N-1>::B2 B1;
typedef typename FizzBuzzGen<N-1>::B3 B2;
typedef typename FizzBuzzGen<N-1>::B4 B3;
typedef typename FizzBuzzGen<N-1>::B0 B4;
static void print( ) {
FizzBuzzGen<N-1>::print( );
P<F0,B0>::print( N );
}
};

template<> struct FizzBuzzGen<0> {
typedef Fizz F0;
typedef fizz F1, F2;
typedef Buzz B0;
typedef buzz B1, B2, B3, B4;
static void print( ) {
// nothing
}
};

int main(){
FizzBuzzGen<100>::print( );
}

508:506
07/07/04 22:53:16
3年ぶりのC++なので15分かかった。鬱。

509:仕様書無しさん
07/07/04 22:55:36
マに憧れるプログラミング歴3ヶ月です。VB.NETで書いてみました。

For i As Integer = 1 To 100
Dim S As String = ""
If i Mod 3 = 0 Then
S += "Fizz"
EndIf
If i Mod 5 = 0 Then
S += "Buzz"
EndIf
If S = "" Then
S += I.ToString
EndIf
Console.WriteLine(S)
Next

510:仕様書無しさん
07/07/04 23:05:57
>>506
お前、実務でもそんなメンドクサイ事してるのかw?




511:仕様書無しさん
07/07/04 23:06:25
ネタでしょw

512:sage
07/07/04 23:06:42
よし出来た。

#include "fizzbuzz.h"

void main(){
  fizzbuzz();
}

513:仕様書無しさん
07/07/04 23:17:01
>512
なんと。出題用PCには既に解答が入ってたのか

514:仕様書無しさん
07/07/04 23:18:03
#include <stdio.h>
int main() {
 for( int i = 1 ; i <= 100 ; i++ )
 {
  if((! i % 3)&&(! i % 5))
   printf("FizzBuzz");
  else if(! i % 3)
   printf("Fizz");
  else if(! i % 5)
   printf("Buzz");
  else
   printf ("%d",i);
 }
}


515:仕様書無しさん
07/07/04 23:20:39
>>514 こういうのが一番素直で好感が持てる。

516:514
07/07/04 23:21:31
手元にコンパイラが無いのですが合ってますか?

論理的にはこんな感じで良いような気がしますが。

517:仕様書無しさん
07/07/04 23:22:20
>>515
ありがとうございます。

518:仕様書無しさん
07/07/04 23:25:35
残念ながら int main()なのにreturnが無いよ

519:仕様書無しさん
07/07/04 23:27:01
おもいっきり違うだろ。

>>506
みたいなのとは一緒に仕事したくねーな。
わざとソースをめんどくさくするタイプ

520:仕様書無しさん
07/07/04 23:28:49
>>518 リターンなくてもコンパイル通ったような…。
>>519 ほんとだ…肝心のところが全部逆にw

521:仕様書無しさん
07/07/04 23:30:47
ぁぅ。

×ほんとだ…肝心のところが全部逆にw
○==0で見ないといけない。

522:仕様書無しさん
07/07/04 23:32:02
いや…混乱したのでもう黙りますw

523:仕様書無しさん
07/07/05 01:49:06
 IDENTIFICATION DIVISION.
 PROGRAM-ID. FIZZ-BUZZ.
*
 ENVIRONMENT DIVISION.
*
 DATA DIVISION.
 WORKING-STORAGE SECTION.
 01  I PICTURE 999.
 01  A PICTURE 9.
 01  B PICTURE 9.
 01  D PICTURE 99.
 01  O PICTURE ZZ9.
*
 PROCEDURE DIVISION.
 MAIN.
     PERFORM VARYING I FROM 1 BY 1 UNTIL I GREATER THAN 100
         DIVIDE I BY 3 GIVING D REMAINDER A
         DIVIDE I BY 5 GIVING D REMAINDER B
         EVALUATE A ALSO B
           WHEN 0 ALSO 0
             DISPLAY 'FIZZBUZZ' UPON CONSOLE
           WHEN 0 ALSO ANY
             DISPLAY 'FIZZ' UPON CONSOLE
           WHEN ANY ALSO 0
             DISPLAY 'BUZZ' UPON CONSOLE
           WHEN OTHER
             MOVE I TO O
             DISPLAY O UPON CONSOLE
         END-EVALUATE
     END-PERFORM
     STOP RUN.

524:仕様書無しさん
07/07/05 01:52:07
↑手元にコンパイラないから、テストしてないけどこんなもんかな。
コンパイルは通らないハズ。
CONSOLEの宣言とか省略してるから。
全部書くと1レスに収まらねぇだろうしな~w

525:仕様書無しさん
07/07/05 08:34:29
なでしことかで作ったらどんな感じになる?

526:仕様書無しさん
07/07/05 13:57:54
>>524
エンヴァイロメントディビジョン、プロシジャーディビジョン
なつかしスwww

527:仕様書無しさん
07/07/06 00:41:01
だれかぴゅう太BASICでタノム

528:仕様書無しさん
07/07/06 11:56:16
@ECHO OFF
REM バッチファイルでやってみる
SETLOCAL
FOR /L %%I IN (1,1,100) DO ( CALL :CASE )
GOTO :EOF
:CASE
SETLOCAL
SET ARG=%1
SET /A M=%ARG%%%15
IF %M% EQU 0 GOTO :FIZZBUZZ
SET /A M=%ARG%%%5
IF %M% EQU 0 GOTO :BUZZ
SET /A M=%ARG%%%3
IF %M% EQU 0 GOTO :FIZZ
ECHO %ARG%
GOTO :EOF
:FIZZBUZZ
ECHO FizzBuzz
GOTO :EOF
:BUZZ
ECHO Buzz
GOTO :EOF
:FIZZ
ECHO Fizz

529:528
07/07/06 12:07:56
ミスった、正しくは
( CALL :CASE %%I )
と %%I が入る

530:仕様書無しさん
07/07/06 17:57:18
PHPでやってみた
&&使わずに「FizzBuzz」だけを出力するの省いてやれないかなーと思ったらこうなったがあんまり良くないかも、、、

for($i=0;$i<=100;$i++){

$str = "";
if($i%3 == 0){
$str.= "Fizz";
}
if($i%5 == 0){
$str .= "Buzz";
}

if($str == ""){
$str = $i;
}

print $str."<br>\n";
}

531:仕様書無しさん
07/07/06 20:07:30
ここで毛色を変えて一問。

横30行で、任意の文字を受け付け、
以下のような旗を作成するプログラムを作れ。
(ただし、入力された文字が31文字以上の場合は文字をそのまま表示。)

============ test ===============

532:仕様書無しさん
07/07/06 20:24:36
どういうこと?全部で30文字になるように"="を調節して出力ってこと?
例だと後半の"="は15文字あるんだけど。

533:仕様書無しさん
07/07/06 22:03:05
============ test ============
========== fizzbuzz ==========

がいいたかったっぽいね。2ch だとヅレるかもしれんが。

534:仕様書無しさん
07/07/06 22:03:30
>>532
条件が不明確ですまん。
・入力された文字数にかかわらず、横幅は半角30文字。
 (ただし入力された文字が31文字以上ならそのまま表示。)
・"="と入力された文字の間には空白
・入力された文字は必ず中央に
 (ただし"="の合計が奇数になる場合は右側を多くすること。)

上の例は間違ってた。
正確には、こう
========== FizzBuzz ==========

535:仕様書無しさん
07/07/06 22:05:06
>>518
main()のリターンなんて省略でしょ。
警告出すコンパイラがウンコ。

536:仕様書無しさん
07/07/06 22:17:30
>>535
ソフト屋としてありえへん姿勢やわ

537:仕様書無しさん
07/07/06 22:28:48
>>536
コード量が多かったら丁寧ってわけじゃないぞ。

538:仕様書無しさん
07/07/06 22:59:50
よくわからんがC#厨の俺が書いてみたよ。
using System;
class Program{
static void Main(){
const int width = 30;
string str = Console.ReadLine();
int n = (width - str.Length) / 2;
for(int i = 0; i < n; i++){
if(i == (n - 1)){
Console.Write(" ");
}else{
Console.Write("=");
}
}
Console.Write(str);
n = width - (n + str.Length);
for(int i = 0; i < n; i++){
if(i == 0){
Console.Write(" ");
}else{
Console.Write("=");
}
}
}
}
============ unko ============
Rubyの人もっと短くして。

539:仕様書無しさん
07/07/06 23:02:36
インデントしてくれ

540:仕様書無しさん
07/07/06 23:04:04
>>537
コイツが何のことを言ってるのか誰か解り易く説明してくれや

541:仕様書無しさん
07/07/06 23:11:20
入力された文字数が30以上なら表示じゃなくて?28なら空白のみ、29なら右に空白って事でいいのかな?

542:仕様書無しさん
07/07/06 23:16:01
>>541
そう。
実質的に入力された文字が30文字ならそのまま表示。

543:仕様書無しさん
07/07/06 23:52:44
>>540
main()のreturnは省略してもOKってことなんじゃね?

544:仕様書無しさん
07/07/07 00:15:31
30文字以下だったら
============ test ===============
って表示して
31文字以上ならそのまま表示すればいいんでしょ?

545:ちょちょ
07/07/07 00:19:20
>>542 ちょっと長くなった


static void Main(string[] args)
{
//args = new string[1] { "☆☆☆☆" };
string str_base = "★";
string str_value = string.Empty;
string str_output = string.Empty;
int i_param_lenght = 0;
int i_base_count = 30;

if ( args.Length > 0 )
{
if (args[0].ToString().Length >= 1 && args[0].ToString().Length <= 30)
{
i_param_lenght = args[0].ToString().Length;
i_base_count = ( i_base_count - i_param_lenght ) / 2;
for (int i_out = 0; i_out <= 1; i_out++)
{
str_value = string.Empty;
for (int i_in = 1; i_in <= i_base_count; i_in++)
{
str_value += str_base;
}

546:ちょちょ
07/07/07 00:20:40

if (i_out.Equals(0))
{
if( (i_param_lenght % 2) == 0)
{
str_output += str_value + args[0].ToString();
}
else
{
str_output += str_value + args[0].ToString() + str_base;
}
}
else
{
str_output += str_value;
}
}
Debug.WriteLine(str_output);
Debug.WriteLine("長さ → " + str_output.Length.ToString());
}
else
{
Debug.WriteLine("1~30文字以内で入力して下さい!");
}
}
else
{
Debug.WriteLine("パラメータが空っぽ!");
}
}

547:仕様書無しさん
07/07/07 00:26:44
>>543
仕事のコードじゃないならいいよね。省略できるものはどんどん省略すれば。
ゴルフもその思想だし。

仕事で書いたコードでそんなこと言い張る奴が居たら速攻プロジェクトはずされるけど。


548:仕様書無しさん
07/07/07 00:33:08
544がよからぬ事を企んでます!

549:仕様書無しさん
07/07/07 00:33:48
pythonバージョン。


char=raw_input("Please input: ")

if len(char)>30:
    print char
elif len(char)==0:
    print "="*30
else:
    length_left=(30-len(char)-2)/2
    length_right=(30-len(char)-2-length_right)
    print "="*length_left,char,"="*length_right

550:仕様書無しさん
07/07/07 00:51:06
よし!ちょっとperlっぽいけどrubyバージョンも出来たぞ!!

ruby -pe '$_ = "============ test ===============¥n" if $_.length <= 30'

551:ちょちょ
07/07/07 00:56:36
意外とこのすれ面白いなw



552:仕様書無しさん
07/07/07 01:00:55
真面目にrubyでワンライナーでやるとこんな感じになるのか?
だれか添削して。
つかcenterメソッドの使い方今覚えたw

ruby -pe 'chomp;$_ = ((" " + $_ + "").center(30, "=") + "¥n").strip + "¥n"'

553:仕様書無しさん
07/07/07 01:03:52
(" " + $_ + "") -> (" " + $_ + " ")
だったw
だみだこりゃ

554:仕様書無しさん
07/07/07 02:06:25
>>552
centerなんて初めてしったw
よく見つけたなw

555:仕様書無しさん
07/07/07 02:13:49
>>554
つか誰だよこんなメソッド追加した奴w

556:552
07/07/07 02:25:34
28文字29文字の時がダメだったw
>= 30とか比較しない方法無いかな

557:552
07/07/07 02:38:14
姑息な手だけどこれでなんとかいけるか
ruby -pe 'chomp;$_ = ((" " + $_ + " ").center(32, "=").slice(1..-2)).strip + "¥n"'


558:仕様書無しさん
07/07/07 02:51:53
stripいらなかった
間抜け過ぎるorz

559:仕様書無しさん
07/07/07 05:07:06
>>549
>length_right=(30-len(char)-2-length_right)
バグってまっせ。

printf()におんぶにだっこ。
28文字・29文字の場合は、それぞれ両側や右側に空白をつけて表示

#include <stdio.h>
#include <string.h>

static char eq[] = "===============================";

int main(int argc, char *argv[]) {
   int preEQ, postEQ, preSPC, postSPC;   // 前後の'='や空白の数
   char *str = argv[1];
   int length;
   if (!str) {
      str = "引数をこんな風に書くよ";
   }
   length = strlen(str);
   postSPC = (length < 30) ? 1 : 0;
   preSPC = (length < 29) ? 1 : 0;
   preEQ = (length < 28) ? (30 - (length+2)) / 2 : 0;
   postEQ = (length < 28) ? (30 - (length+2) - preEQ): 0;
   printf("%.*s%.*s%s%.*s%.*s\n", preEQ,eq, preSPC," ", str, postSPC," ", postEQ,eq);
}

560:仕様書無しさん
07/07/07 09:05:30
>>221
コボルすげぇなww

561:仕様書無しさん
07/07/07 09:21:17
新人面接で
1.Fizz-Buzz問題って知ってる?
2.Fizz-Buzz問題解かせる
3.>>143の問題(>>243の解法でおk)
4.3の問題でなんか変なとこなかった?

ってやると、30分程度でかなり多くのことがわかるな。

562:仕様書無しさん
07/07/07 10:22:04
>560
for i=1 to 100~next が
PERFORM VARYING I FROM 1 BY 1 UNTIL I GREATER THAN 100
になる言語だものw

563:仕様書無しさん
07/07/07 10:38:01
>>562
なでしこを連想した。

564:仕様書無しさん
07/07/07 10:46:39
>>221
Whitespace_Rank User Size Time Date Statistics
1 Mark Byers 210 0.0003 07/04/02 18:36:01 0B / 0B / 0B

実行速度が頭抜けて速いが…w

565:仕様書無しさん
07/07/07 11:11:52
その辺はhackじゃなくてcrackをしてるらしいw

566:仕様書無しさん
07/07/07 12:10:29
>>564
流石の記号、英数率


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch