[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 2chのread.cgiへ]
Update time : 04/11 23:35 / Filesize : 150 KB / Number-of Response : 567
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

Fizz-Buzz問題



1 名前:仕様書無しさん [2007/05/08(火) 21:22:40 ]
www.aoky.net/articles/jeff_atwood/why_cant_programmers_program.htm

かなりの試行錯誤の末に、コードを書こうともがいている人たちというのは、単に大きな問題に対して苦労している
のではないことがわかった。やや小さな問題(連結リストを実装するというような)に対して苦労するということでさえない。
彼らはまったくちっぽけな問題に苦労しているのだ。

それで、そういった類の開発者を見分けるための質問を作り始め、私が「Fizz-Buzz問題」と呼んでいる問題のクラス
を考え出した。これはイギリスの学校の子供たちがよくやっている遊び(というかやらされている遊び)にちなんで名付けた。
Fizz-Buzz問題の例はこんな感じだ。

1から100までの数をプリントするプログラムを書け。ただし3の倍数のときは数の代わりに「Fizz」と、5の倍数のときは
「Buzz」とプリントし、3と5両方の倍数の場合には「FizzBuzz」とプリントすること。

ちゃんとしたプログラマであれば、これを実行するプログラムを2分とかからずに紙に書き出せるはずだ。
怖い事実を聞きたい? コンピュータサイエンス学科卒業生の過半数にはそれができないのだ。自称上級プログラマが
答えを書くのに10-15分もかかっているのを見たこともある。

2 名前:仕様書無しさん [2007/05/08(火) 21:37:53 ]
紙に?

3 名前:仕様書無しさん mailto:sage [2007/05/08(火) 21:39:05 ]
紙にフローチャートだったら俺も時間かかりそう
コーディングだったらすぐだが

4 名前:仕様書無しさん mailto:sage [2007/05/08(火) 21:40:16 ]
紙に機械語で?

5 名前:仕様書無しさん mailto:sage [2007/05/08(火) 21:43:20 ]
puts("1");
puts("2");
puts("Fizz");
puts("3");
puts("Buzz");
puts("Fizz");
puts("7");

Cで書いても2分じゃ無理だろ。



6 名前:仕様書無しさん [2007/05/08(火) 21:46:19 ]
import std.stdio;

void main()
{
for( int i = 1 ; i <= 100 ; i++ )
{
writef("%d ", i);
if((i % 3) == 0) writef = "Fizz";
if((i % 5) == 0) writef = "Buzz";
writefln="";
}
}

2分で出来た

7 名前:仕様書無しさん mailto:sage [2007/05/08(火) 21:48:28 ]
3及び5の倍数の時は数値は出力されてはいけない

8 名前:仕様書無しさん mailto:sage [2007/05/08(火) 21:50:28 ]
>>6
プログラミング言語能力の前に、日本語の能力が足りないようです

9 名前:仕様書無しさん mailto:sage [2007/05/08(火) 21:50:38 ]
>>6
面接で落とされるな。

10 名前:仕様書無しさん [2007/05/08(火) 21:51:55 ]
import std.stdio;

void main()
{
for( int i = 1 ; i <= 100 ; i++ )
{
bool a, b;
a = ((i % 3) == 0);
b = ((i % 5) == 0);
if( a || b )
{
writef("%d ", i);
if(a) writef = "Fizz";
if(b) writef = "Buzz";
writefln="";
}
}
}
>>7
ご要望どうりに



11 名前:仕様書無しさん mailto:sage [2007/05/08(火) 21:52:03 ]
>>6
ご冥福をお祈りします。

12 名前:仕様書無しさん [2007/05/08(火) 21:52:57 ]
ごめんミスった

import std.stdio;

void main()
{
for( int i = 1 ; i <= 100 ; i++ )
{
bool a, b;
a = ((i % 3) == 0);
b = ((i % 5) == 0);
if( a || b )
{
if(a) writef = "Fizz";
if(b) writef = "Buzz";
writefln="";
}
else
writefln("%d", i);
}
}

13 名前:仕様書無しさん mailto:sage [2007/05/08(火) 21:55:03 ]
見苦しい もういいよ

14 名前:仕様書無しさん mailto:sage [2007/05/08(火) 21:58:16 ]
>1を読んでそんなバカな、と思ったが>6が全てを語ってた。

15 名前:仕様書無しさん [2007/05/08(火) 21:58:40 ]
main ()
{
 int i;

 for (i=1; i<=100; 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");
}
}

16 名前:仕様書無しさん [2007/05/08(火) 21:59:43 ]
つまりコンピュータサイエンス学科卒業生の過半数は文盲?

17 名前:仕様書無しさん mailto:sage [2007/05/08(火) 22:13:37 ]
本気でいるんだな・・・新人教育の最後にやってみよう

18 名前:仕様書無しさん [2007/05/08(火) 22:33:47 ]
import std.stdio;
import std.string;
void main()
{
for(int i=1;i<=100;i++)
{
char[] s;
if((i % 3) == 0) s ~= "Fizz";
if((i % 5) == 0) s ~= "Buzz";
if(!s) s ~= std.string.toString(i);
writefln = s;
}
}
むしゃくしゃしたので書き直した。反省等しない

19 名前:仕様書無しさん mailto:sage [2007/05/08(火) 23:11:15 ]
%は頻繁には使わないから、
初心者なら % を知らないことはありうるかもな。

20 名前:仕様書無しさん mailto:sage [2007/05/08(火) 23:35:51 ]
/* % を使わない例 */
#include <stdio.h>

int main() {
  int i;
  int ctFizz;
  int ctBuzz;

  for (i = 1, ctFizz = 1, ctBuzz = 1; i <= 100; i++, ctFizz++, ctBuzz++) {
    if (ctFizz == 3) {
      printf("Fizz");
      ctFizz = 0;
    }

    if (ctBuzz == 5) {
      printf("Buzz");
      ctBuzz = 0;
    }

    if (ctFizz && ctBuzz) {
      printf("%d", i);
    }

    putchar('\n');
  }
}



21 名前:仕様書無しさん mailto:sage [2007/05/09(水) 00:04:32 ]
あってますか?
あともっと面白いやり方がある気もします

#include <iostream>

int main() {
int multiple = 0;
for (int i = 1; i <= 100; ++i) {
multiple = (i%3 == 0);
multiple |= (i%5==0)<<1;
if (multiple==0)
std::cout << i;
else {
if (multiple & 0x01)
std::cout << "fuzz";
if (multiple & 0x02)
std::cout << "buzz";
}
std::cout << std::endl;
}

return 0;
}

22 名前:仕様書無しさん mailto:sage [2007/05/09(水) 00:05:18 ]
スペル間違ってました…orz

23 名前:仕様書無しさん mailto:sage [2007/05/09(水) 01:41:08 ]
プログラマ二年目。Perlです。

print map { my ($fizz, $bazz); ($_ % 3 == 0 ? ($fizz = 1, "Fizz") : "") . ($_ % 5 == 0 ? ($bazz = 1, "Bazz") : "") . ($fizz || $bazz ? "" : $_) } (1..100)


24 名前:23 mailto:sage [2007/05/09(水) 01:42:55 ]
あ、
print map { my ($fizz, $bazz); ($_ % 3 ? "" : ($fizz = 1, "Fizz")) . ($_ % 5 ? "" : ($bazz = 1, "Bazz")) . ($fizz || $bazz ? "" : $_) } (1..100)
ってすればよかった(´・ω・`)

25 名前:23 mailto:sage [2007/05/09(水) 02:13:09 ]
('A`) 結局こう書けばよかった... スレ汚してごめんなさい。 才能無いわ…
print map { ($_ % 3 ? '' : Fizz) . ($_ % 5 ? '' : Bazz) or $_ } 1..100

26 名前:仕様書無しさん mailto:sage [2007/05/09(水) 03:05:32 ]
あのぅ。ここで

少なくともCで書くなら
演算部分と出力部分を分けて書くべきであって、
誰も10*100のサイズのバッファを使わないのが不思議でならない。

という発言はスレ違いなのでしょうか?

27 名前:仕様書無しさん mailto:sage [2007/05/09(水) 06:53:25 ]
>26
たぶんだけど、自称上級プログラマってやつは、
そういう事をやって仕様を満たさないようなコードを書きやがるんですよw

28 名前:仕様書無しさん [2007/05/09(水) 12:06:46 ]
一番速いコード

#include <stdio.h>

