Fizz-Buzz問題at PROG
Fizz-Buzz問題 - 暇つぶし2ch2:仕様書無しさん
07/05/08 21:37:53
紙に?

3:仕様書無しさん
07/05/08 21:39:05
紙にフローチャートだったら俺も時間かかりそう
コーディングだったらすぐだが

4:仕様書無しさん
07/05/08 21:40:16
紙に機械語で?

5:仕様書無しさん
07/05/08 21:43:20
puts("1");
puts("2");
puts("Fizz");
puts("3");
puts("Buzz");
puts("Fizz");
puts("7");

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



6:仕様書無しさん
07/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:仕様書無しさん
07/05/08 21:48:28
3及び5の倍数の時は数値は出力されてはいけない

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

9:仕様書無しさん
07/05/08 21:50:38
>>6
面接で落とされるな。

10:仕様書無しさん
07/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:仕様書無しさん
07/05/08 21:52:03
>>6
ご冥福をお祈りします。

12:仕様書無しさん
07/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:仕様書無しさん
07/05/08 21:55:03
見苦しい もういいよ

14:仕様書無しさん
07/05/08 21:58:16
>1を読んでそんなバカな、と思ったが>6が全てを語ってた。

15:仕様書無しさん
07/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:仕様書無しさん
07/05/08 21:59:43
つまりコンピュータサイエンス学科卒業生の過半数は文盲?

17:仕様書無しさん
07/05/08 22:13:37
本気でいるんだな・・・新人教育の最後にやってみよう

18:仕様書無しさん
07/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:仕様書無しさん
07/05/08 23:11:15
%は頻繁には使わないから、
初心者なら % を知らないことはありうるかもな。

20:仕様書無しさん
07/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:仕様書無しさん
07/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:仕様書無しさん
07/05/09 00:05:18
スペル間違ってました…orz

23:仕様書無しさん
07/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
07/05/09 01:42:55
あ、
print map { my ($fizz, $bazz); ($_ % 3 ? "" : ($fizz = 1, "Fizz")) . ($_ % 5 ? "" : ($bazz = 1, "Bazz")) . ($fizz || $bazz ? "" : $_) } (1..100)
ってすればよかった(´・ω・`)

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

26:仕様書無しさん
07/05/09 03:05:32
あのぅ。ここで

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

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

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

28:仕様書無しさん
07/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:仕様書無しさん
07/05/09 12:41:14
>>28
それ、間違ってるよ

30:仕様書無しさん
07/05/09 14:12:04
>>29
どこが?
素でわからん。


31:仕様書無しさん
07/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:仕様書無しさん
07/05/09 15:03:49
↑そういうアホコードが最新のコンパイラでどこまで最適化されるか興味あるなw

33:仕様書無しさん
07/05/09 15:15:08
>>32
プロのコードプリーズ!

34:スーパーレッスンプロ
07/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:仕様書無しさん
07/05/09 15:36:12
     ∧_∧
    (ill´Д`)
    ノ つ!;:i;l 。゚・
   と__)i:;l|;:;::;:::⊃
    ⊂;::;.,.';;;;'::.:.;::.⊃

36:仕様書無しさん
07/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:仕様書無しさん
07/05/09 16:01:51
printf("hello", i);って合法なのか?

38:仕様書無しさん
07/05/09 16:11:49
いつからゴルフスレになったんだよwwwww

39:仕様書無しさん
07/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:仕様書無しさん
07/05/09 16:44:10
とりあえずコードが書けるヤシと書けないヤシをふるいわけるのが目的なんだから
バグがあろうが非効率的であろうが問題無い
うちの入社試験でもやってくれんかな。

41:仕様書無しさん
07/05/09 16:48:57
微妙にうっかり八兵衛検出機能も内蔵しているのもよいな。

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

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

44:仕様書無しさん
07/05/09 18:28:10
改行文字入れるのはいいの?

45:仕様書無しさん
07/05/09 18:55:18
2分足らずで紙に書くのはなかなか難しいと思う

46:仕様書無しさん
07/05/09 19:17:54
んなこたないだろw
よっぽどあせらなきゃ無問題。

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