int main()
{
 puts("1\n2\nFizz\n4\nBuzz\nFizz\n7\n (中略) 97\n98\nFizz\nBuzz\n");
 return 0;



29 名前:仕様書無しさん mailto:sage [2007/05/09(水) 12:41:14 ]
>>28
それ、間違ってるよ

30 名前:仕様書無しさん mailto:sage [2007/05/09(水) 14:12:04 ]
>>29
どこが?
素でわからん。




31 名前:仕様書無しさん mailto:sage [2007/05/09(水) 15:01:43 ]
Cで作った。

#include <stdio.h>

main () {
int i;

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

32 名前:仕様書無しさん mailto:sage [2007/05/09(水) 15:03:49 ]
↑そういうアホコードが最新のコンパイラでどこまで最適化されるか興味あるなw

33 名前:仕様書無しさん mailto:sage [2007/05/09(水) 15:15:08 ]
>>32
プロのコードプリーズ!

34 名前:スーパーレッスンプロ [2007/05/09(水) 15:33:52 ]
#include <stdio.h>

int main(int argc)
{
    if(argc <= 100)
        (argc % 3)?(argc % 5)?printf("%d\n", argc):puts("Buzz"):puts((argc % 5)?"Fizz":"FizzBuzz"),
        main(argc+1);
}


35 名前:仕様書無しさん mailto:sage [2007/05/09(水) 15:36:12 ]
     ∧_∧
    (ill´Д`)
    ノ つ!;:i;l 。゚・
   と__)i:;l|;:;::;:::⊃
    ⊂;::;.,.';;;;'::.:.;::.⊃

36 名前:仕様書無しさん mailto:sage [2007/05/09(水) 15:49:30 ]
// C99 required.
for (int i=1; i<=100; ++i)
  printf(&(const char* []){"%d\n", "Fizz\n", "Buzz\n", "FizzBuzz\n"}[i%3 + i%5 * 2], i);

37 名前:仕様書無しさん [2007/05/09(水) 16:01:51 ]
printf("hello", i);って合法なのか?

38 名前:仕様書無しさん [2007/05/09(水) 16:11:49 ]
いつからゴルフスレになったんだよwwwww

39 名前:仕様書無しさん mailto:sage [2007/05/09(水) 16:16:38 ]
#!/opt/local/bin/ruby

class Fixnum
alias original_to_s to_s
def to_s
if 0 == self % 3 && 0 == self % 5
"fizzbuzz"
elsif 0 == self % 3
"fizz"
elsif 0 == self % 5
"buzz"
else
original_to_s
end
end
end

(1..100).to_a.each{|i| p i}

40 名前:仕様書無しさん mailto:sage [2007/05/09(水) 16:44:10 ]
とりあえずコードが書けるヤシと書けないヤシをふるいわけるのが目的なんだから
バグがあろうが非効率的であろうが問題無い
うちの入社試験でもやってくれんかな。



41 名前:仕様書無しさん mailto:sage [2007/05/09(水) 16:48:57 ]
微妙にうっかり八兵衛検出機能も内蔵しているのもよいな。

42 名前:仕様書無しさん mailto:sage [2007/05/09(水) 16:58:04 ]
>>37
「実引数が残っているにもかかわらず書式が尽きてしまう場合,余
 分の実引数は,評価するだけで無視する。」
(JIS X 3010 : 2003 (ISO/IEC 9899 : 1999)

43 名前:仕様書無しさん mailto:sage [2007/05/09(水) 18:20:18 ]
気が早いのか、思い込みが激しいのか、(と言ったら大げさだが)
Fizzがfizzになったり、BuzzがBazzになったり独自仕様な人もいるな。

44 名前:仕様書無しさん mailto:sage [2007/05/09(水) 18:28:10 ]
改行文字入れるのはいいの?

45 名前:仕様書無しさん mailto:sage [2007/05/09(水) 18:55:18 ]
2分足らずで紙に書くのはなかなか難しいと思う

46 名前:仕様書無しさん mailto:sage [2007/05/09(水) 19:17:54 ]
んなこたないだろw
よっぽどあせらなきゃ無問題。

と、国語の入社試験で余裕ぶっこきすぎて時間切れになって
半分白紙で出した俺が偉そうに言ってみる。

47 名前:仕様書無しさん mailto:sage [2007/05/09(水) 20:23:29 ]
プロの書くコードって、きたなくて読みづらいんですね。

48 名前:仕様書無しさん [2007/05/09(水) 20:31:45 ]
マ板がアホ学生の巣窟に見えたのは気のせいじゃなかったんだ・・・

49 名前:仕様書無しさん mailto:sage [2007/05/09(水) 21:32:48 ]
>>30
それを実行させると、
なぜか途中で「(中略) 」などという文字列が出てくる。


50 名前:仕様書無しさん mailto:sage [2007/05/09(水) 22:35:35 ]
1から100までの数をプリントするプログラムを書け。
ただし3の倍数のときは数の代わりに「Fizz」と、5の倍数のときは 
「Buzz」とプリントし、3と5両方の倍数の場合には「FizzBuzz」とプリントすること。 

なお参考までに、正しい出力結果の行頭部分を以下に示す。

FizzFizz4BuzzFizzFizzFizzBuzzFizzFizzFizz14...

※注
「1から100までの数をプリントするプログラムを書け」という条件のみの場合、
"当然"、出力結果は以下のようになる。

1234567891011121314......9899100

しかし、条件として「3の倍数のときは数の代わりに「Fizz」と・・・」と指定されているため、
行頭の "12" をそのまま出力することはできない(12 は 3 の倍数)。
また、次の "3" も 3 の倍数である。
上記の出力結果に、注釈を付加したものを以下に示す
(各 FizzBuzzの 後に続く大括弧内の数字が元の数字)。

Fizz[12]Fizz[3]4Buzz[5]Fizz[6]Fizz[78]Fizz[9]Buzz[10]Fizz[111]Fizz[21]Fizz[3]14...




51 名前:仕様書無しさん mailto:sage [2007/05/09(水) 22:52:58 ]
いるよな、こういうアホって。

52 名前:仕様書無しさん mailto:sage [2007/05/09(水) 22:58:34 ]
2分ってとこが味噌だよな。

53 名前:仕様書無しさん mailto:sage [2007/05/09(水) 23:35:43 ]
#include <stdio.h>

int main()
{
int i;
for (i = 1; i <= 100; i++) {
}
return 0;
}

とりあえずコレだけ書いて、それから中身を書こうと思ったけど、ここですでに30秒つかってる。
2分だとけっこうギリギリかも。


54 名前:仕様書無しさん mailto:sage [2007/05/10(木) 00:32:45 ]
>>44
設問を額面通りに受け取るなら空白も入れられないが
それじゃ見づらいとは思わないのか?

55 名前:仕様書無しさん mailto:sage [2007/05/10(木) 00:35:58 ]
コーダの発想だな、まるで。


56 名前:仕様書無しさん mailto:sage [2007/05/10(木) 00:47:16 ]
要求される2分間という時間と10〜15分という実績の時間について。
まさか優秀な奴を使えば工期が1/5で済むと思っていないよな

57 名前:仕様書無しさん mailto:sage [2007/05/10(木) 00:59:39 ]
>>56
ヘタすりゃ10倍じゃきかないがな。

58 名前:仕様書無しさん mailto:sage [2007/05/10(木) 01:17:48 ]
>>50
つFizzBuzz[123456789101112131415]

59 名前:仕様書無しさん mailto:sage [2007/05/10(木) 01:37:05 ]
>>50
12345678 も 123456789 も、更には 1234567891011 も 3 の倍数だとは気付かなかったのか。なんと間抜けな。

60 名前:50 mailto:sage [2007/05/10(木) 01:42:30 ]
>>59
>12345678 も 123456789 も、更には 1234567891011 も 3 の倍数だとは気付かなかったのか。なんと間抜けな。 

え?

なぜ >>50 の文章から
「3 の倍数だとは気付かなかった」という結論になるの?




61 名前:仕様書無しさん mailto:sage [2007/05/10(木) 02:09:32 ]
12をFizzと書け、という仕様なら、4Buzzじゃなくて
"45は5の倍数だからまとめてBuzz"になるはずだしなあ。
表示と評価のタイミングが不透明だな。

62 名前:50 mailto:sage [2007/05/10(木) 02:13:22 ]
>>61
>"45は5の倍数だからまとめてBuzz"になるはずだしなあ。 

あ、スマン。
それは確かに見逃してた・・・


63 名前:仕様書無しさん mailto:sage [2007/05/10(木) 02:16:34 ]
>>5
4行目間違ってとるぞい。

64 名前:50 mailto:sage [2007/05/10(木) 02:17:12 ]
となると、数字が表示される可能性が
全くなくなりそうだな。

少しは面白い問題になったと思ったのだが・・・

65 名前:仕様書無しさん mailto:sage [2007/05/10(木) 02:39:01 ]
その判定だと、どんな数も0か5が出るまで待てばBuzzれるからな
その前にFizzれるか否か、だけだから
数値を出力する機会はなくなる

66 名前:仕様書無しさん mailto:sage [2007/05/10(木) 03:31:04 ]
>>65の仕様と>>50の最終行の書式で書いてみた。20分くらいかかっちまったい。
一桁ずつ舐めて進んだが、素直に数値を計算したほうがシンプルだったかも。
262728 と 868788 なんて意外と長い部分があったので、書いてみて楽しかったよ。

結果:
Fizz[12]Fizz[3]FizzBuzz[45]Fizz[6]Fizz[78]Fizz[9]Buzz[10]Fizz[111]Fizz[21]
Fizz[3]Fizz[141]Buzz[5]Fizz[1617]Fizz[18]Fizz[192]FizzBuzz[0]Fizz[21]Fizz[222]
Fizz[3]Fizz[24]Buzz[25]Fizz[262728]Buzz[2930]Fizz[3]Fizz[132]Fizz[3]Fizz[3]Fizz[3]
FizzBuzz[435]Fizz[3]Fizz[6]Fizz[3]Fizz[738]Fizz[3]Fizz[9]Buzz[40]Fizz[414]Fizz[24]
Fizz[3]Fizz[444]Buzz[5]Fizz[4647]Fizz[48]FizzBuzz[495]FizzBuzz[0]Buzz[5]FizzBuzz[15]
Buzz[25]Fizz[3]Buzz[5]FizzBuzz[45]Buzz[5]Buzz[5]Fizz[6]Buzz[5]FizzBuzz[75]Buzz[85]
Fizz[9]Fizz[6]FizzBuzz[0]Fizz[6]Fizz[162]Fizz[6]Fizz[3]Fizz[6]FizzBuzz[465]Fizz[6]
Fizz[6]Fizz[6]Fizz[768]Fizz[6]Fizz[9]Buzz[70]Fizz[717]Fizz[27]Fizz[3]Fizz[747]Buzz[5]
Fizz[7677]Fizz[78]Fizz[798]FizzBuzz[0]Fizz[81]Fizz[828]Fizz[3]Fizz[84]Buzz[85]
Fizz[868788]Buzz[8990]Fizz[9]Fizz[192]Fizz[9]Fizz[3]Fizz[9]FizzBuzz[495]Fizz[9]
Fizz[6]Fizz[9]Fizz[798]Fizz[9]Fizz[9]Buzz[10]FizzBuzz[0]

67 名前:仕様書無しさん mailto:sage [2007/05/10(木) 03:31:44 ]
#include "stdafx.h"

#define FIZZ 0x01
#define BUZZ 0x02

char digits[2*100]; // まあなんと大雑把な

void generateDigits(char *p) {
  for (int i=1; i<=100; i++) {
    p += sprintf(p, "%d", i);
  }
  *p = '\0';
  //puts(digits);
}


68 名前:仕様書無しさん mailto:sage [2007/05/10(木) 03:33:16 ]
void evaluateFizzBuzz(char* p) {
  char* pivot = p; // 評価する数値の先頭の数字
  int digitSum = 0;
  unsigned int flag;
  while (*p) {
    flag = 0;
    digitSum += *p - '0';
    if (digitSum %3 == 0) { // 各桁の話が3の倍数ならば3の倍数
      flag |= FIZZ;
    }
    if (*p == '0' || *p == '5') { // 1の位が0か5なら5の倍数
      flag |= BUZZ;
    }
    if (flag) {
      if (flag & FIZZ) printf("Fizz");
      if (flag & BUZZ) printf("Buzz");
      printf("[");
      for (char *v = pivot; v <= p; ++v) {
       printf("%c", *v);
      }
      printf("]");
      digitSum = 0;
      pivot = p+1;
    }
    ++p;
  }
}
int _tmain(int argc, _TCHAR* argv[]) {
  generateDigits(digits);
  evaluateFizzBuzz(digits);
  return 0;
}

69 名前:仕様書無しさん mailto:sage [2007/05/10(木) 06:12:44 ]
>>66よ大丈夫か?

1234567891011121314......9899100は既に巨大な5の倍数だが?
3の倍数かどうかは知らん

70 名前:66 mailto:sage [2007/05/10(木) 08:03:04 ]
>>69
仕様に書かなかったが「最短一致」の繰り返しってことで。



71 名前:仕様書無しさん mailto:sage [2007/05/10(木) 09:20:55 ]
数が四つ以上連なる3の倍数は無い

72 名前:36 mailto:sage [2007/05/10(木) 11:09:53 ]
今朝9時頃、道歩いてて唐突にバグに思い当たった。書く前に試せよ>俺。

for (int i=1; i<=100; ++i)
  printf(&(const char* []){"%d\n", "Fizz\n", "Buzz\n", "FizzBuzz\n"}[(i%3>0) + (i%5>0) * 2], i);

73 名前:仕様書無しさん mailto:sage [2007/05/10(木) 11:48:52 ]
>>72
これはちゃんと試されたんですか?

74 名前:36 mailto:sage [2007/05/10(木) 12:40:09 ]
つTдT)…

// C89 ver.
 static const char* tb[] = {"%d\n", "Fizz\n", "Buzz\n", "FizzBuzz\n"};
 int i;
 for (i=1; i<=100; ++i)
  printf(tb[(i%3==0) + (i%5==0) * 2], i);

75 名前:仕様書無しさん [2007/05/10(木) 15:30:48 ]
>>74
Cの言語仕様として、偽は0だが真は非0に過ぎん。
計算に使っちゃダメだろ。


76 名前:仕様書無しさん mailto:sage [2007/05/10(木) 15:38:02 ]
>>75 意味不明

77 名前:仕様書無しさん [2007/05/10(木) 15:38:36 ]
あ、論理式を計算してるのかスマンw

78 名前:仕様書無しさん mailto:sage [2007/05/11(金) 00:30:53 ]
for(i=1;i<100;i++){
  int f=1;
  if ( ( i %  3 ) == 0 ) { printf( "Fizz\n" ); f=0; }
  if ( ( i %  5 ) == 0 ) { printf( "Buzz\n" ); f=0; }
  if ( f ) printf( "%d\n", i );
}
これが一番わかりやすいかな・・・・・
switch〜caseで書いたら読みにくかった


79 名前:仕様書無しさん mailto:sage [2007/05/11(金) 00:54:22 ]
>>78
それじゃ

Fizz
Buzz

がFizzとBuzzなのかFizzBuzzなのか判別できないよ

80 名前:仕様書無しさん mailto:sage [2007/05/11(金) 00:57:20 ]
/* 力技 */
#include <stdio.h>

#define MAX (100)

int main() {
  static char NUMBER[] = "%d\n";
  static char FIZZ[] = "Fizz\n";
  static char BUZZ[] = "Buzz\n";
  static char FIZZ_BUZZ[] = "FizzBuzz\n";

  char *fmt[MAX + 1];
  int i;

  for (i = 1; i <= MAX; i++)
    fmt[i] = NUMBER;

  for (i = 3; i <= MAX; i += 3)
    fmt[i] = FIZZ;

  for (i = 5; i <= MAX; i += 5)
    fmt[i] = BUZZ;

  for (i = 15; i <= MAX; i += 15)
    fmt[i] = FIZZ_BUZZ;

  for (i = 1; i <= MAX; i++)
    printf(fmt[i], i);

  return 0;
}



81 名前:仕様書無しさん mailto:sage [2007/05/11(金) 01:06:22 ]
>80
おまえ頭いいなw

82 名前:仕様書無しさん mailto:sage [2007/05/11(金) 01:11:01 ]
↓キレイ派、最適化&速度派

83 名前:仕様書無しさん mailto:sage [2007/05/11(金) 04:15:22 ]
printf("012Fizz4BuzzFizz78FizzBuzz11Fizz ....");

84 名前:仕様書無しさん mailto:sage [2007/05/11(金) 06:45:40 ]
しかし、ここまでで最小公倍数15を明示的に使ったのは>80だけとは、、。

85 名前:仕様書無しさん mailto:sage [2007/05/11(金) 09:38:42 ]
%は遅いからなるべく論理演算で判定したほうが速いだろ。
80には関係ないが。

86 名前:仕様書無しさん [2007/05/11(金) 10:02:05 ]
%は遅いからだってぉwwwwww

87 名前:仕様書無しさん [2007/05/11(金) 10:07:06 ]
これをいかに難しく、無駄を増やして書けるかを競うべきだ。

88 名前:仕様書無しさん [2007/05/11(金) 10:23:48 ]
>>78
おしいな。

for(i=1;i<100;i++){
int f=1;
if ( ( i % 3 ) == 0 ) { printf( "Fizz" ); f=0; }
if ( ( i % 5 ) == 0 ) { printf( "Buzz" ); f=0; }
if ( f ) printf( "%d\n", i );
else putchar('\n');
}

>>78がやりたかったのはこんな感じかな。漏れ的にもこんなコードが
一番好きだな。

89 名前:仕様書無しさん mailto:sage [2007/05/11(金) 10:33:53 ]
ブログとかでもしきりにこのコードの話が盛り上がっているのを見ると、皆さん内心は不安なんだろうなと感じてしまFizzます。

90 名前:仕様書無しさん mailto:sage [2007/05/11(金) 11:06:54 ]
エディタもデバッガも使わず、いきなり紙にミスなく書き出せといわれたら無難にこう書くな。
"FizzBuzz"が"Fizz"+"Buzz"であることを利用するクレバーな処理は避け
仕様通り4通りの場合わけをきっちり書き、
"Fizz"が5(Five)ではなく3の倍数というのはバグを誘発しそうなので
コード中に撒き散らさずに先頭で判定して変数にぶち込む。

#include <stdio.h>

int main()
{
    int i;
    for(i=0; i<100; i++)
    {
        int fizz = (i % 3 == 0);
        int buzz = (i % 5 == 0);
       
        if(fizz) {
            if(buzz)
                puts("FizzBuzz");
            else
                puts("Fizz");
        } else {
            if(buzz)
                puts("Buzz");
            else
                printf("%d\n", i);
        }
    }
    return 0;
}




91 名前:仕様書無しさん mailto:sage [2007/05/11(金) 12:20:12 ]
紙?
いったい何時の時代の話なんだ。

92 名前:文系学生 mailto:sage [2007/05/11(金) 12:22:34 ]
こうですか?わかりません><


#include<stdio.h>


int main(void){

int i;

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

}
}


というか、みなさんfor(i=1;i<100;i++)でやってますけど、それだと実行したらFizz(99)までしか表示されなくないですか?

93 名前:仕様書無しさん mailto:sage [2007/05/11(金) 12:26:05 ]
>>92
試験もしない似非PGが書いているからだ。

94 名前:仕様書無しさん mailto:sage [2007/05/11(金) 13:54:42 ]
面白い書き方するなぁ。
1〜100迄というのを明示したい時は、俺は普通に for(i = 1; i <= 100 と書くけどな。


95 名前:仕様書無しさん mailto:sage [2007/05/11(金) 14:19:53 ]
101とは書かないよなぁ

96 名前:文系学生 mailto:sage [2007/05/11(金) 14:26:13 ]
>94
たしかに、どう考えてもそっちのほうがわかりやすいですね。

俺センスなさすぎwwwww

97 名前:仕様書無しさん mailto:sage [2007/05/11(金) 15:58:24 ]
なんか上のほうのレス見てたらFizzBuzz問題は200人に1人しか
出来ないってのが本当な気がしてきたよ。
細かいところで未熟な部分はあるけど文系君のコードが一番素直で
良く書けてる気がするのは気のせい?プログラミングってやっぱ才能なのかな。

98 名前:仕様書無しさん mailto:sage [2007/05/11(金) 17:33:43 ]
>紙?
>いったい何時の時代の話なんだ。
そのうち100人くらいは問題すら読めていなさそうだなw

99 名前:仕様書無しさん mailto:sage [2007/05/11(金) 19:51:13 ]
>>89
ワンライナーは凄いな

100 名前:仕様書無しさん [2007/05/11(金) 19:54:53 ]
import System;
for (var n : int = 1; n <= 100; n++)
    Console.WriteLine(String.Format("{{{0}}}", (n % 3 ? 0 : 1) | (n % 5 ? 0 : 2)), n, "Fizz", "Buzz", "FizzBuzz");



101 名前:仕様書無しさん mailto:sage [2007/05/11(金) 20:18:10 ]
>>92
みなさんって言うから俺もまちがってるのかって思ったけど、まちがえてるの>>88>>78だけじゃん。
>>88はコピペして間違えたんだろ?

102 名前:仕様書無しさん mailto:sage [2007/05/11(金) 23:04:12 ]
#include <stdio.h>

int main() {
 for (int i = 1; i <= 100; i++)
  printf("%s¥n", (i % 15 == 0? "FizzBuzz": (i % 3 == 0? "Fizz": (i % 5 == 0? "Buzz"))));
 return 0;
}

これでいいですか?

103 名前:仕様書無しさん mailto:sage [2007/05/11(金) 23:06:25 ]
>>102
>>97-98

104 名前:仕様書無しさん mailto:sage [2007/05/11(金) 23:11:50 ]
ゴメwまじで読んでなかったww

105 名前:仕様書無しさん mailto:sage [2007/05/11(金) 23:13:08 ]
なんかこのスレを見ていると、Fizz-Buzz問題の本当の意味は

「彼らはまったくちっぽけなコードでさえ、
実際に動かして確認することをしない」

という事にあるような気がしてきた・・・


106 名前:仕様書無しさん mailto:sage [2007/05/11(金) 23:13:33 ]
こういうミスってプログラムを実際に走らせれば一瞬で気づくよな。
>>1がテストを許さず紙に一発書きを要求してるのは何故だ?

107 名前:仕様書無しさん mailto:sage [2007/05/11(金) 23:18:06 ]
1から100までの十進整数を順に1行ずつ出力するプログラムを書け。
ただし、整数が「7」という数字を含む場合は、
整数のかわりに "CRAP!" と表示すること。

108 名前:仕様書無しさん mailto:sage [2007/05/11(金) 23:20:26 ]
Joel On Softwareって本でも、面接のときに簡単なコードを書かせてみるって話が載ってるけど、
この本では、紙にコードを書くのは難しいから、ロジックがかけてれば多少のバグはあっていいと
伝えてPGを安心させるとか書いてあるよ。

109 名前:仕様書無しさん mailto:sage [2007/05/11(金) 23:22:23 ]
>>106
Hじゃまず紙上デバッグしますよ

110 名前:仕様書無しさん mailto:sage [2007/05/11(金) 23:23:11 ]
この程度の問題でいちいちバグ出す奴はリアルバカ。
こういう奴に限ってインデックスの境界周りなんかでバグ出しまくる。
UnitTestが流行っていることもあってかコード書いた直後の
読み返し&脳内デバッガによるチェックが杜撰になってきている傾向があるな。



111 名前:仕様書無しさん mailto:sage [2007/05/11(金) 23:23:59 ]
と、普段テストなんかいらないと思っているバグ量産機さまがおっしゃっています

112 名前:仕様書無しさん mailto:sage [2007/05/11(金) 23:27:06 ]
↑リア厨レベルの論理記号も理解していないバカ

113 名前:仕様書無しさん mailto:sage [2007/05/11(金) 23:27:36 ]
>>110
>UnitTestが流行っていることもあってか

あのねぇ、
それは「流行っている」じゃなくて
「有効性が認識されるようになった」だけだよ。


114 名前:仕様書無しさん mailto:sage [2007/05/11(金) 23:27:57 ]
走らせれば1秒で正誤がわかるのに
わざわざ脳内デバッグで労力を使うのか・・・。

115 名前:仕様書無しさん mailto:sage [2007/05/11(金) 23:31:04 ]
>>110
何度も読み返して脳内デバッガで確認した後でさらに実際にテストするの?
そんな労力を「この程度の問題」に費やして誰が得するの?
それとも確認はもう十分だから実際のテストはしないの?

116 名前:仕様書無しさん mailto:sage [2007/05/11(金) 23:37:56 ]
読み返し/紙上デバッグ/机上デバッグ?
それはまたいつの時代の話なのか
バグの存在は試験でしか証明できないのだ

117 名前:仕様書無しさん mailto:sage [2007/05/11(金) 23:39:54 ]
一般に UnitTest を否定する奴って
まともに UnitTest が出来ない
長大な関数を書く傾向があると思う。


118 名前:仕様書無しさん mailto:sage [2007/05/11(金) 23:43:01 ]
このスレのどこかのレスからUnitTestが批判されていると
読み取った奴は国語力に相当問題があるよw

119 名前:仕様書無しさん mailto:sage [2007/05/11(金) 23:43:03 ]
>>110の人気に嫉妬

120 名前:仕様書無しさん [2007/05/11(金) 23:49:11 ]
#include <stdio.h>

int main()
{
    int i;
    for (i = 1; i <= 100; i++) {
        int p3 = i % 3 == 0;
        int p5 = i % 5 == 0;
        printf("%.0d%.*s%.*s\n", (p3 || p5) ? 0 : i, 4 * p3, "Fizz", 4 * p5, "Buzz");
    }
    return 0;
}



121 名前:仕様書無しさん mailto:sage [2007/05/11(金) 23:59:47 ]
つらつら思うに。
こんなに何種類も回答が出てるのにさらにコードを貼る奴ってどんなレスが欲しいんだろう。
ほめて貰いたいのか?

122 名前:仕様書無しさん mailto:sage [2007/05/12(土) 00:00:12 ]
すなおに15使えばいいのにと思う

#include <stdio.h>

int main(){
int i;
for(i=1;i<=100;i++)
 printf((i%15==0)?"FizzBuzz¥n":(i%3==0)?"Fizz¥n":(i%5==0)?"Buzz¥n":"%d¥n",i);
}


123 名前:仕様書無しさん mailto:sage [2007/05/12(土) 00:06:13 ]
それが素直に見える人もいるのか

124 名前:仕様書無しさん mailto:sage [2007/05/12(土) 00:10:59 ]


125 名前:仕様書無しさん mailto:sage [2007/05/12(土) 00:31:38 ]
BEGIN {
    for (i = 1; i <= 100; i++)
        print i ~ /7/ ? "CRAP!" : i
}

126 名前:仕様書無しさん mailto:sage [2007/05/12(土) 00:31:43 ]
>>107
ひまなのでついでにやってみた

#include <stdio.h>

int main(){
int i;
for(i=1;i<=100;i++)
 printf((i%10==7||i/10==7)?"CRAP!¥n":"%d¥n",i);
}


127 名前:仕様書無しさん mailto:sage [2007/05/12(土) 01:01:15 ]
>>107
15分かかった

#include<stdio.h>

int main(){
int i;
for(i=1;i<=100;1++){
if(i%10==7){
printf("CRAP!\n");
}
else if(i>=70&&i<80){
printf("CRAP!\n");
}
else{
printf("%d\n",i);
}
}
}


128 名前:仕様書無しさん mailto:sage [2007/05/12(土) 01:10:39 ]
#include <stdio.h>
#include <string.h>

int main()
{
    int i;
    char s[4];
    for (i = 1; i <= 100; i++) {
        sprintf(s, "%d", i);
        printf("%s\n", strchr(s, '7') == NULL ? s : "CRAP!");
    }
    return 0;
}

129 名前:80 mailto:sage [2007/05/12(土) 01:24:20 ]
>>107
/* 力技 */
(ry

130 名前:仕様書無しさん mailto:sage [2007/05/12(土) 03:00:04 ]
70代がカオスw



131 名前:仕様書無しさん mailto:sage [2007/05/12(土) 10:50:17 ]
流れを読まずに、ペタ。

class FizzBuzz {
public static void main(String[] args) {
String disp;
for(int i=1;i<101;i++) {
disp = String.valueOf(i);
if(i%3==0){
disp = "Fizz";
}else if(i%5==0){
disp = "Buzz";
}
if(i%3==0 && i%5==0){
disp = "FizzBuzz";
}
System.out.println(disp);
}

}

}

132 名前:仕様書無しさん mailto:sage [2007/05/12(土) 13:07:08 ]
美しすぎる・・・
program fizzbuzz;
var i: integer;
begin
    for i := 1 to 100 do
        case i mod 15 of
            0: writeln('FizzBuzz');
            3,9,12: writeln('Fizz');
            5,10: writeln('Buzz');
            else writeln(i);
        end;
end.



133 名前:仕様書無しさん mailto:sage [2007/05/12(土) 13:54:04 ]
1÷15

134 名前:仕様書無しさん mailto:sage [2007/05/12(土) 14:22:52 ]
15使うとかっこいいのはわかるけど、
あとで条件が変わって3と4になった場合に、修正箇所としてわかりにくい。
どうしても15を使いたいなら、3と5から公倍数を求めるプログラムも書いておくべきだろう。

1年後に他人が見て修正が容易なように書いておくのが玄人と素人の違いではないかと。


135 名前:仕様書無しさん mailto:sage [2007/05/12(土) 16:38:45 ]
一年後にFizzBuzzの仕様変更によるメンテってどんな罰ゲームだよw

136 名前:仕様書無しさん mailto:sage [2007/05/13(日) 06:49:12 ]
初心を思い出させるのに絶好の機会だと思うが。

137 名前:仕様書無しさん mailto:sage [2007/05/13(日) 07:17:06 ]
いつの間にかプログラムを紙に書く前提になっているんだが、読解力不足。

FizzBuzzの問題では「プログラムを書け(Write a program)」としか言ってない。
それに対して著者が「優秀なプログラマならば紙に完全に書けるだろう(Most good programmers should be able to write out on paper)」と言っている。

138 名前:仕様書無しさん mailto:sage [2007/05/13(日) 10:00:39 ]
改行を出力しろとは書いていない。だからすべてつなげて表示すべき。
とか言ってるアホと同レベルだなw

139 名前:仕様書無しさん mailto:sage [2007/05/13(日) 10:04:16 ]
なんにも考えないで作った。所要時間は3分ぐらいか。

for x in range(1,101):
if x%3==0 and x%5!=0:
print "Fizz"
elif x%3!=0 and x%5==0:
print "Buzz"
elif x%3==0 and x%5==0:
print "FizzBuzz"
else:
print x

140 名前:仕様書無しさん mailto:sage [2007/05/13(日) 10:18:56 ]
脳内ルール全快のスレはここですか?



141 名前:仕様書無しさん mailto:sage [2007/05/13(日) 11:40:59 ]
>140
×脳内ルール
△脳内仕様
○脳内言語

142 名前:仕様書無しさん mailto:sage [2007/05/13(日) 15:48:15 ]
まぁここで必死こいてコード見せてる奴は別だろうけど、
実際いるからな、アルゴリズムというか、処理の組み立てができない奴が。

今は派遣なんかでそういうのが入ってきて、しょうがないから細かく指示して
書かせるんだけど、いちおう「経験者」扱いで入ってきてるんだよな。
自分ではコード書けないくせに、「○○の開発を経験」という実績だけは
積んでいくんだよ。

143 名前:仕様書無しさん mailto:sage [2007/05/13(日) 23:22:02 ]
何かFizzBuzzに続く「プログラミング噛ってりゃ出来て当然」レベルの問題を出題しる

144 名前:仕様書無しさん mailto:sage [2007/05/13(日) 23:26:25 ]
1から100までの素数をプリントするプログラムを書け。ただし3の倍数のときは数の代わりに「Fizz」と、5の倍数のときは
「Buzz」とプリントし、3と5両方の倍数の場合には「FizzBuzz」とプリントすること。

145 名前:仕様書無しさん [2007/05/13(日) 23:39:25 ]
>>143
Joel On Software の著者が面接の時に出す問題の例

・文字列をその場で逆にする
・連結リストを逆にする
・バイトデータの中で立っているビットを数える
・二分検索
・文字列の中で同じ文字が一番長く続くところを見つける
・atoi
・itoa


146 名前:仕様書無しさん mailto:sage [2007/05/14(月) 00:09:51 ]
ハノイの塔をマウス1クリック1ステップで解答の紙芝居を連続表示せよ

147 名前:仕様書無しさん mailto:sage [2007/05/14(月) 00:26:39 ]
>144
ネタじゃなかったら中学校の数学からやり直せ
……と言いたくなったが、つまり「そういうの」を引っかけるための問題か。

148 名前:仕様書無しさん [2007/05/14(月) 15:55:55 ]
>>144
高度なギャグか?w

149 名前:仕様書無しさん mailto:sage [2007/05/14(月) 15:57:57 ]
>>147-148
政治的なジレンマを疑似体験するための問題

150 名前:仕様書無しさん mailto:sage [2007/05/14(月) 16:00:27 ]
仕様バグを未然に防ぐスキルを確認する試験だな

対コボラスキルを確認する試験とかあると便利かもな



151 名前:仕様書無しさん mailto:sage [2007/05/14(月) 16:02:21 ]
二つの矩形が重なり合っているかどうかを判定する関数を書け、
ただし思考の過程をホワイトボードを使って説明しながら。

MSにはこんな試験があるらしい。

152 名前:仕様書無しさん mailto:sage [2007/05/14(月) 16:08:03 ]
>>150
>仕様バグを未然に防ぐスキルを確認する試験だな

回答時間中は質問を一切認めず、
そして回答が終われば仕様どおりに実装しろと時間延長でやり直しをさせ、
やり直してる途中で仕様変更が伝えられ、結局最初のものを提出とする。

という精神耐久力テスト

153 名前:仕様書無しさん mailto:sage [2007/05/14(月) 16:18:12 ]
>>152
合格したくねえええええ

154 名前:仕様書無しさん mailto:sage [2007/05/14(月) 16:47:04 ]
>>151
二つの円ならすぐに出来るんだが・・・

155 名前:仕様書無しさん mailto:sage [2007/05/14(月) 21:02:11 ]
// >>151
// こんな感じ?
struct RECT {
int left;
int right;
int top;
int bottom;
};
BOOL overlap_rects(RECT rect1, RECT rect2) {
RECT lrect, rrect, trect, brect;
if(rect1.left < rect2.left) {
lrect = rect1; rrect = rect2;
} else {
lrect = rect2; rrect = rect1;
}
if(rect1.top < rect2.top ) {
trect = rect1; brect = rect2;
} else {
trect = rect2; brect = rect1;
}
return(lrect.right < rrect.left && trect.bottom < brect.top);
}

156 名前:仕様書無しさん mailto:sage [2007/05/14(月) 21:20:30 ]
aaa
  aaa test

157 名前:仕様書無しさん mailto:sage [2007/05/14(月) 21:21:24 ]
>>155
こんな感じの矩形はどうするの?

/\
\  \
  \/



158 名前:仕様書無しさん mailto:sage [2007/05/14(月) 21:22:34 ]
これじゃ抜けがあるかな?

bool Overlapped(RECT r1, RECT r2)
{
    if (r1.left > r2.right)
        return false;
    if (r1.right < r2.left)
        return false;
    if (r1.top > r2.bottom)
        return false;
    if (r1.bottom < r2.top)
        return false;
    return true;
}


159 名前:仕様書無しさん mailto:sage [2007/05/14(月) 21:35:58 ]
>>145
まだスマートに書けそうだけど、一応itoa()。

char* reverse(char* s, int len)
{
       int n = len / 2;
       int i;

       for (i = 0; i < n; i++) {
               char ch = s[i];
               s[i] = s[len - i - 1];
               s[len - i - 1] = ch
       }
       return s;
}

つづく

160 名前:仕様書無しさん mailto:sage [2007/05/14(月) 21:37:47 ]
>>159 の続き

char* itoa(int n, char* res)
{
       int i;
       int minus = 0;

       if (n < 0) {
               n = -n;
               minus = 1;
       }
       i = 0;
       while (n) {
               res[i++] = n % 10 + '0';
               n /= 10;
       }

       if (minus) {
               res[i++] = '-';
       }
       res[i] = '\0';

       return reverse(res, i);
}




161 名前:仕様書無しさん mailto:sage [2007/05/14(月) 21:38:44 ]
>>159
>まだスマートに書けそうだけど、一応itoa()。 
>
>char* reverse(char* s, int len) 

0点


162 名前:仕様書無しさん mailto:sage [2007/05/14(月) 21:50:41 ]
>>159は黒のボールペンを赤といって売りつけるタイプ。

163 名前:仕様書無しさん mailto:sage [2007/05/15(火) 00:10:31 ]
>>145
// 文字列をその場で逆にする
// …「その場で」を勘違いしてたらスマヌ。
char *reverse(char *buffer)
{
  char *src = buffer, *dst;
  if (buffer == NULL)
    return buffer;
  for (dst=src+strlen(src)-1; src<dst; ++src, --dst) {
    char t = *src;
    *src = *dst;
    *dst = t;
  }
  return buffer;
}

164 名前:仕様書無しさん mailto:sage [2007/05/15(火) 01:39:40 ]
>>145
>・二分検索
は、最初にアルゴリズムが発表されてから、正確な実装が発表されるまで
15年くらいかかったとかペントリーの本に書いてあったぞ。
まるでこのスレのようだ。

165 名前:164 mailto:sage [2007/05/15(火) 01:41:05 ]
>>164
s/ペントリー/ベントリー/
ローマ字打ちなのにこの手のミスが多い。昔カナで打ってたせいかな

166 名前:仕様書無しさん mailto:sage [2007/05/15(火) 02:35:35 ]
>>145
>・連結リストを逆にする

単方向でいいよな。 item は next が次の奴を指してる、良くあるパターンってことで。
item* reverseList(item* p) {
  item* prev = NULL;
  while (p) {
    item* next = p->next; // 上書きする前に取っとく
    p->next = prev; // 前の奴を指す
    prev = p; // 自分が前の奴になる
    p = next; // 次の方どうぞ
  }
  return prev; // 新しい先頭
}

167 名前:155 mailto:sage [2007/05/15(火) 04:52:46 ]
>158
そうか、それだけで判定できるのか…俺もまだまだだなorz

168 名前:仕様書無しさん mailto:sage [2007/05/15(火) 10:46:38 ]
seq 100 | perl -ple '$_=(Fizz)[$_%3].(Buzz)[$_%5]||$_'

169 名前:仕様書無しさん mailto:sage [2007/05/15(火) 17:56:58 ]
矩形って・・・長方形って書けばいいのに(絶句)これだから頭でっかちは困る
ついでに言うとひし形みたいな場合は判定できるのか?普通はPointx4の判定だろ・・・

170 名前:仕様書無しさん mailto:sage [2007/05/15(火) 18:23:59 ]
この業界で"矩形領域"を"長方形領域"なんて言ったらいい笑い者だと思うが。



171 名前:仕様書無しさん mailto:sage [2007/05/15(火) 18:32:11 ]
長方形領域でぐぐったらいっちゃん上にCiNiiがきたんだが、、、
九州大学大学院とおまいらと、さて世間はどっちを信じるだろうね。

172 名前:仕様書無しさん mailto:sage [2007/05/15(火) 18:36:08 ]
超包茎ってw

173 名前:仕様書無しさん mailto:sage [2007/05/15(火) 18:36:39 ]
>>170
ja.wikipedia.org/wiki/%E5%9B%9B%E8%A7%92%E5%BD%A2
> 長方形(矩形、rectangle): 4 角の大きさが全て 90°(π/2、直角)である四角形。

四角形っていえばよかったのか?

174 名前:仕様書無しさん mailto:sage [2007/05/15(火) 18:37:17 ]
>>171
>>170 の最初の5文字は見えないふり?

175 名前:仕様書無しさん mailto:sage [2007/05/15(火) 18:39:39 ]
あれだな・・・幼稚園児、小学生は覚えた言葉使いたくて使いたくてしょうがないもんな…

176 名前:仕様書無しさん mailto:sage [2007/05/15(火) 18:40:55 ]
          ____
       / \  /\  キリッ
.     / (ー)  (ー)\
    /   ⌒(__人__)⌒ \  矩形領域!
    |      |r┬-|    |
     \     `ー'´   /
    ノ            \
  /´               ヽ
 |    l              \
 ヽ    -一''''''"~~``'ー--、   -一'''''''ー-、.
  ヽ ____(⌒)(⌒)⌒) )  (⌒_(⌒)⌒)⌒))


          ____
        /_ノ  ヽ、_\
 ミ ミ ミ  o゚((●)) ((●))゚o      ミ ミ ミ