47:仕様書無しさん
07/05/09 20:23:29
プロの書くコードって、きたなくて読みづらいんですね。

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

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


50:仕様書無しさん
07/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:仕様書無しさん
07/05/09 22:52:58
いるよな、こういうアホって。

52:仕様書無しさん
07/05/09 22:58:34
2分ってとこが味噌だよな。

53:仕様書無しさん
07/05/09 23:35:43
#include <stdio.h>

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

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


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

55:仕様書無しさん
07/05/10 00:35:58
コーダの発想だな、まるで。


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

57:仕様書無しさん
07/05/10 00:59:39
>>56
ヘタすりゃ10倍じゃきかないがな。

58:仕様書無しさん
07/05/10 01:17:48
>>50
つFizzBuzz[123456789101112131415]

59:仕様書無しさん
07/05/10 01:37:05
>>50
12345678 も 123456789 も、更には 1234567891011 も 3 の倍数だとは気付かなかったのか。なんと間抜けな。

60:50
07/05/10 01:42:30
>>59
>12345678 も 123456789 も、更には 1234567891011 も 3 の倍数だとは気付かなかったのか。なんと間抜けな。 

え?

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


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

62:50
07/05/10 02:13:22
>>61
>"45は5の倍数だからまとめてBuzz"になるはずだしなあ。 

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


63:仕様書無しさん
07/05/10 02:16:34
>>5
4行目間違ってとるぞい。

64:50
07/05/10 02:17:12
となると、数字が表示される可能性が
全くなくなりそうだな。

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

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

66:仕様書無しさん
07/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:仕様書無しさん
07/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:仕様書無しさん
07/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:仕様書無しさん
07/05/10 06:12:44
>>66よ大丈夫か?

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

70:66
07/05/10 08:03:04
>>69
仕様に書かなかったが「最短一致」の繰り返しってことで。

71:仕様書無しさん
07/05/10 09:20:55
数が四つ以上連なる3の倍数は無い

72:36
07/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:仕様書無しさん
07/05/10 11:48:52
>>72
これはちゃんと試されたんですか?

74:36
07/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:仕様書無しさん
07/05/10 15:30:48
>>74
Cの言語仕様として、偽は0だが真は非0に過ぎん。
計算に使っちゃダメだろ。


76:仕様書無しさん
07/05/10 15:38:02
>>75 意味不明

77:仕様書無しさん
07/05/10 15:38:36
あ、論理式を計算してるのかスマンw

78:仕様書無しさん
07/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:仕様書無しさん
07/05/11 00:54:22
>>78
それじゃ

Fizz
Buzz

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

80:仕様書無しさん
07/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:仕様書無しさん
07/05/11 01:06:22
>80
おまえ頭いいなw

82:仕様書無しさん
07/05/11 01:11:01
↓キレイ派、最適化&速度派

83:仕様書無しさん
07/05/11 04:15:22
printf("012Fizz4BuzzFizz78FizzBuzz11Fizz ....");

84:仕様書無しさん
07/05/11 06:45:40
しかし、ここまでで最小公倍数15を明示的に使ったのは>80だけとは、、。

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

86:仕様書無しさん
07/05/11 10:02:05
%は遅いからだってぉwwwwww

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

88:仕様書無しさん
07/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:仕様書無しさん
07/05/11 10:33:53
ブログとかでもしきりにこのコードの話が盛り上がっているのを見ると、皆さん内心は不安なんだろうなと感じてしまFizzます。

90:仕様書無しさん
07/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:仕様書無しさん
07/05/11 12:20:12
紙?
いったい何時の時代の話なんだ。

92:文系学生
07/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:仕様書無しさん
07/05/11 12:26:05
>>92
試験もしない似非PGが書いているからだ。

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


95:仕様書無しさん
07/05/11 14:19:53
101とは書かないよなぁ

96:文系学生
07/05/11 14:26:13
>94
たしかに、どう考えてもそっちのほうがわかりやすいですね。

俺センスなさすぎwwwww

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

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

99:仕様書無しさん
07/05/11 19:51:13
>>89
ワンライナーは凄いな

100:仕様書無しさん
07/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:仕様書無しさん
07/05/11 20:18:10
>>92
みなさんって言うから俺もまちがってるのかって思ったけど、まちがえてるの>>88>>78だけじゃん。
>>88はコピペして間違えたんだろ?

102:仕様書無しさん
07/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:仕様書無しさん
07/05/11 23:06:25
>>102
>>97-98

104:仕様書無しさん
07/05/11 23:11:50
ゴメwまじで読んでなかったww

105:仕様書無しさん
07/05/11 23:13:08
なんかこのスレを見ていると、Fizz-Buzz問題の本当の意味は

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

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


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

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

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

109:仕様書無しさん
07/05/11 23:22:23
>>106
Hじゃまず紙上デバッグしますよ

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

111:仕様書無しさん
07/05/11 23:23:59
と、普段テストなんかいらないと思っているバグ量産機さまがおっしゃっています

112:仕様書無しさん
07/05/11 23:27:06
↑リア厨レベルの論理記号も理解していないバカ

113:仕様書無しさん
07/05/11 23:27:36
>>110
>UnitTestが流行っていることもあってか

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


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

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

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

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


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

119:仕様書無しさん
07/05/11 23:43:03
>>110の人気に嫉妬

120:仕様書無しさん
07/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:仕様書無しさん
07/05/11 23:59:47
つらつら思うに。
こんなに何種類も回答が出てるのにさらにコードを貼る奴ってどんなレスが欲しいんだろう。
ほめて貰いたいのか?

122:仕様書無しさん
07/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:仕様書無しさん
07/05/12 00:06:13
それが素直に見える人もいるのか

124:仕様書無しさん
07/05/12 00:10:59


125:仕様書無しさん
07/05/12 00:31:38
BEGIN {
    for (i = 1; i <= 100; i++)
        print i ~ /7/ ? "CRAP!" : i
}