/⌒)⌒)⌒. ::::::⌒(__人__)⌒:::\   /⌒)⌒)⌒)  長方形領域だっておwwww
| / / /     |r┬-|    | (⌒)/ / / //
| :::::::::::(⌒)    | |  |   /  ゝ  :::::::::::/
|     ノ     | |  |   \  /  )  /
ヽ    /     `ー'´      ヽ /    /
 |    |   l||l 从人 l||l      l||l 从人 l||l
 ヽ    -一''''''"~~``'ー--、   -一'''''''ー-、
  ヽ ____(⌒)(⌒)⌒) )  (⌒_(⌒)⌒)⌒))

177 名前:仕様書無しさん mailto:sage [2007/05/15(火) 18:43:20 ]
悲哀が漂う。
ま、楽しくやってそうだからいいけど。

178 名前:仕様書無しさん mailto:sage [2007/05/15(火) 18:44:05 ]
>>171
ググるんだったら両方の単語でやらなきゃ。

"長方形領域" に一致する日本語のページ 約 9,430 件中 1 - 10 件目 (0.19 秒)
"矩形領域" に一致する日本語のページ 約 36,200 件中 1 - 10 件目 (0.09 秒)


179 名前:仕様書無しさん mailto:sage [2007/05/15(火) 18:49:43 ]
まあどちらもRectangleなんですけどね

180 名前:仕様書無しさん mailto:sage [2007/05/15(火) 18:55:05 ]
>>178
以外や以外、なかなか健闘してるじゃん、”長方形領域”。
あまりメジャーな言葉ではないが、あと半世紀もすれば勢力逆転も夢じゃないな。
本当は”矩形領域”なんだ・・・と一人でぶつぶつ言ってりゃいいさ。



181 名前:仕様書無しさん mailto:sage [2007/05/15(火) 19:04:24 ]
そして、>>171は「本当は"長方形領域"なんだ…」と、0.26人でぶつぶつ言うわけだ。


182 名前:仕様書無しさん mailto:sage [2007/05/15(火) 19:07:38 ]
領域いらないだろ・・・

矩形 に一致する日本語のページ 約 679,000 件中 1 - 10 件目 (0.03 秒)
長方形 に一致する日本語のページ 約 1,640,000 件中 1 - 10 件目 (0.03 秒)

183 名前:仕様書無しさん mailto:sage [2007/05/15(火) 19:16:54 ]
>>170の、"この業界で"という条件に近づけるために"領域"という単語を付加してるのがわからんの?

単純な"長方形"って単語だったら小学生の算数のページだってヒットしちゃうじゃん。


184 名前:仕様書無しさん mailto:sage [2007/05/15(火) 19:35:46 ]
ながしかく領域

185 名前:仕様書無しさん mailto:sage [2007/05/15(火) 19:36:27 ]
四直角形

186 名前:仕様書無しさん mailto:sage [2007/05/15(火) 19:38:23 ]
九十度四個系

187 名前:仕様書無しさん mailto:sage [2007/05/15(火) 19:39:53 ]
まさに仕事の遂行ができない不採用の人

188 名前:仕様書無しさん mailto:sage [2007/05/15(火) 19:48:08 ]
不採用形

189 名前:仕様書無しさん mailto:sage [2007/05/15(火) 19:57:56 ]
終了形

190 名前:仕様書無しさん mailto:sage [2007/05/15(火) 20:43:00 ]
>>182
矩形だの長方形だのなんて用語よりも
"RECT" のほうがずっと一般的だよ。
www.google.co.jp/search?hl=ja&q=RECT&lr=



191 名前:仕様書無しさん mailto:sage [2007/05/15(火) 20:51:00 ]
数の暴力に屈するわけにはいかないのです。

192 名前:仕様書無しさん mailto:sage [2007/05/15(火) 20:55:20 ]
なぜデータ構造ではなく問題での呼び方で盛り上がるんだw

193 名前:仕様書無しさん mailto:sage [2007/05/15(火) 21:06:46 ]
コナミの矩形波クラブって知ってる?

194 名前:仕様書無しさん mailto:sage [2007/05/15(火) 23:33:06 ]
>>1
ここの563は既出?
ttp://pc11.2ch.net/test/read.cgi/tech/1176059681/

195 名前:仕様書無しさん mailto:sage [2007/05/16(水) 11:45:45 ]
>>193
ああ、あれよかったよね。
ときどき今田と東野のキンタマが見え隠れするのが。

196 名前:仕様書無しさん [2007/05/17(木) 03:06:55 ]
高卒でプログラミング経験1年の俺ですら、4分でできた

class FizzBuzz {
  public static void main(String[] args) {
    for (int i = 1; i <= 100; i++) {
      if ((i % 15) == 0) {
        System.out.println("FizzBuzz");
      } else if ((i % 3) == 0) {
        System.out.println("Fizz");
      } else if((i % 5) == 0) {
        System.out.println("Buzz");
      } else {
        System.out.println(i);
      }
    }
  }
}
 

197 名前:仕様書無しさん mailto:sage [2007/05/17(木) 04:19:47 ]
100はいらないのか、そうなのか

198 名前:仕様書無しさん mailto:sage [2007/05/17(木) 06:22:07 ]
>>196
仕様には3と5の倍数と書いてあって、
15の倍数とは書いてないぞ!

それに評価の順があっていない!
3の倍数、5の倍数、3と5の倍数、の順だ!

とっとと我々の仕様どおり実装し直したまえ!
君のかわりなんていくらでもいるんだからな!


※これはイメージです

199 名前:仕様書無しさん mailto:sage [2007/05/17(木) 10:49:37 ]
ループカウンタi やめれ

200 名前:仕様書無しさん mailto:sage [2007/05/17(木) 11:24:29 ]
j



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

202 名前:仕様書無しさん mailto:sage [2007/05/17(木) 14:26:49 ]
ループカウンタiって駄目なの?

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

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


205 名前:仕様書無しさん mailto:sage [2007/05/17(木) 17:08:10 ]
すごい!これならiの代わりにぴったりだね!


206 名前:仕様書無しさん mailto:sage [2007/05/17(木) 17:08:14 ]
iがだめならj,k,l,n,mと使った火にゃあ

207 名前:仕様書無しさん mailto:sage [2007/05/17(木) 17:36:07 ]
i2,i3,i4
ii,iii,iiii

208 名前:仕様書無しさん mailto:sage [2007/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 名前:仕様書無しさん mailto:sage [2007/05/17(木) 17:48:52 ]
>>208
それ、面白いつもりで書いてるの?
それだけがちょっと知りたい。

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



211 名前:仕様書無しさん mailto:sage [2007/05/17(木) 18:04:41 ]
>>210 はああ???

212 名前:仕様書無しさん mailto:sage [2007/05/17(木) 18:05:24 ]
関数オブジェクト?

213 名前:仕様書無しさん mailto:sage [2007/05/17(木) 20:09:00 ]
クロージャ

214 名前:仕様書無しさん mailto:sage [2007/05/17(木) 20:38:06 ]
ここに俺の亀頭落ちてなかった?
参ったな・・・昨日買い換えたばっかりなのに・・・・

215 名前:仕様書無しさん mailto:sage [2007/05/17(木) 20:40:31 ]
ミニサイズのやつだろ?
さっきぬこが咥えて持ってったけど?

216 名前:仕様書無しさん mailto:sage [2007/05/17(木) 23:42:26 ]
わらかすなぁ

217 名前:仕様書無しさん mailto:sage [2007/05/18(金) 00:42:58 ]
>>197
なに、このバカ
>>199
なに、このアホ

218 名前:仕様書無しさん mailto:sage [2007/05/18(金) 18:12:06 ]
他スレでもFizzBuzzやってるとこあるけど
LispとPythonの例は少し趣向が違うねぇ

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

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

220 名前:仕様書無しさん mailto:sage [2007/05/18(金) 23:44:09 ]
>現在の最短コード
これどんなコード?



221 名前:仕様書無しさん mailto:sage [2007/05/19(土) 00:16:26 ]
ttp://golf.shinh.org/p.rb?FizzBuzz

222 名前:仕様書無しさん mailto:sage [2007/05/19(土) 00:29:51 ]
そのURLのどこにコードがあるんじゃい

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

224 名前:仕様書無しさん mailto:sage [2007/05/19(土) 08:58:58 ]
あったー
ttp://jarp.does.notwork.org/diary/200705a.html#200705092

225 名前:仕様書無しさん mailto:sage [2007/05/19(土) 08:59:49 ]
無駄時間取り戻しポンプが切実に欲しい今日この頃

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

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

228 名前:仕様書無しさん mailto:sage [2007/05/20(日) 16:12:36 ]
そんなのアルゴリズムを知ってるかどうかじゃん
センスは関係なくねーか

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

230 名前:仕様書無しさん mailto:sage [2007/05/20(日) 16:23:34 ]
氏ねばいいとおもうよ(AA略



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

232 名前:仕様書無しさん mailto:sage [2007/05/20(日) 16:25:17 ]
あー付加じゃなく負荷

233 名前:仕様書無しさん mailto:sage [2007/05/20(日) 16:26:10 ]
プログラマとしての センス はわからない
プログラマとしての 常識のあるなし はわかる

234 名前:仕様書無しさん mailto:sage [2007/05/20(日) 16:31:37 ]
漏れなら最初に

素数ってなんですか?

と質問する。
次に

サンプルソース下さい。

と要求し、
最後に

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

と言い訳する。

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

236 名前:仕様書無しさん mailto:sage [2007/05/20(日) 16:57:10 ]
アルゴリズムの発明は理学部に任せます

237 名前:仕様書無しさん mailto:sage [2007/05/20(日) 17:09:34 ]
じゃあ素数じゃなくて完全数を見つけるプログラムにしようぜ

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

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

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

240 名前:仕様書無しさん mailto:sage [2007/05/21(月) 03:46:24 ]
>>239
そんなん誰でもできるだろ( ´,_ゝ`)