126:仕様書無しさん
07/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:仕様書無しさん
07/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:仕様書無しさん
07/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
07/05/12 01:24:20
>>107
/* 力技 */
(ry

130:仕様書無しさん
07/05/12 03:00:04
70代がカオスw

131:仕様書無しさん
07/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:仕様書無しさん
07/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:仕様書無しさん
07/05/12 13:54:04
1÷15

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

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


135:仕様書無しさん
07/05/12 16:38:45
一年後にFizzBuzzの仕様変更によるメンテってどんな罰ゲームだよw

136:仕様書無しさん
07/05/13 06:49:12
初心を思い出させるのに絶好の機会だと思うが。

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

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

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

139:仕様書無しさん
07/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:仕様書無しさん
07/05/13 10:18:56
脳内ルール全快のスレはここですか?

141:仕様書無しさん
07/05/13 11:40:59
>140
×脳内ルール
△脳内仕様
○脳内言語

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

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

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

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

145:仕様書無しさん
07/05/13 23:39:25
>>143
Joel On Software の著者が面接の時に出す問題の例

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


146:仕様書無しさん
07/05/14 00:09:51
ハノイの塔をマウス1クリック1ステップで解答の紙芝居を連続表示せよ

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

148:仕様書無しさん
07/05/14 15:55:55
>>144
高度なギャグか?w

149:仕様書無しさん
07/05/14 15:57:57
>>147-148
政治的なジレンマを疑似体験するための問題

150:仕様書無しさん
07/05/14 16:00:27
仕様バグを未然に防ぐスキルを確認する試験だな

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

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

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

152:仕様書無しさん
07/05/14 16:08:03
>>150
>仕様バグを未然に防ぐスキルを確認する試験だな

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

という精神耐久力テスト

153:仕様書無しさん
07/05/14 16:18:12
>>152
合格したくねえええええ

154:仕様書無しさん
07/05/14 16:47:04
>>151
二つの円ならすぐに出来るんだが・・・

155:仕様書無しさん
07/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:仕様書無しさん
07/05/14 21:20:30
aaa
  aaa test

157:仕様書無しさん
07/05/14 21:21:24
>>155
こんな感じの矩形はどうするの?

/\
\  \
  \/



158:仕様書無しさん
07/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:仕様書無しさん
07/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:仕様書無しさん
07/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:仕様書無しさん
07/05/14 21:38:44
>>159
>まだスマートに書けそうだけど、一応itoa()。 
>
>char* reverse(char* s, int len) 

0点


162:仕様書無しさん
07/05/14 21:50:41
>>159は黒のボールペンを赤といって売りつけるタイプ。

163:仕様書無しさん
07/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:仕様書無しさん
07/05/15 01:39:40
>>145
>・二分検索
は、最初にアルゴリズムが発表されてから、正確な実装が発表されるまで
15年くらいかかったとかペントリーの本に書いてあったぞ。
まるでこのスレのようだ。

165:164
07/05/15 01:41:05
>>164
s/ペントリー/ベントリー/
ローマ字打ちなのにこの手のミスが多い。昔カナで打ってたせいかな

166:仕様書無しさん
07/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
07/05/15 04:52:46
>158
そうか、それだけで判定できるのか…俺もまだまだだなorz

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

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

170:仕様書無しさん
07/05/15 18:23:59
この業界で"矩形領域"を"長方形領域"なんて言ったらいい笑い者だと思うが。

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

172:仕様書無しさん
07/05/15 18:36:08
超包茎ってw

173:仕様書無しさん
07/05/15 18:36:39
>>170
URLリンク(ja.wikipedia.org)
> 長方形(矩形、rectangle): 4 角の大きさが全て 90°(π/2、直角)である四角形。

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

174:仕様書無しさん
07/05/15 18:37:17
>>171
>>170 の最初の5文字は見えないふり?

175:仕様書無しさん
07/05/15 18:39:39
あれだな・・・幼稚園児、小学生は覚えた言葉使いたくて使いたくてしょうがないもんな…

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


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

177:仕様書無しさん
07/05/15 18:43:20
悲哀が漂う。
ま、楽しくやってそうだからいいけど。

178:仕様書無しさん
07/05/15 18:44:05
>>171
ググるんだったら両方の単語でやらなきゃ。

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


179:仕様書無しさん
07/05/15 18:49:43
まあどちらもRectangleなんですけどね

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

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


182:仕様書無しさん
07/05/15 19:07:38
領域いらないだろ・・・

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

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

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


184:仕様書無しさん
07/05/15 19:35:46
ながしかく領域

185:仕様書無しさん
07/05/15 19:36:27
四直角形

186:仕様書無しさん
07/05/15 19:38:23
九十度四個系

187:仕様書無しさん
07/05/15 19:39:53
まさに仕事の遂行ができない不採用の人

188:仕様書無しさん
07/05/15 19:48:08
不採用形

189:仕様書無しさん
07/05/15 19:57:56
終了形

190:仕様書無しさん
07/05/15 20:43:00
>>182
矩形だの長方形だのなんて用語よりも
"RECT" のほうがずっと一般的だよ。
URLリンク(www.google.co.jp)

191:仕様書無しさん
07/05/15 20:51:00
数の暴力に屈するわけにはいかないのです。

192:仕様書無しさん
07/05/15 20:55:20
なぜデータ構造ではなく問題での呼び方で盛り上がるんだw

193:仕様書無しさん
07/05/15 21:06:46
コナミの矩形波クラブって知ってる?

194:仕様書無しさん
07/05/15 23:33:06
>>1
ここの563は既出?
スレリンク(tech板)

195:仕様書無しさん
07/05/16 11:45:45
>>193
ああ、あれよかったよね。
ときどき今田と東野のキンタマが見え隠れするのが。

196:仕様書無しさん
07/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:仕様書無しさん
07/05/17 04:19:47
100はいらないのか、そうなのか

198:仕様書無しさん
07/05/17 06:22:07
>>196
仕様には3と5の倍数と書いてあって、
15の倍数とは書いてないぞ!

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

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


※これはイメージです

199:仕様書無しさん
07/05/17 10:49:37
ループカウンタi やめれ

200:仕様書無しさん
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



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