241 名前:仕様書無しさん mailto:sage [2007/05/21(月) 04:58:38 ]
完全食よりターローだろ

242 名前:仕様書無しさん mailto:sage [2007/05/21(月) 05:13:15 ]
>>237
5つ目が2時間半経っても出て来ねえw...

243 名前:仕様書無しさん mailto:sage [2007/05/23(水) 00:49:49 ]
>>240
だが現実は30分でできない人続出www

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

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

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

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

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

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

248 名前:仕様書無しさん mailto:sage [2007/05/24(木) 00:06:08 ]
経験年数が足りなくて就職できん

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

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

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



251 名前:仕様書無しさん mailto:sage [2007/05/24(木) 18:39:02 ]
アセンブラのコードがないね

252 名前:仕様書無しさん mailto:sage [2007/05/24(木) 23:26:17 ]
そうだね

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

254 名前:仕様書無しさん mailto:sage [2007/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 名前:仕様書無しさん mailto:sage [2007/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 名前:仕様書無しさん mailto:sage [2007/05/26(土) 19:09:33 ]
> 254
kの意味わからん・・・
break するならばいらんのでは?

257 名前:仕様書無しさん mailto:sage [2007/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 名前:仕様書無しさん mailto:sage [2007/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 名前:仕様書無しさん mailto:sage [2007/05/27(日) 07:39:33 ]
>>256
break で抜けるのは j のループだけなんじゃないの?

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



261 名前:仕様書無しさん mailto:sage [2007/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 名前:仕様書無しさん mailto:sage [2007/05/30(水) 19:50:33 ]
>>261
確かにそうなんだけど、sqrtって計算コスト軽いの?

263 名前:仕様書無しさん mailto:sage [2007/05/31(木) 11:53:50 ]
意外と軽いけど間の変換が無駄なんだよな

264 名前:仕様書無しさん mailto:sage [2007/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 名前:仕様書無しさん mailto:sage [2007/06/11(月) 22:15:56 ]
>>264
もっと素直に

266 名前:仕様書無しさん mailto:sage [2007/06/11(月) 22:20:45 ]
ぬるぽ!

267 名前:仕様書無しさん mailto:sage [2007/06/11(月) 22:57:29 ]
>>265
彼女にそういったらふられた

268 名前:仕様書無しさん mailto:sage [2007/06/12(火) 12:19:51 ]
>>265 的確な指摘ワロスw

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

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

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



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

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


272 名前:仕様書無しさん mailto:sage [2007/06/15(金) 14:49:52 ]
001から100までならば何進表記なんだか全然わからない
が正しいのでは?

273 名前:仕様書無しさん mailto:sage [2007/06/15(金) 16:21:16 ]
0 から (900-800) まで

これでok

274 名前:仕様書無しさん mailto:sage [2007/06/15(金) 19:30:39 ]
だからその900や800は何進法で表記されているのか?

275 名前:仕様書無しさん mailto:sage [2007/06/15(金) 19:30:59 ]
ちょっとウンコしてくる

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

277 名前:仕様書無しさん mailto:sage [2007/06/17(日) 01:59:48 ]
何の指定もないんだから、10進法に決まってんだろカスが

278 名前:仕様書無しさん mailto:sage [2007/06/17(日) 02:30:16 ]
どうしてですか

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

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



281 名前:仕様書無しさん mailto:sage [2007/06/17(日) 18:44:13 ]
えっと
>>269
が悪いでOK?w

282 名前:仕様書無しさん mailto:sage [2007/06/17(日) 19:49:51 ]
>>269 の頭が悪いでOK

283 名前:仕様書無しさん [2007/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 名前:仕様書無しさん mailto:sage [2007/06/17(日) 20:29:06 ]
>>283
ふつう。
というか、出題者はこのようなシンプルで正しい解答を期待している

285 名前:仕様書無しさん mailto:sage [2007/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 名前:仕様書無しさん mailto:sage [2007/06/17(日) 22:34:34 ]
剰余演算は各ループ2回づつじゃないと駄目だと思うの。

287 名前:仕様書無しさん mailto:sage [2007/06/17(日) 22:49:57 ]
>>286
なんで?
283も285も1回で、必要な出力を得られるのでは?

288 名前:仕様書無しさん mailto:sage [2007/06/17(日) 23:59:22 ]
>>285 テキトーすぎたよ カッコ閉じてないしインデント無茶苦茶w失格w

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

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

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

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

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



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

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

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

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

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

293 名前:291 mailto:sage [2007/06/19(火) 20:56:08 ]
>>292
>情報サイエンス学科が馬鹿の集まりだなんて、一言も言ってないよ。

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

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

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

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

296 名前:仕様書無しさん mailto:sage [2007/06/19(火) 22:08:49 ]
Fizz-Buzz問題を目にするまでは
>猿でも書けるだろ
と自分も思いこんでいた。

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

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

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


297 名前:仕様書無しさん mailto:sage [2007/06/19(火) 22:23:17 ]
プログラムを紙に書き出すような人間には
プログラムを書いてほしくないなあ

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

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

299 名前:仕様書無しさん mailto:sage [2007/06/19(火) 22:48:08 ]
>>298
あんたがコボラじゃないなら、話を聞いてやる

300 名前:仕様書無しさん mailto:sage [2007/06/19(火) 22:56:18 ]
大昔 COBOL & FORTRAN
昔 C/C++ & Java
今 VB & C# & Perl & Ruby
のジジイじゃが、駄目かね?



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

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

303 名前:仕様書無しさん mailto:sage [2007/06/19(火) 23:26:53 ]
>>300
Rubyを紙で、ってのがよくわからん

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

304 名前:仕様書無しさん mailto:sage [2007/06/19(火) 23:28:15 ]
仕事の話ならドキュメントの充実度次第

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

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

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

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

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

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

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



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

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

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

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

315 名前:仕様書無しさん mailto:sage [2007/06/20(水) 06:36:13 ]
IDEの補完に頼りすぎた猿以下のPGはこれから増えるんでないかなー

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

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

318 名前:仕様書無しさん mailto:sage [2007/06/20(水) 08:51:18 ]
多人数の場合、論外な書き方が出にくい利点はある。

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

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

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

320 名前:仕様書無しさん mailto:sage [2007/06/21(木) 10:03:13 ]
>>319
そうだね。ホント、携帯の周りには多いよね。

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

char a[10];
long l;

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

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

って言ったら

l = (long)a;

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

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



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

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

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

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

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

324 名前:仕様書無しさん [2007/06/21(木) 16:36:10 ]
>>320
冗談ではなく、そういうのいるぞ。

char a[10];
long l;

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

a = (char *)l;

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

325 名前:仕様書無しさん mailto:sage [2007/06/21(木) 23:05:57 ]
char a[10];
long l;

l = a.toLong();

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

326 名前:仕様書無しさん mailto:sage [2007/06/22(金) 01:52:20 ]
>>324
それ、>>320のと同一人物だろwww

327 名前:仕様書無しさん mailto:sage [2007/06/22(金) 02:18:41 ]
VBじゃねぇつーのww

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


328 名前:仕様書無しさん mailto:sage [2007/06/22(金) 03:22:20 ]

char a[10];
long l;

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

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


329 名前:仕様書無しさん mailto:sage [2007/06/22(金) 12:39:08 ]
>>327
文系ならいいんだよ、こっちも適性があるかどうか見極める気になるし。

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

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


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



331 名前:仕様書無しさん mailto:sage [2007/06/22(金) 15:17:00 ]
大学でCの演習やってたら普通
atoiとかやるはずなんだけどなー。

332 名前:仕様書無しさん mailto:sage [2007/06/22(金) 16:10:56 ]
atoiでいいのか?

333 名前:仕様書無しさん mailto:sage [2007/06/22(金) 16:21:10 ]
常識的に考えてsnprintfだろ

334 名前:仕様書無しさん mailto:sage [2007/06/22(金) 16:34:01 ]
これが現実

335 名前:仕様書無しさん mailto:sage [2007/06/22(金) 16:54:53 ]
元問題の話か
まぁいいや、さぁいくか。

336 名前:仕様書無しさん mailto:sage [2007/06/22(金) 19:35:51 ]
>>328
C++ じゃなくて C。
しかも boost なんてどこで採用されてんだよwwww

337 名前:仕様書無しさん mailto:sage [2007/06/22(金) 20:24:01 ]
ここで、Fizz-Buzz的な問題を一問。
問:3000までの親和数を求めるプログラムを書け。

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

338 名前:仕様書無しさん mailto:sage [2007/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 名前:仕様書無しさん mailto:sage [2007/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 名前:仕様書無しさん mailto:sage [2007/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 mailto:sage [2007/06/22(金) 22:22:28 ]
>>339
こんなのが一発で思い浮かぶようになりたいぜ…orz

342 名前:仕様書無しさん mailto:sage [2007/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 名前:仕様書無しさん mailto:sage [2007/06/23(土) 00:09:35 ]
何の役にも立たないプログラムを書く奴のモチベーションがどこから来ているのかを誰か教えてくれ。

344 名前:仕様書無しさん [2007/06/23(土) 00:11:30 ]
わからない人には教えてもわからない

345 名前:仕様書無しさん mailto:sage [2007/06/23(土) 00:20:17 ]
そこに問題があったら解きたくなるのが人情ってもんだろ。違うか?


346 名前:仕様書無しさん mailto:sage [2007/06/23(土) 00:35:05 ]
www.agusa.i.is.nagoya-u.ac.jp/person/mzp/hiki/?exercise

347 名前:仕様書無しさん [2007/06/23(土) 01:13:53 ]
知恵遅れのためにCOBOLとかRPGでも書いてやれよw

348 名前:仕様書無しさん mailto:sage [2007/06/23(土) 08:49:56 ]
検証する側から考えると改行の有無で評価が分かれそうだな

349 名前:343 mailto:sage [2007/06/23(土) 09:01:24 ]
>>345
解がないならね。
自分は解けると判っている問題を解くことの面倒の事を言っているんだけど

350 名前:仕様書無しさん mailto:sage [2007/06/23(土) 09:02:43 ]
ボケ防止兼、腕試し



351 名前:仕様書無しさん mailto:sage [2007/06/23(土) 09:08:14 ]
趣味でなにかやってる人にやる意味あるのかとか聞くのか。へぇ。

352 名前:仕様書無しさん mailto:sage [2007/06/23(土) 09:20:05 ]
趣味プログラムは多少なりとも自分の役に立つものだろう

353 名前:仕様書無しさん mailto:sage [2007/06/23(土) 09:28:01 ]
fiber使ってライフゲームとかそういう下らんものしか作ってないぜ…

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


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

356 名前:355 mailto:sage [2007/06/23(土) 10:34:50 ]
ああ、もちろん「コンピュータ系の学部でも」という意味で。

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

358 名前:仕様書無しさん mailto:sage [2007/06/23(土) 14:17:20 ]
高校で古文や漢文をやるのと同様に、
大学でCをやるのさ。

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

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



360 名前:仕様書無しさん mailto:sage [2007/06/23(土) 14:37:20 ]
つまんねー流れ



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


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

363 名前:仕様書無しさん mailto:sage [2007/06/23(土) 19:12:00 ]
362を読んで詭弁のガイドラインを思い出した

364 名前:仕様書無しさん mailto:sage [2007/06/23(土) 19:14:41 ]
ttp://blogs.yahoo.co.jp/engineer_ryuseigun/23271561.html

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

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

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

365 名前:仕様書無しさん mailto:sage [2007/06/23(土) 20:24:13 ]
四の五の言わずに2分以内に解け
さもなくば不採用だ

366 名前:仕様書無しさん mailto:sage [2007/06/23(土) 20:39:31 ]
>>365
それにつきる

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

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

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

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



371 名前:仕様書無しさん mailto:sage [2007/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 名前:仕様書無しさん mailto:sage [2007/06/24(日) 21:59:49 ]
oku.edu.mie-u.ac.jp/~okumura/blog/node/1531
> FizzBuzz問題をわが情報教育課程3年生の優秀な学生42人に制限時間付きでC言語で解かせてみた。

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

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

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

374 名前:仕様書無しさん mailto:sage [2007/06/24(日) 23:29:39 ]
>370
それなんてコバヤシマル・シナリオ?

375 名前:仕様書無しさん mailto:sage [2007/06/25(月) 01:07:53 ]
>>373
「最適なアルゴリズム」は学者の仕事さ

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

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

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

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

379 名前:仕様書無しさん mailto:sage [2007/06/25(月) 13:29:04 ]
蒸し返すようだが
動作テスト禁止ってのが基地外

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




381 名前:仕様書無しさん mailto:sage [2007/06/25(月) 17:02:44 ]
時間競争っていう意味でも充分でしょ。

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

382 名前:仕様書無しさん mailto:sage [2007/06/25(月) 17:03:56 ]
>>379
残念ですがお帰りください。

383 名前:仕様書無しさん mailto:sage [2007/06/25(月) 17:11:27 ]
数分で紙に書くのはきついかも。。
数分でエディタに打ち込むならなんとか

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

385 名前:仕様書無しさん mailto:sage [2007/06/25(月) 17:28:04 ]
>>383
俺も。
「他人に読める字で書け」となると、5分もらわないと。

386 名前:仕様書無しさん mailto:sage [2007/06/25(月) 20:42:08 ]
fizz-buzzはいけるだろうけど友愛数とかやられたしぼん確定

387 名前:仕様書無しさん mailto:sage [2007/06/25(月) 21:56:42 ]
>>386
まず問題の意味を理解できない俺チュンリー

388 名前:仕様書無しさん mailto:sage [2007/06/25(月) 23:31:03 ]
無難にフィボナッチ数列で

389 名前:仕様書無しさん mailto:sage [2007/06/25(月) 23:50:31 ]
フィボナッチはいいね。
何も考えないでこういうコード書く奴いそうで。

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

390 名前:仕様書無しさん mailto:sage [2007/06/25(月) 23:53:09 ]
#define fib(n) (((n)==1||(n)==2)?1:fib((n)-1)+fib((n)-2))



391 名前:仕様書無しさん mailto:sage [2007/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 名前:仕様書無しさん mailto:sage [2007/06/26(火) 00:50:05 ]
sub fib{
 my ($n) = @_;
 return (((1+sqrt(5))/2)**$n - ((1-sqrt(5))/2)**$n)/sqrt(5);
}

393 名前:仕様書無しさん mailto:sage [2007/06/26(火) 01:19:33 ]
>>390
Cのプリプロセッサって再帰的な展開できるんだっけ?


394 名前:仕様書無しさん mailto:sage [2007/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 名前:仕様書無しさん mailto:sage [2007/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 名前:仕様書無しさん mailto:sage [2007/06/26(火) 02:35:19 ]
検索しないと解けないような問題でインターネット検索ありで問題解かせるのとかどうよ?
実際探し物のテクニックって重要だと思うし

397 名前:仕様書無しさん mailto:sage [2007/06/26(火) 10:58:34 ]
人力検索使われそうだな

398 名前:仕様書無しさん mailto:sage [2007/06/26(火) 12:33:51 ]
>>397
ワロタ

399 名前:仕様書無しさん mailto:sage [2007/06/26(火) 12:43:40 ]
>>395
できればいっしょに仕事したくない

400 名前:仕様書無しさん mailto:sage [2007/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 名前:仕様書無しさん mailto:sage [2007/06/26(火) 14:24:14 ]
まったく同じ計算を平気で繰り返す奴ってなんなの?

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

403 名前:仕様書無しさん mailto:sage [2007/06/26(火) 15:19:58 ]
d.hatena.ne.jp/kagamihoge/20070525/1180094454

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

泣けるぜ



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

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


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

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


407 名前:仕様書無しさん mailto:sage [2007/06/26(火) 16:56:28 ]
>累乗がO(1)かどうかはさておき
おくなよw

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

409 名前:仕様書無しさん mailto:sage [2007/06/26(火) 17:06:01 ]
391 が lisp か
392 が perl か
400 が ruby か


410 名前:仕様書無しさん mailto:sage [2007/06/26(火) 17:22:31 ]
>>391
scheme
>>392
perl
でおk?





411 名前:仕様書無しさん mailto:sage [2007/06/26(火) 17:50:43 ]
>>406みたいなやつはいらん知識ばっかり持っててつかえねーんだよ

412 名前:411 mailto:sage [2007/06/26(火) 17:53:15 ]
スマソ>>392だった。釣ってくる。

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


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

414 名前:仕様書無しさん mailto:sage [2007/06/26(火) 18:08:04 ]
なんだよこの流れ
ここはム板じゃなくてマ板だ

415 名前:仕様書無しさん mailto:sage [2007/06/26(火) 18:15:16 ]
391 が ガリ勉委員長タイプ
392 が 変態キモオタタイプ
400 が 爽やかイケメンタイプ


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

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

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

419 名前:仕様書無しさん mailto:sage [2007/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 名前:仕様書無しさん mailto:sage [2007/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 名前:仕様書無しさん mailto:sage [2007/06/26(火) 21:14:45 ]
累乗使ってるのは間違った答え出してきそう

422 名前:仕様書無しさん mailto:sage [2007/06/27(水) 09:49:37 ]
>>419
>391考えたやつ頭いいな。
wikipedia くらい読んだら?

423 名前:422 mailto:sage [2007/06/27(水) 09:50:01 ]
間違えました。
もういいです。

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

425 名前:仕様書無しさん mailto:sage [2007/06/27(水) 14:00:29 ]
>>424
いやいや、「ちゃんとしてないプログラマ」を教育しようって話じゃないから。

426 名前:仕様書無しさん mailto:sage [2007/06/27(水) 19:20:46 ]
いわばFizz-Buzzのふるいだな
デンジャラスな追加要員を排除するべく

427 名前:仕様書無しさん mailto:sage [2007/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 名前:仕様書無しさん mailto:sage [2007/06/27(水) 20:26:02 ]
↓コボラ登場

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


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

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



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

432 名前:仕様書無しさん mailto:sage [2007/06/27(水) 22:30:31 ]
とはいえqsortのアルゴリズムを単独で発見できる人は滅多にいない

433 名前:仕様書無しさん mailto:sage [2007/06/27(水) 23:53:14 ]
あんなんできるか

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

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

436 名前:仕様書無しさん mailto:sage [2007/06/28(木) 02:09:39 ]
434は自力でqsortを導き出したようです。

437 名前:仕様書無しさん mailto:sage [2007/06/28(木) 02:42:27 ]
FFTは思い付いたけどqsortは無理だな

438 名前:仕様書無しさん mailto:sage [2007/06/28(木) 09:14:26 ]
バカスw

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


440 名前:仕様書無しさん mailto:sage [2007/06/28(木) 11:44:35 ]
俺にはshell sortが精一杯だった。



441 名前:仕様書無しさん mailto:sage [2007/06/28(木) 11:48:59 ]
バブルソートは俺にまかせとけw

442 名前:仕様書無しさん mailto:sage [2007/06/28(木) 11:50:18 ]
俺が自力で見つけたソートはバケツソートだった

443 名前:仕様書無しさん mailto:sage [2007/06/28(木) 11:52:39 ]
つか、qsort のアルゴリズムが何かなんて実装依存なんだが。

444 名前:仕様書無しさん mailto:sage [2007/06/28(木) 11:54:27 ]
qsort=クイックソートなのでは?

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



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

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

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

例:
ダイヤのQ

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

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

447 名前:仕様書無しさん mailto:sage [2007/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 名前:仕様書無しさん mailto:sage [2007/06/28(木) 22:29:55 ]
昔強引な方法でシャッフルしたことがある。
配列に前の方から0-51のランダムな数字を詰め込む時、詰め込む配列の前に詰め込もうとする数字と同じものが無いか確認して、
そいつを52回繰り返すだけ。

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


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

450 名前:仕様書無しさん mailto:sage [2007/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 名前:仕様書無しさん mailto:sage [2007/06/28(木) 23:34:44 ]
むらが出来ないようにきっちり書くのは案外難しい。
というかその知識があるかないかってだけなんだが。

452 名前:仕様書無しさん mailto:sage [2007/06/29(金) 01:09:01 ]
初心者ですが作りました。

sourcepost.sytes.net/sourcepost/sourceview.aspx?source_id=29523

453 名前:仕様書無しさん mailto:sage [2007/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 名前:仕様書無しさん mailto:sage [2007/06/29(金) 08:03:29 ]
なんか苦戦しているうちにでかくなっちゃいました
これはテストで出されたらまぁ解けない気がします
言語はC++で必要なライブラリはboostとboost sandboxのrange_exライブラリです
ttp://www.uploda.net/cgi/uploader3/index.php?file_id=0000004200.zip

455 名前:仕様書無しさん mailto:sage [2007/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 名前:仕様書無しさん mailto:sage [2007/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 名前:仕様書無しさん mailto:sage [2007/06/29(金) 12:09:14 ]
いろんなアプローチがあって楽しいね。

458 名前:仕様書無しさん mailto:sage [2007/06/29(金) 12:13:13 ]
俺もRubyは使うが、sort_by{rand} は知らんかった
そんな簡単に書けたのかよ…

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

460 名前:仕様書無しさん mailto:sage [2007/06/29(金) 13:53:43 ]
>>456
みじかっ
ゴルファーだな。



461 名前:仕様書無しさん mailto:sage [2007/06/29(金) 19:58:34 ]
Rubyってすごいんだな
仕様と同じくらいの分量で実装が書けてしまうのか

462 名前:仕様書無しさん mailto:sage [2007/06/29(金) 21:38:34 ]
それに引き換えC++は・・・

463 名前:仕様書無しさん mailto:sage [2007/06/29(金) 23:35:36 ]
>456 のコードはまだ短くなるからゴルファーではないな

464 名前:仕様書無しさん mailto:sage [2007/06/30(土) 01:03:35 ]
>>463
トップゴルファーだけがゴルファーではない

465 名前:1/3 mailto:sage [2007/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 mailto:sage [2007/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 mailto:sage [2007/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 名前:仕様書無しさん mailto:sage [2007/06/30(土) 15:04:57 ]
// 素朴に書いたつもりが、三時間かかった( ´ー`)y─┛~~ みんなならどうする?

469 名前:仕様書無しさん mailto:sage [2007/06/30(土) 15:24:51 ]
やっぱC++はこういうこじんまりとしたプログラミングには向いてないんだろうな

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

sourcepost.sytes.net/sourcepost/sourceview.aspx?source_id=29537



471 名前:仕様書無しさん mailto:sage [2007/06/30(土) 16:04:42 ]
この問題のおかげでRubyに興味が出てきた

472 名前:仕様書無しさん mailto:sage [2007/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 名前:仕様書無しさん mailto:sage [2007/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 名前:仕様書無しさん mailto:sage [2007/06/30(土) 18:14:52 ]
>>473
つ Collections.shuffler(cards);

475 名前:仕様書無しさん mailto:sage [2007/06/30(土) 18:34:37 ]
>>474
>>470

476 名前:仕様書無しさん mailto:sage [2007/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 名前:仕様書無しさん mailto:sage [2007/06/30(土) 18:47:04 ]
>476
Pythonからインデント抜いたら激しく解り難いぞ…
空白を&nbsp;か全角空白に置換して投稿しる

478 名前:仕様書無しさん mailto:sage [2007/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 名前:仕様書無しさん mailto:sage [2007/06/30(土) 20:56:09 ]
>>472-473
>>470ですが、なるほど、勉強になります。
ところで、>>455さんですよね?

480 名前:仕様書無しさん mailto:sage [2007/07/01(日) 00:22:44 ]
>>470ですが、>>472-473を参考にさらに作り直しました。

sourcepost.sytes.net/sourcepost/sourceview.aspx?source_id=29540



481 名前:仕様書無しさん mailto:sage [2007/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 名前:仕様書無しさん [2007/07/01(日) 13:40:18 ]
漏れ「どの程度シャッフルするんですか?どうでもいいなら
    1個入れ替えるだけでもいいですよね」

483 名前:仕様書無しさん mailto:sage [2007/07/01(日) 13:43:45 ]
俺「一日ください」

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

484 名前:仕様書無しさん mailto:sage [2007/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 名前:仕様書無しさん mailto:sage [2007/07/01(日) 18:00:45 ]
>>484
おー、ついにほとんどワンライナーになりましたか。。。
自分は最近、Javaを習ったので、拡張構文をふんだんに使いました。

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

486 名前:仕様書無しさん mailto:sage [2007/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 名前:仕様書無しさん mailto:sage [2007/07/01(日) 18:26:11 ]
>484
Rubyの puts は引数に配列突っ込むと
要素ごとに改行するから join("\n") は要らないね

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

488 名前:仕様書無しさん mailto:sage [2007/07/01(日) 18:37:10 ]
>>487 おわー! 勉強になりました。ありがとうございます。

489 名前:仕様書無しさん mailto:sage [2007/07/04(水) 14:23:26 ]
>>456, >>460
>>456をゴルファーとか言うやつは、ゴルフやったことないやつ。

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

490 名前:仕様書無しさん mailto:sage [2007/07/04(水) 14:31:14 ]
約:おれのほうがすごい、おれをほめて。



491 名前:仕様書無しさん mailto:sage [2007/07/04(水) 20:54:38 ]
訳 だろ

492 名前:仕様書無しさん [2007/07/04(水) 21:04:56 ]
疫 だろ?

493 名前:仕様書無しさん mailto:sage [2007/07/04(水) 22:05:54 ]
口だけの人は何を言っても聴いてもらえませんよ?

494 名前:こんなの [2007/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 名前:こんなの [2007/07/04(水) 22:16:31 ]
PCだと2分ありゃ余裕だが、
神だと10分位かかりそう。

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

496 名前:仕様書無しさん mailto:sage [2007/07/04(水) 22:16:41 ]
>>494

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

497 名前:こんなの [2007/07/04(水) 22:20:21 ]
まぁ、いいじゃん。

498 名前:仕様書無しさん mailto:sage [2007/07/04(水) 22:21:01 ]
っつーか
!=つかえw

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

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



501 名前:仕様書無しさん [2007/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 名前:こんなの [2007/07/04(水) 22:29:10 ]
>>501
アホ。
それじゃコンパイル通らねーだろw
ちゃんとメソッド名も書けw

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

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

504 名前:仕様書無しさん mailto:sage [2007/07/04(水) 22:32:47 ]
>>502-503 増えないだろw

505 名前:仕様書無しさん mailto:sage [2007/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 名前:仕様書無しさん mailto:sage [2007/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続き mailto:sage [2007/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 mailto:sage [2007/07/04(水) 22:53:16 ]
3年ぶりのC++なので15分かかった。鬱。

509 名前:仕様書無しさん mailto:sage [2007/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 名前:仕様書無しさん [2007/07/04(水) 23:05:57 ]
>>506
お前、実務でもそんなメンドクサイ事してるのかw?






511 名前:仕様書無しさん mailto:sage [2007/07/04(水) 23:06:25 ]
ネタでしょw

512 名前:sage [2007/07/04(水) 23:06:42 ]
よし出来た。

#include "fizzbuzz.h"

void main(){
  fizzbuzz();
}

513 名前:仕様書無しさん mailto:sage [2007/07/04(水) 23:17:01 ]
>512
なんと。出題用PCには既に解答が入ってたのか

514 名前:仕様書無しさん [2007/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 名前:仕様書無しさん mailto:sage [2007/07/04(水) 23:20:39 ]
>>514 こういうのが一番素直で好感が持てる。

516 名前:514 [2007/07/04(水) 23:21:31 ]
手元にコンパイラが無いのですが合ってますか?

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

517 名前:仕様書無しさん [2007/07/04(水) 23:22:20 ]
>>515
ありがとうございます。

518 名前:仕様書無しさん mailto:sage [2007/07/04(水) 23:25:35 ]
残念ながら int main()なのにreturnが無いよ

519 名前:仕様書無しさん [2007/07/04(水) 23:27:01 ]
おもいっきり違うだろ。

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

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



521 名前:仕様書無しさん mailto:sage [2007/07/04(水) 23:30:47 ]
ぁぅ。

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

522 名前:仕様書無しさん mailto:sage [2007/07/04(水) 23:32:02 ]
いや…混乱したのでもう黙りますw

523 名前:仕様書無しさん mailto:sage [2007/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 名前:仕様書無しさん mailto:sage [2007/07/05(木) 01:52:07 ]
↑手元にコンパイラないから、テストしてないけどこんなもんかな。
コンパイルは通らないハズ。
CONSOLEの宣言とか省略してるから。
全部書くと1レスに収まらねぇだろうしな〜w

525 名前:仕様書無しさん mailto:sage [2007/07/05(木) 08:34:29 ]
なでしことかで作ったらどんな感じになる?

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

527 名前:仕様書無しさん mailto:sage [2007/07/06(金) 00:41:01 ]
だれかぴゅう太BASICでタノム

528 名前:仕様書無しさん mailto:sage [2007/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 mailto:sage [2007/07/06(金) 12:07:56 ]
ミスった、正しくは
( CALL :CASE %%I )
と %%I が入る

530 名前:仕様書無しさん mailto:sage [2007/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 名前:仕様書無しさん mailto:sage [2007/07/06(金) 20:07:30 ]
ここで毛色を変えて一問。

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

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

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

533 名前:仕様書無しさん mailto:sage [2007/07/06(金) 22:03:05 ]
============ test ============
========== fizzbuzz ==========

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

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

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

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

536 名前:仕様書無しさん mailto:sage [2007/07/06(金) 22:17:30 ]
>>535
ソフト屋としてありえへん姿勢やわ

537 名前:仕様書無しさん mailto:sage [2007/07/06(金) 22:28:48 ]
>>536
コード量が多かったら丁寧ってわけじゃないぞ。

538 名前:仕様書無しさん mailto:sage [2007/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 名前:仕様書無しさん mailto:sage [2007/07/06(金) 23:02:36 ]
インデントしてくれ

540 名前:仕様書無しさん mailto:sage [2007/07/06(金) 23:04:04 ]
>>537
コイツが何のことを言ってるのか誰か解り易く説明してくれや



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

542 名前:仕様書無しさん mailto:sage [2007/07/06(金) 23:16:01 ]
>>541
そう。
実質的に入力された文字が30文字ならそのまま表示。

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

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

545 名前:ちょちょ [2007/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 名前:ちょちょ [2007/07/07(土) 00:20:40 ]
A
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 名前:仕様書無しさん mailto:sage [2007/07/07(土) 00:26:44 ]
>>543
仕事のコードじゃないならいいよね。省略できるものはどんどん省略すれば。
ゴルフもその思想だし。

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


548 名前:仕様書無しさん [2007/07/07(土) 00:33:08 ]
544がよからぬ事を企んでます!

549 名前:仕様書無しさん mailto:sage [2007/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 名前:仕様書無しさん mailto:sage [2007/07/07(土) 00:51:06 ]
よし!ちょっとperlっぽいけどrubyバージョンも出来たぞ!!

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



551 名前:ちょちょ [2007/07/07(土) 00:56:36 ]
意外とこのすれ面白いなw



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

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

553 名前:仕様書無しさん mailto:sage [2007/07/07(土) 01:03:52 ]
(" " + $_ + "") -> (" " + $_ + " ")
だったw
だみだこりゃ

554 名前:仕様書無しさん mailto:sage [2007/07/07(土) 02:06:25 ]
>>552
centerなんて初めてしったw
よく見つけたなw

555 名前:仕様書無しさん mailto:sage [2007/07/07(土) 02:13:49 ]
>>554
つか誰だよこんなメソッド追加した奴w

556 名前:552 mailto:sage [2007/07/07(土) 02:25:34 ]
28文字29文字の時がダメだったw
>= 30とか比較しない方法無いかな

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


558 名前:仕様書無しさん mailto:sage [2007/07/07(土) 02:51:53 ]
stripいらなかった
間抜け過ぎるorz

559 名前:仕様書無しさん mailto:sage [2007/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 名前:仕様書無しさん mailto:sage [2007/07/07(土) 09:05:30 ]
>>221
コボルすげぇなww



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

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

562 名前:仕様書無しさん mailto:sage [2007/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 名前:仕様書無しさん mailto:sage [2007/07/07(土) 10:38:01 ]
>>562
なでしこを連想した。

564 名前:仕様書無しさん mailto:sage [2007/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 名前:仕様書無しさん mailto:sage [2007/07/07(土) 11:11:52 ]
その辺はhackじゃなくてcrackをしてるらしいw

566 名前:仕様書無しさん mailto:sage [2007/07/07(土) 12:10:29 ]
>>564
流石の記号、英数率






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<150KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef