Fizz-Buzz問題

このエントリーをはてなブックマークに追加
1仕様書無しさん
http://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仕様書無しさん:2007/05/08(火) 21:39:05
紙にフローチャートだったら俺も時間かかりそう
コーディングだったらすぐだが
4仕様書無しさん:2007/05/08(火) 21:40:16
紙に機械語で?
5仕様書無しさん: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仕様書無しさん:2007/05/08(火) 21:48:28
3及び5の倍数の時は数値は出力されてはいけない
8仕様書無しさん:2007/05/08(火) 21:50:28
>>6
プログラミング言語能力の前に、日本語の能力が足りないようです
9仕様書無しさん: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仕様書無しさん: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仕様書無しさん:2007/05/08(火) 21:55:03
見苦しい もういいよ
14仕様書無しさん: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仕様書無しさん: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仕様書無しさん:2007/05/08(火) 23:11:15
%は頻繁には使わないから、
初心者なら % を知らないことはありうるかもな。
20仕様書無しさん: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仕様書無しさん: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仕様書無しさん:2007/05/09(水) 00:05:18
スペル間違ってました…orz
23仕様書無しさん: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)
2423:2007/05/09(水) 01:42:55
あ、
print map { my ($fizz, $bazz); ($_ % 3 ? "" : ($fizz = 1, "Fizz")) . ($_ % 5 ? "" : ($bazz = 1, "Bazz")) . ($fizz || $bazz ? "" : $_) } (1..100)
ってすればよかった(´・ω・`)
2523:2007/05/09(水) 02:13:09
('A`) 結局こう書けばよかった... スレ汚してごめんなさい。 才能無いわ…
print map { ($_ % 3 ? '' : Fizz) . ($_ % 5 ? '' : Bazz) or $_ } 1..100
26仕様書無しさん:2007/05/09(水) 03:05:32
あのぅ。ここで

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

という発言はスレ違いなのでしょうか?
27仕様書無しさん: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仕様書無しさん:2007/05/09(水) 12:41:14
>>28
それ、間違ってるよ
30仕様書無しさん:2007/05/09(水) 14:12:04
>>29
どこが?
素でわからん。
31仕様書無しさん: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仕様書無しさん:2007/05/09(水) 15:03:49
↑そういうアホコードが最新のコンパイラでどこまで最適化されるか興味あるなw
33仕様書無しさん: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仕様書無しさん:2007/05/09(水) 15:36:12
     ∧_∧
    (ill´Д`)
    ノ つ!;:i;l 。゚・
   と__)i:;l|;:;::;:::⊃
    ⊂;::;.,.';;;;'::.:.;::.⊃
36仕様書無しさん: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仕様書無しさん: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仕様書無しさん:2007/05/09(水) 16:44:10
とりあえずコードが書けるヤシと書けないヤシをふるいわけるのが目的なんだから
バグがあろうが非効率的であろうが問題無い
うちの入社試験でもやってくれんかな。
41仕様書無しさん:2007/05/09(水) 16:48:57
微妙にうっかり八兵衛検出機能も内蔵しているのもよいな。
42仕様書無しさん:2007/05/09(水) 16:58:04
>>37
「実引数が残っているにもかかわらず書式が尽きてしまう場合,余
 分の実引数は,評価するだけで無視する。」
(JIS X 3010 : 2003 (ISO/IEC 9899 : 1999)
43仕様書無しさん:2007/05/09(水) 18:20:18
気が早いのか、思い込みが激しいのか、(と言ったら大げさだが)
Fizzがfizzになったり、BuzzがBazzになったり独自仕様な人もいるな。
44仕様書無しさん:2007/05/09(水) 18:28:10
改行文字入れるのはいいの?
45仕様書無しさん:2007/05/09(水) 18:55:18
2分足らずで紙に書くのはなかなか難しいと思う
46仕様書無しさん:2007/05/09(水) 19:17:54
んなこたないだろw
よっぽどあせらなきゃ無問題。

と、国語の入社試験で余裕ぶっこきすぎて時間切れになって
半分白紙で出した俺が偉そうに言ってみる。
47仕様書無しさん:2007/05/09(水) 20:23:29
プロの書くコードって、きたなくて読みづらいんですね。
48仕様書無しさん:2007/05/09(水) 20:31:45
マ板がアホ学生の巣窟に見えたのは気のせいじゃなかったんだ・・・
49仕様書無しさん:2007/05/09(水) 21:32:48
>>30
それを実行させると、
なぜか途中で「(中略) 」などという文字列が出てくる。
50仕様書無しさん: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仕様書無しさん:2007/05/09(水) 22:52:58
いるよな、こういうアホって。
52仕様書無しさん:2007/05/09(水) 22:58:34
2分ってとこが味噌だよな。
53仕様書無しさん:2007/05/09(水) 23:35:43
#include <stdio.h>

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

とりあえずコレだけ書いて、それから中身を書こうと思ったけど、ここですでに30秒つかってる。
2分だとけっこうギリギリかも。
54仕様書無しさん:2007/05/10(木) 00:32:45
>>44
設問を額面通りに受け取るなら空白も入れられないが
それじゃ見づらいとは思わないのか?
55仕様書無しさん:2007/05/10(木) 00:35:58
コーダの発想だな、まるで。
56仕様書無しさん:2007/05/10(木) 00:47:16
要求される2分間という時間と10〜15分という実績の時間について。
まさか優秀な奴を使えば工期が1/5で済むと思っていないよな
57仕様書無しさん:2007/05/10(木) 00:59:39
>>56
ヘタすりゃ10倍じゃきかないがな。
58仕様書無しさん:2007/05/10(木) 01:17:48
>>50
つFizzBuzz[123456789101112131415]
59仕様書無しさん:2007/05/10(木) 01:37:05
>>50
12345678 も 123456789 も、更には 1234567891011 も 3 の倍数だとは気付かなかったのか。なんと間抜けな。
6050:2007/05/10(木) 01:42:30
>>59
>12345678 も 123456789 も、更には 1234567891011 も 3 の倍数だとは気付かなかったのか。なんと間抜けな。 

え?

なぜ >>50 の文章から
「3 の倍数だとは気付かなかった」という結論になるの?
61仕様書無しさん:2007/05/10(木) 02:09:32
12をFizzと書け、という仕様なら、4Buzzじゃなくて
"45は5の倍数だからまとめてBuzz"になるはずだしなあ。
表示と評価のタイミングが不透明だな。
6250:2007/05/10(木) 02:13:22
>>61
>"45は5の倍数だからまとめてBuzz"になるはずだしなあ。 

あ、スマン。
それは確かに見逃してた・・・
63仕様書無しさん:2007/05/10(木) 02:16:34
>>5
4行目間違ってとるぞい。
6450:2007/05/10(木) 02:17:12
となると、数字が表示される可能性が
全くなくなりそうだな。

少しは面白い問題になったと思ったのだが・・・
65仕様書無しさん:2007/05/10(木) 02:39:01
その判定だと、どんな数も0か5が出るまで待てばBuzzれるからな
その前にFizzれるか否か、だけだから
数値を出力する機会はなくなる
66仕様書無しさん: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仕様書無しさん: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仕様書無しさん: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仕様書無しさん:2007/05/10(木) 06:12:44
>>66よ大丈夫か?

1234567891011121314......9899100は既に巨大な5の倍数だが?
3の倍数かどうかは知らん
7066:2007/05/10(木) 08:03:04
>>69
仕様に書かなかったが「最短一致」の繰り返しってことで。
71仕様書無しさん:2007/05/10(木) 09:20:55
数が四つ以上連なる3の倍数は無い
7236: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仕様書無しさん:2007/05/10(木) 11:48:52
>>72
これはちゃんと試されたんですか?
7436: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仕様書無しさん:2007/05/10(木) 15:38:02
>>75 意味不明
77仕様書無しさん:2007/05/10(木) 15:38:36
あ、論理式を計算してるのかスマンw
78仕様書無しさん: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仕様書無しさん:2007/05/11(金) 00:54:22
>>78
それじゃ

Fizz
Buzz

がFizzとBuzzなのかFizzBuzzなのか判別できないよ
80仕様書無しさん: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仕様書無しさん:2007/05/11(金) 01:06:22
>80
おまえ頭いいなw
82仕様書無しさん:2007/05/11(金) 01:11:01
↓キレイ派、最適化&速度派
83仕様書無しさん:2007/05/11(金) 04:15:22
printf("012Fizz4BuzzFizz78FizzBuzz11Fizz ....");
84仕様書無しさん:2007/05/11(金) 06:45:40
しかし、ここまでで最小公倍数15を明示的に使ったのは>80だけとは、、。
85仕様書無しさん: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仕様書無しさん:2007/05/11(金) 10:33:53
ブログとかでもしきりにこのコードの話が盛り上がっているのを見ると、皆さん内心は不安なんだろうなと感じてしまFizzます。
90仕様書無しさん: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仕様書無しさん:2007/05/11(金) 12:20:12
紙?
いったい何時の時代の話なんだ。
92文系学生: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仕様書無しさん:2007/05/11(金) 12:26:05
>>92
試験もしない似非PGが書いているからだ。
94仕様書無しさん:2007/05/11(金) 13:54:42
面白い書き方するなぁ。
1〜100迄というのを明示したい時は、俺は普通に for(i = 1; i <= 100 と書くけどな。
95仕様書無しさん:2007/05/11(金) 14:19:53
101とは書かないよなぁ
96文系学生:2007/05/11(金) 14:26:13
>94
たしかに、どう考えてもそっちのほうがわかりやすいですね。

俺センスなさすぎwwwww
97仕様書無しさん:2007/05/11(金) 15:58:24
なんか上のほうのレス見てたらFizzBuzz問題は200人に1人しか
出来ないってのが本当な気がしてきたよ。
細かいところで未熟な部分はあるけど文系君のコードが一番素直で
良く書けてる気がするのは気のせい?プログラミングってやっぱ才能なのかな。
98仕様書無しさん:2007/05/11(金) 17:33:43
>紙?
>いったい何時の時代の話なんだ。
そのうち100人くらいは問題すら読めていなさそうだなw
99仕様書無しさん: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仕様書無しさん:2007/05/11(金) 20:18:10
>>92
みなさんって言うから俺もまちがってるのかって思ったけど、まちがえてるの>>88>>78だけじゃん。
>>88はコピペして間違えたんだろ?
102仕様書無しさん: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仕様書無しさん:2007/05/11(金) 23:06:25
104仕様書無しさん:2007/05/11(金) 23:11:50
ゴメwまじで読んでなかったww
105仕様書無しさん:2007/05/11(金) 23:13:08
なんかこのスレを見ていると、Fizz-Buzz問題の本当の意味は

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

という事にあるような気がしてきた・・・
106仕様書無しさん:2007/05/11(金) 23:13:33
こういうミスってプログラムを実際に走らせれば一瞬で気づくよな。
>>1がテストを許さず紙に一発書きを要求してるのは何故だ?
107仕様書無しさん:2007/05/11(金) 23:18:06
1から100までの十進整数を順に1行ずつ出力するプログラムを書け。
ただし、整数が「7」という数字を含む場合は、
整数のかわりに "CRAP!" と表示すること。
108仕様書無しさん:2007/05/11(金) 23:20:26
Joel On Softwareって本でも、面接のときに簡単なコードを書かせてみるって話が載ってるけど、
この本では、紙にコードを書くのは難しいから、ロジックがかけてれば多少のバグはあっていいと
伝えてPGを安心させるとか書いてあるよ。
109仕様書無しさん:2007/05/11(金) 23:22:23
>>106
Hじゃまず紙上デバッグしますよ
110仕様書無しさん:2007/05/11(金) 23:23:11
この程度の問題でいちいちバグ出す奴はリアルバカ。
こういう奴に限ってインデックスの境界周りなんかでバグ出しまくる。
UnitTestが流行っていることもあってかコード書いた直後の
読み返し&脳内デバッガによるチェックが杜撰になってきている傾向があるな。
111仕様書無しさん:2007/05/11(金) 23:23:59
と、普段テストなんかいらないと思っているバグ量産機さまがおっしゃっています
112仕様書無しさん:2007/05/11(金) 23:27:06
↑リア厨レベルの論理記号も理解していないバカ
113仕様書無しさん:2007/05/11(金) 23:27:36
>>110
>UnitTestが流行っていることもあってか

あのねぇ、
それは「流行っている」じゃなくて
「有効性が認識されるようになった」だけだよ。
114仕様書無しさん:2007/05/11(金) 23:27:57
走らせれば1秒で正誤がわかるのに
わざわざ脳内デバッグで労力を使うのか・・・。
115仕様書無しさん:2007/05/11(金) 23:31:04
>>110
何度も読み返して脳内デバッガで確認した後でさらに実際にテストするの?
そんな労力を「この程度の問題」に費やして誰が得するの?
それとも確認はもう十分だから実際のテストはしないの?
116仕様書無しさん:2007/05/11(金) 23:37:56
読み返し/紙上デバッグ/机上デバッグ?
それはまたいつの時代の話なのか
バグの存在は試験でしか証明できないのだ
117仕様書無しさん:2007/05/11(金) 23:39:54
一般に UnitTest を否定する奴って
まともに UnitTest が出来ない
長大な関数を書く傾向があると思う。
118仕様書無しさん:2007/05/11(金) 23:43:01
このスレのどこかのレスからUnitTestが批判されていると
読み取った奴は国語力に相当問題があるよw
119仕様書無しさん: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仕様書無しさん:2007/05/11(金) 23:59:47
つらつら思うに。
こんなに何種類も回答が出てるのにさらにコードを貼る奴ってどんなレスが欲しいんだろう。
ほめて貰いたいのか?
122仕様書無しさん: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仕様書無しさん:2007/05/12(土) 00:06:13
それが素直に見える人もいるのか
124仕様書無しさん:2007/05/12(土) 00:10:59
125仕様書無しさん:2007/05/12(土) 00:31:38
BEGIN {
    for (i = 1; i <= 100; i++)
        print i ~ /7/ ? "CRAP!" : i
}
126仕様書無しさん: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仕様書無しさん: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仕様書無しさん: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;
}
12980:2007/05/12(土) 01:24:20
>>107
/* 力技 */
(ry
130仕様書無しさん:2007/05/12(土) 03:00:04
70代がカオスw
131仕様書無しさん: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仕様書無しさん: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仕様書無しさん:2007/05/12(土) 13:54:04
1÷15
134仕様書無しさん:2007/05/12(土) 14:22:52
15使うとかっこいいのはわかるけど、
あとで条件が変わって3と4になった場合に、修正箇所としてわかりにくい。
どうしても15を使いたいなら、3と5から公倍数を求めるプログラムも書いておくべきだろう。

1年後に他人が見て修正が容易なように書いておくのが玄人と素人の違いではないかと。
135仕様書無しさん:2007/05/12(土) 16:38:45
一年後にFizzBuzzの仕様変更によるメンテってどんな罰ゲームだよw
136仕様書無しさん:2007/05/13(日) 06:49:12
初心を思い出させるのに絶好の機会だと思うが。
137仕様書無しさん:2007/05/13(日) 07:17:06
いつの間にかプログラムを紙に書く前提になっているんだが、読解力不足。

FizzBuzzの問題では「プログラムを書け(Write a program)」としか言ってない。
それに対して著者が「優秀なプログラマならば紙に完全に書けるだろう(Most good programmers should be able to write out on paper)」と言っている。
138仕様書無しさん:2007/05/13(日) 10:00:39
改行を出力しろとは書いていない。だからすべてつなげて表示すべき。
とか言ってるアホと同レベルだなw
139仕様書無しさん: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仕様書無しさん:2007/05/13(日) 10:18:56
脳内ルール全快のスレはここですか?
141仕様書無しさん:2007/05/13(日) 11:40:59
>140
×脳内ルール
△脳内仕様
○脳内言語
142仕様書無しさん:2007/05/13(日) 15:48:15
まぁここで必死こいてコード見せてる奴は別だろうけど、
実際いるからな、アルゴリズムというか、処理の組み立てができない奴が。

今は派遣なんかでそういうのが入ってきて、しょうがないから細かく指示して
書かせるんだけど、いちおう「経験者」扱いで入ってきてるんだよな。
自分ではコード書けないくせに、「○○の開発を経験」という実績だけは
積んでいくんだよ。
143仕様書無しさん:2007/05/13(日) 23:22:02
何かFizzBuzzに続く「プログラミング噛ってりゃ出来て当然」レベルの問題を出題しる
144仕様書無しさん: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仕様書無しさん:2007/05/14(月) 00:09:51
ハノイの塔をマウス1クリック1ステップで解答の紙芝居を連続表示せよ
147仕様書無しさん:2007/05/14(月) 00:26:39
>144
ネタじゃなかったら中学校の数学からやり直せ
……と言いたくなったが、つまり「そういうの」を引っかけるための問題か。
148仕様書無しさん:2007/05/14(月) 15:55:55
>>144
高度なギャグか?w
149仕様書無しさん:2007/05/14(月) 15:57:57
>>147-148
政治的なジレンマを疑似体験するための問題
150仕様書無しさん:2007/05/14(月) 16:00:27
仕様バグを未然に防ぐスキルを確認する試験だな

対コボラスキルを確認する試験とかあると便利かもな
151仕様書無しさん:2007/05/14(月) 16:02:21
二つの矩形が重なり合っているかどうかを判定する関数を書け、
ただし思考の過程をホワイトボードを使って説明しながら。

MSにはこんな試験があるらしい。
152仕様書無しさん:2007/05/14(月) 16:08:03
>>150
>仕様バグを未然に防ぐスキルを確認する試験だな

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

という精神耐久力テスト
153仕様書無しさん:2007/05/14(月) 16:18:12
>>152
合格したくねえええええ
154仕様書無しさん:2007/05/14(月) 16:47:04
>>151
二つの円ならすぐに出来るんだが・・・
155仕様書無しさん: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仕様書無しさん:2007/05/14(月) 21:20:30
aaa
  aaa test
157仕様書無しさん:2007/05/14(月) 21:21:24
>>155
こんな感じの矩形はどうするの?

/\
\  \
  \/

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

0点
162仕様書無しさん:2007/05/14(月) 21:50:41
>>159は黒のボールペンを赤といって売りつけるタイプ。
163仕様書無しさん: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仕様書無しさん:2007/05/15(火) 01:39:40
>>145
>・二分検索
は、最初にアルゴリズムが発表されてから、正確な実装が発表されるまで
15年くらいかかったとかペントリーの本に書いてあったぞ。
まるでこのスレのようだ。
165164:2007/05/15(火) 01:41:05
>>164
s/ペントリー/ベントリー/
ローマ字打ちなのにこの手のミスが多い。昔カナで打ってたせいかな
166仕様書無しさん: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; // 新しい先頭
}
167155:2007/05/15(火) 04:52:46
>158
そうか、それだけで判定できるのか…俺もまだまだだなorz
168仕様書無しさん:2007/05/15(火) 10:46:38
seq 100 | perl -ple '$_=(Fizz)[$_%3].(Buzz)[$_%5]||$_'
169仕様書無しさん:2007/05/15(火) 17:56:58
矩形って・・・長方形って書けばいいのに(絶句)これだから頭でっかちは困る
ついでに言うとひし形みたいな場合は判定できるのか?普通はPointx4の判定だろ・・・
170仕様書無しさん:2007/05/15(火) 18:23:59
この業界で"矩形領域"を"長方形領域"なんて言ったらいい笑い者だと思うが。
171仕様書無しさん:2007/05/15(火) 18:32:11
長方形領域でぐぐったらいっちゃん上にCiNiiがきたんだが、、、
九州大学大学院とおまいらと、さて世間はどっちを信じるだろうね。
172仕様書無しさん:2007/05/15(火) 18:36:08
超包茎ってw
173仕様書無しさん:2007/05/15(火) 18:36:39
>>170
http://ja.wikipedia.org/wiki/%E5%9B%9B%E8%A7%92%E5%BD%A2
> 長方形(矩形、rectangle): 4 角の大きさが全て 90°(π/2、直角)である四角形。

四角形っていえばよかったのか?
174仕様書無しさん:2007/05/15(火) 18:37:17
>>171
>>170 の最初の5文字は見えないふり?
175仕様書無しさん:2007/05/15(火) 18:39:39
あれだな・・・幼稚園児、小学生は覚えた言葉使いたくて使いたくてしょうがないもんな…
176仕様書無しさん:2007/05/15(火) 18:40:55
          ____
       / \  /\  キリッ
.     / (ー)  (ー)\
    /   ⌒(__人__)⌒ \  矩形領域!
    |      |r┬-|    |
     \     `ー'´   /
    ノ            \
  /´               ヽ
 |    l              \
 ヽ    -一''''''"~~``'ー--、   -一'''''''ー-、.
  ヽ ____(⌒)(⌒)⌒) )  (⌒_(⌒)⌒)⌒))


          ____
        /_ノ  ヽ、_\
 ミ ミ ミ  o゚((●)) ((●))゚o      ミ ミ ミ
/⌒)⌒)⌒. ::::::⌒(__人__)⌒:::\   /⌒)⌒)⌒)  長方形領域だっておwwww
| / / /     |r┬-|    | (⌒)/ / / //
| :::::::::::(⌒)    | |  |   /  ゝ  :::::::::::/
|     ノ     | |  |   \  /  )  /
ヽ    /     `ー'´      ヽ /    /
 |    |   l||l 从人 l||l      l||l 从人 l||l
 ヽ    -一''''''"~~``'ー--、   -一'''''''ー-、
  ヽ ____(⌒)(⌒)⌒) )  (⌒_(⌒)⌒)⌒))
177仕様書無しさん:2007/05/15(火) 18:43:20
悲哀が漂う。
ま、楽しくやってそうだからいいけど。
178仕様書無しさん:2007/05/15(火) 18:44:05
>>171
ググるんだったら両方の単語でやらなきゃ。

"長方形領域" に一致する日本語のページ 約 9,430 件中 1 - 10 件目 (0.19 秒)
"矩形領域" に一致する日本語のページ 約 36,200 件中 1 - 10 件目 (0.09 秒)
179仕様書無しさん:2007/05/15(火) 18:49:43
まあどちらもRectangleなんですけどね
180仕様書無しさん:2007/05/15(火) 18:55:05
>>178
以外や以外、なかなか健闘してるじゃん、”長方形領域”。
あまりメジャーな言葉ではないが、あと半世紀もすれば勢力逆転も夢じゃないな。
本当は”矩形領域”なんだ・・・と一人でぶつぶつ言ってりゃいいさ。
181仕様書無しさん:2007/05/15(火) 19:04:24
そして、>>171は「本当は"長方形領域"なんだ…」と、0.26人でぶつぶつ言うわけだ。
182仕様書無しさん:2007/05/15(火) 19:07:38
領域いらないだろ・・・

矩形 に一致する日本語のページ 約 679,000 件中 1 - 10 件目 (0.03 秒)
長方形 に一致する日本語のページ 約 1,640,000 件中 1 - 10 件目 (0.03 秒)
183仕様書無しさん:2007/05/15(火) 19:16:54
>>170の、"この業界で"という条件に近づけるために"領域"という単語を付加してるのがわからんの?

単純な"長方形"って単語だったら小学生の算数のページだってヒットしちゃうじゃん。
184仕様書無しさん:2007/05/15(火) 19:35:46
ながしかく領域
185仕様書無しさん:2007/05/15(火) 19:36:27
四直角形
186仕様書無しさん:2007/05/15(火) 19:38:23
九十度四個系
187仕様書無しさん:2007/05/15(火) 19:39:53
まさに仕事の遂行ができない不採用の人
188仕様書無しさん:2007/05/15(火) 19:48:08
不採用形
189仕様書無しさん:2007/05/15(火) 19:57:56
終了形
190仕様書無しさん:2007/05/15(火) 20:43:00
>>182
矩形だの長方形だのなんて用語よりも
"RECT" のほうがずっと一般的だよ。
http://www.google.co.jp/search?hl=ja&q=RECT&lr=
191仕様書無しさん:2007/05/15(火) 20:51:00
数の暴力に屈するわけにはいかないのです。
192仕様書無しさん:2007/05/15(火) 20:55:20
なぜデータ構造ではなく問題での呼び方で盛り上がるんだw
193仕様書無しさん:2007/05/15(火) 21:06:46
コナミの矩形波クラブって知ってる?
194仕様書無しさん:2007/05/15(火) 23:33:06
195仕様書無しさん: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仕様書無しさん:2007/05/17(木) 04:19:47
100はいらないのか、そうなのか
198仕様書無しさん:2007/05/17(木) 06:22:07
>>196
仕様には3と5の倍数と書いてあって、
15の倍数とは書いてないぞ!

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

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


※これはイメージです
199仕様書無しさん:2007/05/17(木) 10:49:37
ループカウンタi やめれ
200仕様書無しさん:2007/05/17(木) 11:24:29
j
201仕様書無しさん:2007/05/17(木) 11:53:22
>>198
面白くて不快でスレ違い(愚痴スレへどうぞ)
202仕様書無しさん:2007/05/17(木) 14:26:49
ループカウンタiって駄目なの?
203仕様書無しさん:2007/05/17(木) 15:35:55
>>202
別に構わないだろ
昔に比べて i という一文字変数を使う理由は減ってるから
「1文字変数にする理由がない」と言う人もいる
204仕様書無しさん:2007/05/17(木) 16:42:40
実にくだらん理屈だな。
慣用的に意味が通じて簡潔に書けるんだから、別にいいじゃんと思うけどな。
205仕様書無しさん:2007/05/17(木) 17:08:10
すごい!これならiの代わりにぴったりだね!
206仕様書無しさん:2007/05/17(木) 17:08:14
iがだめならj,k,l,n,mと使った火にゃあ
207仕様書無しさん:2007/05/17(木) 17:36:07
i2,i3,i4
ii,iii,iiii
208仕様書無しさん: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仕様書無しさん:2007/05/17(木) 17:48:52
>>208
それ、面白いつもりで書いてるの?
それだけがちょっと知りたい。
210仕様書無しさん:2007/05/17(木) 17:59:23
>>209
別に
結局どんな手法を採用しようにも、
イタチゴッコな問題は結局イタチゴッコにしかならないというのが言いたかっただけ。
211仕様書無しさん:2007/05/17(木) 18:04:41
>>210 はああ???
212仕様書無しさん:2007/05/17(木) 18:05:24
関数オブジェクト?
213仕様書無しさん:2007/05/17(木) 20:09:00
クロージャ
214仕様書無しさん:2007/05/17(木) 20:38:06
ここに俺の亀頭落ちてなかった?
参ったな・・・昨日買い換えたばっかりなのに・・・・
215仕様書無しさん:2007/05/17(木) 20:40:31
ミニサイズのやつだろ?
さっきぬこが咥えて持ってったけど?
216仕様書無しさん:2007/05/17(木) 23:42:26
わらかすなぁ
217仕様書無しさん:2007/05/18(金) 00:42:58
>>197
なに、このバカ
>>199
なに、このアホ
218仕様書無しさん:2007/05/18(金) 18:12:06
他スレでもFizzBuzzやってるとこあるけど
LispとPythonの例は少し趣向が違うねぇ

Rubyは書き方自体は色々出てるみたいだが
他言語の真似に落ち着いてるものが多い
一つだけ特徴的なのはあったが、あれはちと面倒臭いなw
219仕様書無しさん:2007/05/18(金) 22:04:55
fizzbuzzでshort codingをやった人が、
2番目に短いコードを開始2分以内に発見したとか言ってるのを聞いて非常に驚いた。
流石に現在の最短コードにたどり着くには結構時間かかったらしいけど…
220仕様書無しさん:2007/05/18(金) 23:44:09
>現在の最短コード
これどんなコード?
221仕様書無しさん:2007/05/19(土) 00:16:26
222仕様書無しさん:2007/05/19(土) 00:29:51
そのURLのどこにコードがあるんじゃい
223仕様書無しさん:2007/05/19(土) 01:14:40
最短のコードだと、読む(理解する)のには時間かかりそうだ
224仕様書無しさん:2007/05/19(土) 08:58:58
225仕様書無しさん:2007/05/19(土) 08:59:49
無駄時間取り戻しポンプが切実に欲しい今日この頃
226仕様書無しさん:2007/05/19(土) 20:23:29
>>221
ゴルフ的には、Perlかと思ってたら、Bashが一番短いのかー。
しかし、対応言語が半端なく多くてすげえなw
227仕様書無しさん:2007/05/20(日) 16:10:58
Cで素数を求めるプログラムを作ってもらえばその人のセンスが結構分かるな
228仕様書無しさん:2007/05/20(日) 16:12:36
そんなのアルゴリズムを知ってるかどうかじゃん
センスは関係なくねーか
229仕様書無しさん:2007/05/20(日) 16:22:50
そういう知識もあわせてセンスという事にすりゃ
ポジティブシンキングっぽくていい気がする
230仕様書無しさん:2007/05/20(日) 16:23:34
氏ねばいいとおもうよ(AA略
231仕様書無しさん:2007/05/20(日) 16:23:57
まぁとりあえず書いてみりゃ分かる
素数はかなり奥が深いが付加軽減を考えると限がないのも確か
232仕様書無しさん:2007/05/20(日) 16:25:17
あー付加じゃなく負荷
233仕様書無しさん:2007/05/20(日) 16:26:10
プログラマとしての センス はわからない
プログラマとしての 常識のあるなし はわかる
234仕様書無しさん:2007/05/20(日) 16:31:37
漏れなら最初に

素数ってなんですか?

と質問する。
次に

サンプルソース下さい。

と要求し、
最後に

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

と言い訳する。
235仕様書無しさん:2007/05/20(日) 16:45:03
こういうのって本当は慣用句感覚で使えないと駄目なんだろうな…
普通の人間においては、これらのようなちょっとした知識の積み重ねがあって
初めて新しいアルゴリズムを考えることが出来るらしいし
236仕様書無しさん:2007/05/20(日) 16:57:10
アルゴリズムの発明は理学部に任せます
237仕様書無しさん:2007/05/20(日) 17:09:34
じゃあ素数じゃなくて完全数を見つけるプログラムにしようぜ
238仕様書無しさん:2007/05/20(日) 17:13:09
「こんなん誰でもできるだろ( ´,_ゝ`)」と思ってコード貼ったら
バグを指摘されまくって吊りたくなる問題がいいな
239仕様書無しさん:2007/05/20(日) 23:51:35
素数判定はアリだと思う。
試し割りだっけ?forで全ての数で割るようなアルゴリズム。
あれで作らせて100までの素数を出力しろ、って感じ。

経験者って言うならば、30分で出来なきゃお帰り願いたい。
240仕様書無しさん:2007/05/21(月) 03:46:24
>>239
そんなん誰でもできるだろ( ´,_ゝ`)
241仕様書無しさん:2007/05/21(月) 04:58:38
完全食よりターローだろ
242仕様書無しさん:2007/05/21(月) 05:13:15
>>237
5つ目が2時間半経っても出て来ねえw...
243仕様書無しさん:2007/05/23(水) 00:49:49
>>240
だが現実は30分でできない人続出www

うちの職場ならザラにいそうだな…
244仕様書無しさん:2007/05/23(水) 08:05:21
>243
30分以内に書ける人と丸1日(6時間として12倍)掛かる人。
給料がほとんどかわらないという現実を先に何とかして欲しいところ。
245仕様書無しさん:2007/05/23(水) 21:43:43
>>243
そこらの、ちょっとプログラミングかじっただけの奴ですら10分ぐらいでできると思うぞ。

マジでそんな職場あるんだな。
246仕様書無しさん:2007/05/23(水) 21:56:33
>>245
おいおい、そんな職場ばかりだぞ
なにせマトモに研修とか勉強でアルゴリズムとか、習ってない人が多数。
それが経験者を装って現場に投入され、経験年数だけが溜まる。
247仕様書無しさん:2007/05/23(水) 23:02:33
>246
じゃ日曜アマグラマやどこぞの刑務所出身の人達雇った方がマシなワケだ
248仕様書無しさん:2007/05/24(木) 00:06:08
経験年数が足りなくて就職できん
249仕様書無しさん:2007/05/24(木) 00:45:21
どっかにいろんな言語のまとめないかな?
バイト数じゃなくてコードが見れるとこ
250仕様書無しさん:2007/05/24(木) 06:23:07
>247
コードを書くという作業だけを考えればマシかもしれんな。
問題は単純作業とかやらせると飽きる人が多いとか、勝手に仕様変えちゃうとか、そっちの問題はあるかもしれんけど。

>248
腕にある程度の自信があるならば、ハッタリかませてOK。
登録派遣とか採用する時なんて、経歴書の1行で決めやがる。
現場に入ってしまえば嘘なんてばれるんだけどな。
経験年数を2年とかにしておけば、どっかは拾ってくれる。
そこで本当に年数を稼いでしまえば、後はどうとでもなるさ。
本当に優秀と認められれば、正社員にならないかって絶対に来る。
どっちにしろ、テメエの腕次第。
251仕様書無しさん:2007/05/24(木) 18:39:02
アセンブラのコードがないね
252仕様書無しさん:2007/05/24(木) 23:26:17
そうだね
253仕様書無しさん:2007/05/25(金) 00:30:35
「出力」のとこが問題かなぁ。
実質Brainf*ckの類はアセンブラに近かろう。
254仕様書無しさん: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仕様書無しさん: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仕様書無しさん:2007/05/26(土) 19:09:33
> 254
kの意味わからん・・・
break するならばいらんのでは?
257仕様書無しさん: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仕様書無しさん: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仕様書無しさん:2007/05/27(日) 07:39:33
>>256
break で抜けるのは j のループだけなんじゃないの?
260仕様書無しさん:2007/05/27(日) 14:43:37
勝手に最適化(最不適化)しないで最初は素直な実装を試みるって所を見てるんだよ!!
261仕様書無しさん: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仕様書無しさん:2007/05/30(水) 19:50:33
>>261
確かにそうなんだけど、sqrtって計算コスト軽いの?
263仕様書無しさん:2007/05/31(木) 11:53:50
意外と軽いけど間の変換が無駄なんだよな
264仕様書無しさん: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仕様書無しさん:2007/06/11(月) 22:15:56
>>264
もっと素直に
266仕様書無しさん:2007/06/11(月) 22:20:45
ぬるぽ!
267仕様書無しさん:2007/06/11(月) 22:57:29
>>265
彼女にそういったらふられた
268仕様書無しさん:2007/06/12(火) 12:19:51
>>265 的確な指摘ワロスw
269仕様書無しさん:2007/06/15(金) 01:16:13
すごいな>>1さんは・・・俺には1から100までの数を表示するプログラムなんて書けないよ。
ええっと、πは何億桁表示すれば許していただけますか?

整数とか自然数って書いて欲しいな。要件定義はしっかりしてもらわないと。
あ、1から100ってのが、2進数だという可能性もあるな。
270仕様書無しさん:2007/06/15(金) 06:30:14
>>269
そうやって屁理屈こねて、結局何のプログラムも書けないタイプか?w
271仕様書無しさん:2007/06/15(金) 07:39:52
>>270
いるよね、こういうのw
屁理屈こねるけどそれも間違っていることが多い。

ちなみに1から100が2進数とか言うのもツッコミどころ多すぎ。
001から100までならば2進表記の可能性もある、が正しい。
色々で直しておいで、ぼうや。
272仕様書無しさん:2007/06/15(金) 14:49:52
001から100までならば何進表記なんだか全然わからない
が正しいのでは?
273仕様書無しさん:2007/06/15(金) 16:21:16
0 から (900-800) まで

これでok
274仕様書無しさん:2007/06/15(金) 19:30:39
だからその900や800は何進法で表記されているのか?
275仕様書無しさん:2007/06/15(金) 19:30:59
ちょっとウンコしてくる
276仕様書無しさん:2007/06/16(土) 00:23:12
>274
とりあえずn進法(n>8)だけは確かだと思われ
アラビア数字で書いてあるから、いろはを使う48進法でもないなw
277仕様書無しさん:2007/06/17(日) 01:59:48
何の指定もないんだから、10進法に決まってんだろカスが
278仕様書無しさん:2007/06/17(日) 02:30:16
どうしてですか
279仕様書無しさん:2007/06/17(日) 09:55:38
「何の指定もないんだから、10進法」が通るんだったら素直に100って書きゃいいじゃん。
280仕様書無しさん:2007/06/17(日) 10:19:20
何も指定ないんだから10進数に決まっている、というのは問題かもしれない。
でも、何も指定ないんだから2進数の可能性が!というのはもっと問題だと思う。
281仕様書無しさん:2007/06/17(日) 18:44:13
えっと
>>269
が悪いでOK?w
282仕様書無しさん: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仕様書無しさん:2007/06/17(日) 20:29:06
>>283
ふつう。
というか、出題者はこのようなシンプルで正しい解答を期待している
285仕様書無しさん: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仕様書無しさん:2007/06/17(日) 22:34:34
剰余演算は各ループ2回づつじゃないと駄目だと思うの。
287仕様書無しさん:2007/06/17(日) 22:49:57
>>286
なんで?
283も285も1回で、必要な出力を得られるのでは?
288仕様書無しさん:2007/06/17(日) 23:59:22
>>285 テキトーすぎたよ カッコ閉じてないしインデント無茶苦茶w失格w
289仕様書無しさん:2007/06/19(火) 02:40:53
職業プログラマと情報サイエンスとでは、求める資質が違うだろ。

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

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

そういう意味で、>>1の筆者は、この問題の本質を取り違えている。
290仕様書無しさん:2007/06/19(火) 07:29:26
この程度の問題で情報サイエンス(笑)って本気かwww
学者になるやつのテストならば最低でもアルゴリズムだろwwwww
291仕様書無しさん:2007/06/19(火) 07:30:08
簡単なプログラムも書けない情報サイエンスの学者って許されるのか?

新しいパラダイムを生み出すにしても、基礎を知ってないと話にならんだろう。
何もないところから新しいものを生み出すなんてことができるのは、天才だけだ。
292仕様書無しさん:2007/06/19(火) 20:05:32
>>291
書くだけなら猿でも書けるだろ。
言われたとおりに正確に手っ取り早く書く、っていうのが職業プログラマのアプローチで、
コンパイラと相談しながら、最適解を追い求める、ってのがオタクのアプローチ。

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

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

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

「理論や知識は一杯知っているが、それを適用して実際に動くものは作れない
(プログラミングもできない)」ような頭でっかち秀才君が、学者になれるのかって話。
他の学問領域はともかく、情報サイエンスでは難しいと思うが。
294仕様書無しさん:2007/06/19(火) 21:02:35
>>292
>書くだけなら猿でも書けるだろ。
それが書けない、と何度も繰り返し書かれているわけだが。
>アプローチの仕方が異なるだろって話。
自己弁護乙。
295仕様書無しさん:2007/06/19(火) 21:20:28
>>292
書くことのできる猿を連れてくるか、猿以下らしい新人を書ける様に教育してくれないかな?w
296仕様書無しさん:2007/06/19(火) 22:08:49
Fizz-Buzz問題を目にするまでは
>猿でも書けるだろ
と自分も思いこんでいた。

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

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

プログラマに向いてないからといって人間の価値が否定されるわけではないのだし
猿まねしかできない人間がプログラマになろうとするのは
雇う側にとっても雇われる側にとっても不幸なことだ。
297仕様書無しさん:2007/06/19(火) 22:23:17
プログラムを紙に書き出すような人間には
プログラムを書いてほしくないなあ
298仕様書無しさん:2007/06/19(火) 22:41:40
>>297
昔は紙に書くのがあたりまえだった。
マシンの使用時間が貴重だったから、あらかじめ紙の上でプログラムを組んでこれまた紙の上で
デバッグして、完成させてから打ち込まないといけなかった。

大昔のことと言わないでくれ。
コンピュータ上のエディタでちまちました編集を繰り返してプログラムをようやく完成させるのでなく、
コンピュータを使わなくても頭の中で完成に近いコードを組める力があるのは、大事なことだと思うんだ。
299仕様書無しさん:2007/06/19(火) 22:48:08
>>298
あんたがコボラじゃないなら、話を聞いてやる
300仕様書無しさん:2007/06/19(火) 22:56:18
大昔 COBOL & FORTRAN
昔 C/C++ & Java
今 VB & C# & Perl & Ruby
のジジイじゃが、駄目かね?
301仕様書無しさん:2007/06/19(火) 23:16:04
概念図みたいなものは紙に書くし、
コードもラフスケッチ(でかくなりそうなコードの俯瞰みたいなの)は
やっぱり紙に書いたりすることもあるなぁ。
302仕様書無しさん:2007/06/19(火) 23:17:42
脳内でコーディングを済ませて後はそれを一気に打つだけ
みたいなスタイルでいけるほど慣れてないと駄目ってことですか?
303仕様書無しさん:2007/06/19(火) 23:26:53
>>300
Rubyを紙で、ってのがよくわからん

ブロックはどう表現するんだ?
304仕様書無しさん:2007/06/19(火) 23:28:15
仕事の話ならドキュメントの充実度次第
305仕様書無しさん:2007/06/19(火) 23:32:45
>>303
Ruby は別に紙に書いとらんのじゃが。
紙に書いとったのは大昔のことじゃな。
読み返して思ったが、お前さんがレスしようとしたのは>>301さんかね?
ワシも同じようなことやっとるよ。(概念図やロジックの見当をつけるためのラフなコードの書き出し)
若者と話を通じさせるのは難しいもんじゃて。ワシの頭も固くなった。ふぉふぉ。
306仕様書無しさん:2007/06/19(火) 23:44:59
>>302
この問題が出題されるような所は、そうでないと駄目だってことだろうね。
時間制限の中で必要なロジックを記述できることが大事だと思うので、
ある程度の誤記は免じてもらえるんじゃないかと思うけれども。
不合格の回答例を見たい。
307303:2007/06/19(火) 23:53:15
>>305
俺はエディタ上じゃなければモノを考えられんのだが、
直接コードを書かずに脳内で推敲したり紙に書いたりするメリットが
よくわからないので教えてほしい

>>303>>300==>>301と誤認しただけ
308仕様書無しさん:2007/06/20(水) 00:05:40
頭脳内に構築した論理構造体を写像して最終的にコードにするんだろ。
構築中の論理構造体に曖昧な点があったらコードに写像できないだろ。
その曖昧さを解消するために紙と言う中間媒体を使う人が多いというだけの話だと思うが。
309仕様書無しさん:2007/06/20(水) 00:14:02
>>307
頭のできがちがうようじゃね。
ワシは、エディタの画面だけだとコードやロジックを追い切れんことがあるので、
紙に全体像のスケッチや巨視的なコードを書き出して整理したい性分なのじゃが。
お前さんは、エディタの画面だけで、プログラムの全体像が見えなさるのかね?
リファクタリングが必要になった時は? ワシもこれがわからんので教えて欲しい。
310仕様書無しさん:2007/06/20(水) 00:30:37
>>309
コード書いてるときにプログラムの全体像はみえんが、
別にそれでもこまらん気がする。なんかこまるか?
リファクタリングについては、なにがわからんのかわからん。
311仕様書無しさん:2007/06/20(水) 00:37:09
>>310
例えば、同じようなロジックを別々の場所で再開発していた時に困る。
使用言語やエディタによるかもしれんが。
312仕様書無しさん:2007/06/20(水) 00:55:46
>>311
コードの抽象化を進める過程で、全く違うことをやるための
ロジックが結果的に似てしまうってのはよくある
313仕様書無しさん:2007/06/20(水) 03:46:42
コードがでかくなるとエディタで追えんくなってくるね
そーゆー時に紙とペン使うのは良いと思う
業務でも学問でもFizzBuzzくらいは
メモ帳でも書けてくれにゃ困るが
314仕様書無しさん:2007/06/20(水) 06:27:46
細かい文法上の問題とかはIDEが補完してくれるからどうでもいい。
問題はforとifの構造すら思いつかない猿以下のPG
315仕様書無しさん:2007/06/20(水) 06:36:13
IDEの補完に頼りすぎた猿以下のPGはこれから増えるんでないかなー
316仕様書無しさん:2007/06/20(水) 06:47:50
IDE使おうがよく打つ人間ならそのうち頼らなくても打てるようになるさ
補完機能って大抵馬鹿だし
317仕様書無しさん:2007/06/20(水) 07:09:33
インデント等の補完が大嫌いだ
オレは自分でやりたいんだよ・・・・なぜか。
318仕様書無しさん:2007/06/20(水) 08:51:18
多人数の場合、論外な書き方が出にくい利点はある。

俺はVBの自動スタイルが大嫌いだが
VBマの平均レベルを考えるとあれで良いんだろう。
むしろもっとキツくして良いくらい。
319仕様書無しさん:2007/06/20(水) 10:59:18
>>314
禿同
>問題はforとifの構造すら思いつかない猿以下のPG
さらなる問題は携帯の開発現場などを見渡してみても
実際そのレベルのPGが圧倒的に多く派遣されているってことだ。

PGをやるから猿以下って言われるだけで他の仕事なら
能力を活かせて人並みに評価される場もあるはずだから、
PGに向いてないのに無理してPGをやりたがるなよ
と言いたい。
320仕様書無しさん:2007/06/21(木) 10:03:13
>>319
そうだね。ホント、携帯の周りには多いよね。

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

char a[10];
long l;

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

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

って言ったら

l = (long)a;

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

いるだけでただのデスマーチがデスマーチVistaくらいになって大迷惑。
321仕様書無しさん:2007/06/21(木) 10:48:39
C言語って一度ポインタの壁超えたあと
全編に渡って「ポインタ的な理解」をしてやっと基礎終了でしょう
Fizz-Buzzはそのレベルの問題ですらないんだな・・・・
322仕様書無しさん:2007/06/21(木) 11:25:54
>>320
キャストの使い方は見たことがあるけどデータ型について
理解してないのに自称PGですか。
そういう自称PGって生産性ゼロならまだいいけど
切羽詰まった開発現場の雰囲気をさらに殺伐とさせることを含めて
全体の生産性を下げるから困ったモンです。

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

Fizz-Buzz問題関連トピックのおかげで
そういう自称PGがたくさんいるということに気がついたから
これからはPG適性のない人たちを開発プロジェクトに投入して
お互いに消耗することはしなくて済みそうだ。
323仕様書無しさん: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仕様書無しさん:2007/06/21(木) 23:05:57
char a[10];
long l;

l = a.toLong();

先輩、うまく行きません。
326仕様書無しさん:2007/06/22(金) 01:52:20
>>324
それ、>>320のと同一人物だろwww
327仕様書無しさん:2007/06/22(金) 02:18:41
VBじゃねぇつーのww

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

char a[10];
long l;

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

こうですか?わかりません
329仕様書無しさん:2007/06/22(金) 12:39:08
>>327
文系ならいいんだよ、こっちも適性があるかどうか見極める気になるし。

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

雇った後で気がついてもアトの祭りorz
330仕様書無しさん:2007/06/22(金) 13:08:09
2分じゃ無理だなー
割り算して求めればいいやと思いつつEclipse立ち上げながら2ch見てなんとなくメインクラス作って
変数何にしようか考えて
でこのあたりで2分は超える
331仕様書無しさん:2007/06/22(金) 15:17:00
大学でCの演習やってたら普通
atoiとかやるはずなんだけどなー。
332仕様書無しさん:2007/06/22(金) 16:10:56
atoiでいいのか?
333仕様書無しさん:2007/06/22(金) 16:21:10
常識的に考えてsnprintfだろ
334仕様書無しさん:2007/06/22(金) 16:34:01
これが現実
335仕様書無しさん:2007/06/22(金) 16:54:53
元問題の話か
まぁいいや、さぁいくか。
336仕様書無しさん:2007/06/22(金) 19:35:51
>>328
C++ じゃなくて C。
しかも boost なんてどこで採用されてんだよwwww
337仕様書無しさん:2007/06/22(金) 20:24:01
ここで、Fizz-Buzz的な問題を一問。
問:3000までの親和数を求めるプログラムを書け。

# 親和数とは
異なる2つの自然数の自分自身を除いた約数の和が、互いに他方と等しくなるような数。
例えば(220, 284)は、224の約数のうち224を除いたものの和は280となり、280の約数のうち280を除いたものの和は224になる。
338仕様書無しさん: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仕様書無しさん: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仕様書無しさん: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;
}
もうこれでいいよね
341338=340:2007/06/22(金) 22:22:28
>>339
こんなのが一発で思い浮かぶようになりたいぜ…orz
342仕様書無しさん: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仕様書無しさん:2007/06/23(土) 00:09:35
何の役にも立たないプログラムを書く奴のモチベーションがどこから来ているのかを誰か教えてくれ。
344仕様書無しさん:2007/06/23(土) 00:11:30
わからない人には教えてもわからない
345仕様書無しさん:2007/06/23(土) 00:20:17
そこに問題があったら解きたくなるのが人情ってもんだろ。違うか?
346仕様書無しさん:2007/06/23(土) 00:35:05
347仕様書無しさん:2007/06/23(土) 01:13:53
知恵遅れのためにCOBOLとかRPGでも書いてやれよw
348仕様書無しさん:2007/06/23(土) 08:49:56
検証する側から考えると改行の有無で評価が分かれそうだな
349343:2007/06/23(土) 09:01:24
>>345
解がないならね。
自分は解けると判っている問題を解くことの面倒の事を言っているんだけど
350仕様書無しさん:2007/06/23(土) 09:02:43
ボケ防止兼、腕試し
351仕様書無しさん:2007/06/23(土) 09:08:14
趣味でなにかやってる人にやる意味あるのかとか聞くのか。へぇ。
352仕様書無しさん:2007/06/23(土) 09:20:05
趣味プログラムは多少なりとも自分の役に立つものだろう
353仕様書無しさん:2007/06/23(土) 09:28:01
fiber使ってライフゲームとかそういう下らんものしか作ってないぜ…
354仕様書無しさん:2007/06/23(土) 10:25:17
数独やピクロスみたいなパズルって、壮大な時間の無駄だし、解くの面倒だよな。
しかもパズルとして与えられた以上解けるのはわかっているし、時間をかければ解けるのは確実だし。
355仕様書無しさん:2007/06/23(土) 10:33:25
大学って別にコンピュータの専門学校じゃないから
「Cの演習」なんてやらんところも多いよ。
別にPGを育てるのが大学じゃないから。
356355:2007/06/23(土) 10:34:50
ああ、もちろん「コンピュータ系の学部でも」という意味で。
357仕様書無しさん:2007/06/23(土) 10:39:27
受験の頃に苦戦した数学の問題をプログラムで解いて俺tueeee!するのが趣味です
358仕様書無しさん:2007/06/23(土) 14:17:20
高校で古文や漢文をやるのと同様に、
大学でCをやるのさ。
359仕様書無しさん:2007/06/23(土) 14:22:21
>>343
>>337を見たとき、おっ面白そうじゃんと思って
ついプログラムを書いてみたくなるのがプログラマ向きの人

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

360仕様書無しさん:2007/06/23(土) 14:37:20
つまんねー流れ
361仕様書無しさん:2007/06/23(土) 16:03:39
>>359
全く同意できないわけだが。
パズルの鮮やかな解法を見つける頭脳なんてのは大半のプログラマには全く要求されない。
趣味と仕事が一致すれば幸せかという問いにYesと答えられるほど暢気な業界でもないしな。
362仕様書無しさん:2007/06/23(土) 17:59:53
>>361
全く同意できないというのはよく分かる
だが、切羽詰まった開発の現場でなんとかバグをつぶしてプロジェクトを
終わらせているのはパズルの鮮やかな解法を見つける頭脳を持った
連中だという事実がある。
単なるデータ入力要員でしかない大半の人間にプログラマという
呼称を与えているのは人材派遣会社の権益確保のためとしか言いようがない。
363仕様書無しさん:2007/06/23(土) 19:12:00
362を読んで詭弁のガイドラインを思い出した
364仕様書無しさん:2007/06/23(土) 19:14:41
ttp://blogs.yahoo.co.jp/engineer_ryuseigun/23271561.html

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

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

そもそも、その簡単な問題を「解かなかった」のか「解けなかった」のか・・・
365仕様書無しさん:2007/06/23(土) 20:24:13
四の五の言わずに2分以内に解け
さもなくば不採用だ
366仕様書無しさん:2007/06/23(土) 20:39:31
>>365
それにつきる
367仕様書無しさん:2007/06/23(土) 20:50:05
>パズルの鮮やかな解法を見つける頭脳なんてのは大半のプログラマには全く要求されない。
されてるけど気づいてないだけなんじゃないの?
368仕様書無しさん:2007/06/23(土) 20:54:52
>>366
実は担当者と交渉して2分を2週間に伸ばすことが出来るかどうかが真のテストだったのさ
そこを真面目に2分でやるような奴は簡単に使い潰せそうということで採用
369仕様書無しさん:2007/06/23(土) 21:03:28
fizz-buzzみたいな問題では無いだろうが
もっと難しい問題出されてそのオチはありそうで怖いなw
370仕様書無しさん:2007/06/23(土) 23:11:22
そういうテストは教育の中ではやったな。
難しい課題を出して「わかりません」と言える奴は意外と少ない。
言える奴は意外と出来る奴で、出来ない奴は「わからない」と言えない。
言ったとしても何がわからないのかを言えないんだわ。
371仕様書無しさん: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仕様書無しさん:2007/06/24(日) 21:59:49
http://oku.edu.mie-u.ac.jp/~okumura/blog/node/1531
> FizzBuzz問題をわが情報教育課程3年生の優秀な学生42人に制限時間付きでC言語で解かせてみた。

最速の学生でも、5,6分だってよ。
そりゃそうだな。
373仕様書無しさん:2007/06/24(日) 22:54:55
>>372
コンパイルとか、そういうのは時間に入れないんじゃないのかな。
基本的なアルゴリズムを思いつけるかどうか。

実際、FizzBuzz解けないような奴が周りに居るとは思えないが、
最初に思いつくアルゴリズムが最適なものである自信はプロであるオレにも無い。
374仕様書無しさん:2007/06/24(日) 23:29:39
>370
それなんてコバヤシマル・シナリオ?
375仕様書無しさん:2007/06/25(月) 01:07:53
>>373
「最適なアルゴリズム」は学者の仕事さ
376仕様書無しさん:2007/06/25(月) 04:49:16
最速の学生が、結果的に妥協だったのか否かで優秀かどうか評価が分かれる。
377仕様書無しさん:2007/06/25(月) 09:15:38
問題として出た以上
多少凝らなければいけないのかどうか考えたりすると思うのですけれど。
2分でハイ出来ましたじゃ通らないと考えそうだし。

大学の情報系だったら自分がやりたくて昔からやってるバリバリなの居て当然だしね
378仕様書無しさん:2007/06/25(月) 09:33:38
この問題を解かせる時は
「2分で解け」と予め制限時間書いておくのも良いかもね
要は基本的なことがとりあえず書けるか否かを見たいわけだから
2分で書いたテキトーコードでもスキルは出る
379仕様書無しさん:2007/06/25(月) 13:29:04
蒸し返すようだが
動作テスト禁止ってのが基地外
380仕様書無しさん:2007/06/25(月) 16:54:03
なんか、皆Fizz-Buzz問題を時間競争と思っているようだが
10分以上かけても自力でプログラムが書ける人なら
PGとして伸びる可能性があるから採用出来る。
だがサンプルソースが無くインターネットで検索できない状況で
Fizz-Buzz問題を与えたら呆然としてしまう自称プログラマが
実際にゴロゴロしてるのが現状。
そういう奴に限って>>361のようなことを堂々と言って
うまく立ち回る術を心得ているので誑かされてしまう
Fizz-Buzz問題は出来る奴のレベルを判定するためではなく
PGに全然向かない奴を見つけるために価値がある。
381仕様書無しさん:2007/06/25(月) 17:02:44
時間競争っていう意味でも充分でしょ。

スグ出来るやつがいて、そうでないやつがいる。
出来ないやつのうち、黙ってるヤツも、
何かをいうやつも、残念ながらハズレ。
382仕様書無しさん:2007/06/25(月) 17:03:56
>>379
残念ですがお帰りください。
383仕様書無しさん:2007/06/25(月) 17:11:27
数分で紙に書くのはきついかも。。
数分でエディタに打ち込むならなんとか
384仕様書無しさん:2007/06/25(月) 17:20:35
しかし重要な場面でこうやって試されたら
1) アヒャって性能低下(元々低いのがさらに)
2) APIリファレンス無しでは心もとない
3) いいトコ見せようとして欲張って自爆
って感じが。くわばらくわばら。
385仕様書無しさん:2007/06/25(月) 17:28:04
>>383
俺も。
「他人に読める字で書け」となると、5分もらわないと。
386仕様書無しさん:2007/06/25(月) 20:42:08
fizz-buzzはいけるだろうけど友愛数とかやられたしぼん確定
387仕様書無しさん:2007/06/25(月) 21:56:42
>>386
まず問題の意味を理解できない俺チュンリー
388仕様書無しさん:2007/06/25(月) 23:31:03
無難にフィボナッチ数列で
389仕様書無しさん: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仕様書無しさん:2007/06/25(月) 23:53:09
#define fib(n) (((n)==1||(n)==2)?1:fib((n)-1)+fib((n)-2))
391仕様書無しさん: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仕様書無しさん:2007/06/26(火) 00:50:05
sub fib{
 my ($n) = @_;
 return (((1+sqrt(5))/2)**$n - ((1-sqrt(5))/2)**$n)/sqrt(5);
}
393仕様書無しさん:2007/06/26(火) 01:19:33
>>390
Cのプリプロセッサって再帰的な展開できるんだっけ?
394仕様書無しさん: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仕様書無しさん: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仕様書無しさん:2007/06/26(火) 02:35:19
検索しないと解けないような問題でインターネット検索ありで問題解かせるのとかどうよ?
実際探し物のテクニックって重要だと思うし
397仕様書無しさん:2007/06/26(火) 10:58:34
人力検索使われそうだな
398仕様書無しさん:2007/06/26(火) 12:33:51
>>397
ワロタ
399仕様書無しさん:2007/06/26(火) 12:43:40
>>395
できればいっしょに仕事したくない
400仕様書無しさん: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仕様書無しさん:2007/06/26(火) 14:24:14
まったく同じ計算を平気で繰り返す奴ってなんなの?
402仕様書無しさん:2007/06/26(火) 14:53:36
fibonacci数列をO(N)やO(N^2)でしか書けない
プログラマーはダメプログラマーだな。
403仕様書無しさん:2007/06/26(火) 15:19:58
http://d.hatena.ne.jp/kagamihoge/20070525/1180094454

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

泣けるぜ

404仕様書無しさん:2007/06/26(火) 15:51:23
O(N)で駄目、かつ条件がCの標準ライブラリだけ
ってことはその場で行列演算ライブラリを作れってことか
何度もそういうの造って覚えてる人じゃないと無理っぽい
405仕様書無しさん:2007/06/26(火) 16:10:58
行列計算しなくても>>391みたくすればO(log n)に落ちるんでない?
>>392の方法ならO(1)だし
>>391>>392のコードはいいセンスしてるな
406仕様書無しさん:2007/06/26(火) 16:49:56
累乗がO(1)かどうかはさておき
何でこうなるかすら理解できないのは俺が専門外だからか
いや、専門だったとしても理解できるかどうかはわからない

とりあえず>>391>>392の言語が何かだけはどうしても知りたいからマジで教えてください
407仕様書無しさん:2007/06/26(火) 16:56:28
>累乗がO(1)かどうかはさておき
おくなよw
408仕様書無しさん:2007/06/26(火) 16:59:24
O(N^2)で書く方法が思いつかない俺はダメですか
409仕様書無しさん:2007/06/26(火) 17:06:01
391 が lisp か
392 が perl か
400 が ruby か
410仕様書無しさん:2007/06/26(火) 17:22:31
>>391
scheme
>>392
perl
でおk?

411仕様書無しさん:2007/06/26(火) 17:50:43
>>406みたいなやつはいらん知識ばっかり持っててつかえねーんだよ
412411:2007/06/26(火) 17:53:15
スマソ>>392だった。釣ってくる。

うちにも数学マニアみたいなやつがいて優秀で知識も豊富なんだろうけど、
一般常識がまったくできん。こいつ誰かもらってくれ。
413仕様書無しさん:2007/06/26(火) 18:01:07
ググるまでフィボナッチ数列と黄金比の関係を知らなかった ('A`)
414仕様書無しさん:2007/06/26(火) 18:08:04
なんだよこの流れ
ここはム板じゃなくてマ板だ
415仕様書無しさん:2007/06/26(火) 18:15:16
391 が ガリ勉委員長タイプ
392 が 変態キモオタタイプ
400 が 爽やかイケメンタイプ
416仕様書無しさん:2007/06/26(火) 19:19:25
Cで10000番まで試したら>>392のアルゴリズムの速度は>>395の2倍程度だった
やっぱ累乗とかのコスト関係なくかなり速いようです
やっぱ見た目からしてヤバイと思ったけどその通りだったんだなぁ
417仕様書無しさん:2007/06/26(火) 20:04:35
>>416
>Cで10000番まで試したら
まず n = 71 で精度が足りなくなって
次に n = 1475 でオーバーフローしますね。
418仕様書無しさん:2007/06/26(火) 20:16:14
関数が返す値は使ってないからオーバーフローしようが何しようが結果は変わらないよ
演算コストを計るだけだから問題ないかなと思ったんだけどそうでもないのかゐ?
70ぐらいまでだと50ぐらいのあたりで殆ど速度が同じになるのが面白い
419仕様書無しさん: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仕様書無しさん: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仕様書無しさん:2007/06/26(火) 21:14:45
累乗使ってるのは間違った答え出してきそう
422仕様書無しさん:2007/06/27(水) 09:49:37
>>419
>391考えたやつ頭いいな。
wikipedia くらい読んだら?
423422:2007/06/27(水) 09:50:01
間違えました。
もういいです。
424仕様書無しさん:2007/06/27(水) 13:20:42
>>1
初心者にやらせる場合
まず1-100のプリントを書かせて
後付でFizzBuzz入れるほうがいいかもな
425仕様書無しさん:2007/06/27(水) 14:00:29
>>424
いやいや、「ちゃんとしてないプログラマ」を教育しようって話じゃないから。
426仕様書無しさん:2007/06/27(水) 19:20:46
いわばFizz-Buzzのふるいだな
デンジャラスな追加要員を排除するべく
427仕様書無しさん: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仕様書無しさん:2007/06/27(水) 20:26:02
↓コボラ登場
429仕様書無しさん:2007/06/27(水) 22:00:26
やっぱ整数論の本とかアルゴリズム辞典見ながら
いろんな言語のいろんな作法でプログラム書いて遊んだりしとしか無理ってことなんですか?
430仕様書無しさん:2007/06/27(水) 22:17:21
ていうか、ひねりも無く足していくだけのフィボナッチ数列だったら
入門者用の解説とかでよく見るし、

友愛数やら素数やらfizzbuzzぐらいのアルゴリズムならすぐに思いつくっしょ。
少しプログラミングかじったらできるレベル。
431仕様書無しさん:2007/06/27(水) 22:20:43
俺の場合は解いた事があるから解けるだけ
もしそれらの問題を解いた事無かったら恐らく解けないだろう…orz
なんか解いた事の無い問題でもすらすら解ける人が羨ましい
432仕様書無しさん:2007/06/27(水) 22:30:31
とはいえqsortのアルゴリズムを単独で発見できる人は滅多にいない
433仕様書無しさん:2007/06/27(水) 23:53:14
あんなんできるか
434仕様書無しさん:2007/06/28(木) 01:49:38
分割統治の考え方やオーダーを落とす方法を知ってて、
既存のアルゴリズムに適用できればいいんだけどねぇ。
暗記ばっかで試験潜り抜けてるバカ学生には無理だよなぁ。
435仕様書無しさん:2007/06/28(木) 02:09:33
そういう基本的な問題解決に対する考え方を勉強したい
多分なんて事無い簡単な方法なんだろうけど、多分それを使いこなす事が出来る人は限られてくるだろうな
ま、俺は暗記すらしないバカ学生だけど
436仕様書無しさん:2007/06/28(木) 02:09:39
434は自力でqsortを導き出したようです。
437仕様書無しさん:2007/06/28(木) 02:42:27
FFTは思い付いたけどqsortは無理だな
438仕様書無しさん:2007/06/28(木) 09:14:26
バカスw
439仕様書無しさん:2007/06/28(木) 11:35:39
>436
>434の話から、なぜqsortのアルゴリズムを自力で見つけたと帰結されるのか・・・
440仕様書無しさん:2007/06/28(木) 11:44:35
俺にはshell sortが精一杯だった。
441仕様書無しさん:2007/06/28(木) 11:48:59
バブルソートは俺にまかせとけw
442仕様書無しさん:2007/06/28(木) 11:50:18
俺が自力で見つけたソートはバケツソートだった
443仕様書無しさん:2007/06/28(木) 11:52:39
つか、qsort のアルゴリズムが何かなんて実装依存なんだが。
444仕様書無しさん:2007/06/28(木) 11:54:27
qsort=クイックソートなのでは?
445仕様書無しさん:2007/06/28(木) 20:18:49
こないだソリティア自作してたんでそこから一つ考えてみた。
2分とは言わないが、ちょっと考えれば出来るよな?



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

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

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

例:
ダイヤのQ

これをシャッフルして52枚全て出力する。
446仕様書無しさん:2007/06/28(木) 21:01:14
>>445
新人にやらせたことあるけど、シャッフルは意外とできないぞ
スワップの繰返しで簡単にできそうなもんだが、アルゴリズムを勉強したことのないって人が意外に多い
447仕様書無しさん: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仕様書無しさん:2007/06/28(木) 22:29:55
昔強引な方法でシャッフルしたことがある。
配列に前の方から0-51のランダムな数字を詰め込む時、詰め込む配列の前に詰め込もうとする数字と同じものが無いか確認して、
そいつを52回繰り返すだけ。

最後の方はひたすら既出チェックに引っかかって失敗しているはずなのに、
トランプのシャッフル程度だと案外実用的な速度で動いていた不思議。
449仕様書無しさん:2007/06/28(木) 22:40:21
>>448
ついこの間、研修でそれやったわ
アルゴリズムで配列のスワップやっただろ?と講師に言われて凹んだw
450仕様書無しさん: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仕様書無しさん:2007/06/28(木) 23:34:44
むらが出来ないようにきっちり書くのは案外難しい。
というかその知識があるかないかってだけなんだが。
452仕様書無しさん:2007/06/29(金) 01:09:01
453仕様書無しさん: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仕様書無しさん: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仕様書無しさん: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仕様書無しさん: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仕様書無しさん:2007/06/29(金) 12:09:14
いろんなアプローチがあって楽しいね。
458仕様書無しさん:2007/06/29(金) 12:13:13
俺もRubyは使うが、sort_by{rand} は知らんかった
そんな簡単に書けたのかよ…
459仕様書無しさん:2007/06/29(金) 12:23:37
そういや関数型言語のリストのシャッフルってどうやるんだ?
vectorにして混ぜる以外、パッと思いつかないんだが…
460仕様書無しさん:2007/06/29(金) 13:53:43
>>456
みじかっ
ゴルファーだな。
461仕様書無しさん:2007/06/29(金) 19:58:34
Rubyってすごいんだな
仕様と同じくらいの分量で実装が書けてしまうのか
462仕様書無しさん:2007/06/29(金) 21:38:34
それに引き換えC++は・・・
463仕様書無しさん:2007/06/29(金) 23:35:36
>456 のコードはまだ短くなるからゴルファーではないな
464仕様書無しさん:2007/06/30(土) 01:03:35
>>463
トップゴルファーだけがゴルファーではない
4651/3: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;
};
4662/3: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;
};
4673/3: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仕様書無しさん:2007/06/30(土) 15:04:57
// 素朴に書いたつもりが、三時間かかった( ´ー`)y─┛~~ みんなならどうする?
469仕様書無しさん:2007/06/30(土) 15:24:51
やっぱC++はこういうこじんまりとしたプログラミングには向いてないんだろうな
470仕様書無しさん:2007/06/30(土) 15:49:30
>>452ですが、>>455-456と同じような方法でシャッフルしてみました。
その他色々、セキュアなコードにしてみた。
Javaの勉強になりました。

http://sourcepost.sytes.net/sourcepost/sourceview.aspx?source_id=29537
471仕様書無しさん:2007/06/30(土) 16:04:42
この問題のおかげでRubyに興味が出てきた
472仕様書無しさん: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仕様書無しさん: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仕様書無しさん:2007/06/30(土) 18:14:52
>>473
つ Collections.shuffler(cards);
475仕様書無しさん:2007/06/30(土) 18:34:37
476仕様書無しさん: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仕様書無しさん:2007/06/30(土) 18:47:04
>476
Pythonからインデント抜いたら激しく解り難いぞ…
空白を&nbsp;か全角空白に置換して投稿しる
478仕様書無しさん: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仕様書無しさん:2007/06/30(土) 20:56:09
>>472-473
>>470ですが、なるほど、勉強になります。
ところで、>>455さんですよね?
480仕様書無しさん:2007/07/01(日) 00:22:44
>>470ですが、>>472-473を参考にさらに作り直しました。

http://sourcepost.sytes.net/sourcepost/sourceview.aspx?source_id=29540
481仕様書無しさん: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仕様書無しさん:2007/07/01(日) 13:43:45
俺「一日ください」

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

・enum
・拡張for文
・generic
・可変長引数
486仕様書無しさん: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仕様書無しさん:2007/07/01(日) 18:26:11
>484
Rubyの puts は引数に配列突っ込むと
要素ごとに改行するから join("\n") は要らないね

「勝手に改行されるの気持ち悪い」って意見も
Rubyスレで何度か出たことあるけどw
488仕様書無しさん:2007/07/01(日) 18:37:10
>>487 おわー! 勉強になりました。ありがとうございます。
489仕様書無しさん:2007/07/04(水) 14:23:26
>>456, >>460
>>456をゴルファーとか言うやつは、ゴルフやったことないやつ。

つか、Rubyをやってれば、sort_by{rand}なんて小技の一つとして知ってるだろw
490仕様書無しさん:2007/07/04(水) 14:31:14
約:おれのほうがすごい、おれをほめて。
491仕様書無しさん:2007/07/04(水) 20:54:38
訳 だろ
492仕様書無しさん:2007/07/04(水) 21:04:56
疫 だろ?
493仕様書無しさん: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仕様書無しさん:2007/07/04(水) 22:16:41
>>494

else if ((i % 15) == 0) これを最初に調べたら、
二箇所の !((i % 15) == 0)) が不要になるよね。
497こんなの:2007/07/04(水) 22:20:21
まぁ、いいじゃん。
498仕様書無しさん: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仕様書無しさん:2007/07/04(水) 22:32:47
>>502-503 増えないだろw
505仕様書無しさん: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仕様書無しさん: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; }
};
507506続き: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( );
}
508506:2007/07/04(水) 22:53:16
3年ぶりのC++なので15分かかった。鬱。
509仕様書無しさん: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仕様書無しさん:2007/07/04(水) 23:06:25
ネタでしょw
512sage:2007/07/04(水) 23:06:42
よし出来た。

#include "fizzbuzz.h"

void main(){
  fizzbuzz();
}
513仕様書無しさん: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仕様書無しさん:2007/07/04(水) 23:20:39
>>514 こういうのが一番素直で好感が持てる。
516514:2007/07/04(水) 23:21:31
手元にコンパイラが無いのですが合ってますか?

論理的にはこんな感じで良いような気がしますが。
517仕様書無しさん:2007/07/04(水) 23:22:20
>>515
ありがとうございます。
518仕様書無しさん:2007/07/04(水) 23:25:35
残念ながら int main()なのにreturnが無いよ
519仕様書無しさん:2007/07/04(水) 23:27:01
おもいっきり違うだろ。

>>506
みたいなのとは一緒に仕事したくねーな。
わざとソースをめんどくさくするタイプ
520仕様書無しさん:2007/07/04(水) 23:28:49
>>518 リターンなくてもコンパイル通ったような…。
>>519 ほんとだ…肝心のところが全部逆にw
521仕様書無しさん:2007/07/04(水) 23:30:47
ぁぅ。

×ほんとだ…肝心のところが全部逆にw
○==0で見ないといけない。
522仕様書無しさん:2007/07/04(水) 23:32:02
いや…混乱したのでもう黙りますw
523仕様書無しさん: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仕様書無しさん:2007/07/05(木) 01:52:07
↑手元にコンパイラないから、テストしてないけどこんなもんかな。
コンパイルは通らないハズ。
CONSOLEの宣言とか省略してるから。
全部書くと1レスに収まらねぇだろうしな〜w
525仕様書無しさん:2007/07/05(木) 08:34:29
なでしことかで作ったらどんな感じになる?
526仕様書無しさん:2007/07/05(木) 13:57:54
>>524
エンヴァイロメントディビジョン、プロシジャーディビジョン
なつかしスwww
527仕様書無しさん:2007/07/06(金) 00:41:01
だれかぴゅう太BASICでタノム
528仕様書無しさん: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
529528:2007/07/06(金) 12:07:56
ミスった、正しくは
( CALL :CASE %%I )
と %%I が入る
530仕様書無しさん: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仕様書無しさん:2007/07/06(金) 20:07:30
ここで毛色を変えて一問。

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

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

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

上の例は間違ってた。
正確には、こう
========== FizzBuzz ==========
535仕様書無しさん:2007/07/06(金) 22:05:06
>>518
main()のリターンなんて省略でしょ。
警告出すコンパイラがウンコ。
536仕様書無しさん:2007/07/06(金) 22:17:30
>>535
ソフト屋としてありえへん姿勢やわ
537仕様書無しさん:2007/07/06(金) 22:28:48
>>536
コード量が多かったら丁寧ってわけじゃないぞ。
538仕様書無しさん: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仕様書無しさん:2007/07/06(金) 23:02:36
インデントしてくれ
540仕様書無しさん:2007/07/06(金) 23:04:04
>>537
コイツが何のことを言ってるのか誰か解り易く説明してくれや
541仕様書無しさん:2007/07/06(金) 23:11:20
入力された文字数が30以上なら表示じゃなくて?28なら空白のみ、29なら右に空白って事でいいのかな?
542仕様書無しさん:2007/07/06(金) 23:16:01
>>541
そう。
実質的に入力された文字が30文字ならそのまま表示。
543仕様書無しさん: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仕様書無しさん:2007/07/07(土) 00:26:44
>>543
仕事のコードじゃないならいいよね。省略できるものはどんどん省略すれば。
ゴルフもその思想だし。

仕事で書いたコードでそんなこと言い張る奴が居たら速攻プロジェクトはずされるけど。
548仕様書無しさん:2007/07/07(土) 00:33:08
544がよからぬ事を企んでます!
549仕様書無しさん: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仕様書無しさん:2007/07/07(土) 00:51:06
よし!ちょっとperlっぽいけどrubyバージョンも出来たぞ!!

ruby -pe '$_ = "============ test ===============¥n" if $_.length <= 30'
551ちょちょ:2007/07/07(土) 00:56:36
意外とこのすれ面白いなw

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

ruby -pe 'chomp;$_ = ((" " + $_ + "").center(30, "=") + "¥n").strip + "¥n"'
553仕様書無しさん:2007/07/07(土) 01:03:52
(" " + $_ + "") -> (" " + $_ + " ")
だったw
だみだこりゃ
554仕様書無しさん:2007/07/07(土) 02:06:25
>>552
centerなんて初めてしったw
よく見つけたなw
555仕様書無しさん:2007/07/07(土) 02:13:49
>>554
つか誰だよこんなメソッド追加した奴w
556552:2007/07/07(土) 02:25:34
28文字29文字の時がダメだったw
>= 30とか比較しない方法無いかな
557552:2007/07/07(土) 02:38:14
姑息な手だけどこれでなんとかいけるか
ruby -pe 'chomp;$_ = ((" " + $_ + " ").center(32, "=").slice(1..-2)).strip + "¥n"'
558仕様書無しさん:2007/07/07(土) 02:51:53
stripいらなかった
間抜け過ぎるorz
559仕様書無しさん: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仕様書無しさん:2007/07/07(土) 09:05:30
>>221
コボルすげぇなww
561仕様書無しさん:2007/07/07(土) 09:21:17
新人面接で
1.Fizz-Buzz問題って知ってる?
2.Fizz-Buzz問題解かせる
3.>>143の問題(>>243の解法でおk)
4.3の問題でなんか変なとこなかった?

ってやると、30分程度でかなり多くのことがわかるな。
562仕様書無しさん: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仕様書無しさん:2007/07/07(土) 10:38:01
>>562
なでしこを連想した。
564仕様書無しさん: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仕様書無しさん:2007/07/07(土) 11:11:52
その辺はhackじゃなくてcrackをしてるらしいw
566仕様書無しさん:2007/07/07(土) 12:10:29
>>564
流石の記号、英数率
567仕様書無しさん:2007/07/07(土) 17:24:19
>>559
おお。サンクス。修正版。

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_left)
    print "="*length_left,char,"="*length_right
568仕様書無しさん:2007/07/07(土) 17:32:45
>>562
キメェw
569仕様書無しさん:2007/07/08(日) 06:26:47
<pre>
a$="=============================="
input b$
c=len(b$)
if c<30 then
if c<>0 mid$(a$,16-int((c+3)/2))=" "+b$+" "
print a$
else
print b$
end if
</pre>
570仕様書無しさん:2007/07/09(月) 12:47:30
>>547
なに原理主義かは知らないが、規格に準拠した処理系では
return なしで終わる main 関数が 0 を戻す事を
知らないわけじゃないよね?(確認)
571仕様書無しさん:2007/07/09(月) 13:23:09
お題を見つけてきたYO

RUBYの宿題教えてください。
http://pc11.2ch.net/test/read.cgi/tech/1106572657/645

645 名前:デフォルトの名無しさん[sage] 投稿日:2007/07/08(日) 19:59:06
パスカルの3角形を印字するプログラムを
作りたいのだが以下のプログラムで作るにはどうしたらいいのでしょうか?
教えてください。
572仕様書無しさん:2007/07/09(月) 16:05:12
課題は自力でやれ
573仕様書無しさん:2007/07/09(月) 17:44:11
>>570
そんなの偉そうに述べてる暇で return 書け。
574仕様書無しさん:2007/07/09(月) 18:27:22
>>573
知らなかったと素直に言えばいいのに♥
575仕様書無しさん:2007/07/09(月) 19:41:20
>>570
547じゃないがそんなこと知らんかった。

ということで裏を取ってみようとググってみた。
http://www.bohyoh.com/CandCPP/FAQ/FAQ00016.html
などという解説があったが規格に準拠というのは
処理系がC99でmain関数の返却型がintの互換型である場合
というのを一般化しているなんて落ちはないよね。

いずれにしろそんな重箱の隅をつつくような規格を処理系が
保証しているかどうか気にするより、素直にreturn 0を書くよ。
576仕様書無しさん:2007/07/09(月) 19:44:14
>>575
そもそも、mainのreturn 0はなんの役に立つの?
アナタの考えを聞きたい。
577仕様書無しさん:2007/07/09(月) 19:47:50
>>576
シェルスクリプトを書いた経験は?
578仕様書無しさん:2007/07/09(月) 19:52:44
>>576
きちんとしたアプリケーションなら終了ステータスを示すのに値を返すけど..

returnを書かない場合にmain()が0を返すことを期待する
くらいならっていう前置きを抜かしていただけなんだが
その突っ込みは>>570による話のすり替え?
579仕様書無しさん:2007/07/09(月) 19:58:15
>>577 bash csh ならあります。
あ、|| とかでつかうってことか。

>>578
> きちんとしたアプリケーションなら終了ステータスを示すのに値を返すけど..
>
> returnを書かない場合にmain()が0を返すことを期待する
> くらいならっていう前置きを抜かしていただけなんだが

なんか知りませんが、どうかそう構えずに。

> その突っ込みは>>570による話のすり替え?

すくなくとも自分はその人とは関係がありません。
mainのreturn 0に漠然とした疑問を持ち続けていただけの人間です。
580仕様書無しさん:2007/07/09(月) 20:04:33
>>576
自分の作ったプログラムと他のプログラムを繋げた経験は?
常に他のモジュール、環境を意識してコード組んでるかい?
君がソフト屋だとしたら、終了ステータスも伝えず独りよがりに落ちていくソフトを使いたいと思うかい?

コーディングがオナニーの同義語になってやしないかい?
581仕様書無しさん:2007/07/09(月) 20:10:57
>>580
ひょっとして>>578さんですか?

> 自分の作ったプログラムと他のプログラムを繋げた経験は?
繋げるとは? シェルでのパイプってこと?

> 常に他のモジュール、環境を意識してコード組んでるかい?
> 君がソフト屋だとしたら、終了ステータスも伝えず独りよがりに落ちていくソフトを使いたいと思うかい?
そういう言い方じゃなくてね、アナタの考え方だけを聞きたいだけ。

> コーディングがオナニーの同義語になってやしないかい?
なんのこっちゃいな。
あのね、主張に反対してるんじゃない。聞いてるだけだよ?
582仕様書無しさん:2007/07/09(月) 20:15:35
>>581
まちがえた。
×>>578
>>575
583仕様書無しさん:2007/07/09(月) 20:19:53
嫌な流れだ、もっと穏便に、寛容にいこう。
そこで一問。

入力された文字列の順序を入れ換えたものを全て出力せよ。
ただし、同じものは二度出力しないこと。

例えば、"122"と入力されたなら"122","212","221"の3つを出力する
584仕様書無しさん:2007/07/09(月) 23:03:43
何となくProlog向きの気がする問題だな
585仕様書無しさん:2007/07/10(火) 01:15:39
これが限界。
もっといい方法あったら教えてくれ。

$cache = {}
def anagram(str)
  if $cache[str]
    return $cache[str]
  end
  if str.length == 1
    ret = [str]
  else
    ret = []
    $chars.each do |c|
      i = str.index(c)
      if i
        c = str[i].chr
        rest = str[0,i] + str[i+1,str.length - i -1]
        ret += anagram(rest).map {|a| c + a} 
      end
    end
  end
  $cache[str] = ret
  return ret
end
while line = gets.chomp
  line = line.split(//).sort.join
  $chars = line.squeeze.split(//)
  puts anagram(line).join(", ")
end
586仕様書無しさん:2007/07/10(火) 01:48:48
>>583
まともなの書こうと思ったら30分以上かかんね?
587仕様書無しさん:2007/07/10(火) 01:58:43
ASCIIの印字文字であることを仮定していいですか
588仕様書無しさん:2007/07/10(火) 02:31:53
public class Test {
  public static void main(String[] args) {
    String input = args[0];
    int[] count = new int[10];
    for (int i = 0; i < input.length(); i++) {
      count[input.charAt(i) - '0']++;
    }
    func("", count, input.length());
  }
  static void func(String s, int[] count, final int length) {
    if (s.length() == length) {
      System.out.println(s);
      return;
    }
    for (int i = 0; i < 10; i++) {
      if (count[i] > 0) {
        count[i]--;
        func(s + i, count, length);
        count[i]++;
      }
    }
  }
}
589仕様書無しさん:2007/07/10(火) 02:37:42
JAVA厨死ね
590仕様書無しさん:2007/07/10(火) 05:23:45
何か気に障ったなら謝る
591仕様書無しさん:2007/07/10(火) 08:22:21
こんなん5分で出来るね
#include<string>
#include<iostream>
using namespace std;
int main(){
        string line;
        getline(cin,line);
        sort(line.begin(),line.end());
        do cout<<line<<endl;
        while(next_permutation(line.begin(),line.end()));
}
592仕様書無しさん:2007/07/10(火) 09:14:54
>>588
s+iの意味がわからない
593仕様書無しさん:2007/07/10(火) 10:28:28
元のFizz-Buzz問題のレベルだと、↓こんなもんでいいんだと思うが、
さすがにこれはこの板じゃ…と思いつつも書いてみる。

Q1. 以下の仕様で数当てゲームプログラムを書け。

a) 4桁のランダムな正の整数値を正解として用意する。1000の位はゼロにしないこと。
b) 解答者の入力を(数値として)受け付け、
c) 正解と一致していれば「正解」と表示して終了。
d) 正解で無い場合は、入力と正解との大小関係を表示して b) に戻る。
e) d)において、約20%の確率で大小関係を逆に表示せよ(=ウソをつけ)。
  この際、本当か嘘かが解答者にバレないよう、表示する形式・文言は
  本当の場合と同一にせよ。
  ※「d)において」と断ってある通り、正解の場合は嘘をついてはならない。為念。

Q2. Q1で作ったプログラムと3回対戦し、3回とも入力30回以内で正解にたどり着け。
(Q3.「Q1で作ったプログラムと対戦し、入力30回以内で正解にたどり着くプログラム」を書け。)

元ネタ(ウソをつくとこ)は、昔の『初歩のラジオ』誌のBASIC講座。
Q2で絨毯爆撃始めちゃうような奴はプログラマには向いてないよな。テスターになってもらおう。
Q3はまだ自分では試していない。乱数が偏ってウソつきまくったらきつくなるかな。

( a)で「1000の位」云々の仕様は無くてもいいんだけど、なんとなく。)
594593追記:2007/07/10(火) 10:30:45
(乱数の種を「工夫」して、Q2やQ3を楽々パスするってのは無しにして欲しいぞ)
595仕様書無しさん:2007/07/10(火) 11:59:14
>>583
class Node
 def initialize(a)
  a = a.to_s.scan(/./).insert(0,'') if !a.kind_of? Array
  @s, @nexts = a.shift, []
  @nexts = []
  a.each_index {|i|
   tmp = a.dup
   d = tmp.delete_at i
   @nexts << Node.new(tmp.insert(0, d))
  }
 end
 def to_s
  @s
 end
 def to_a
  _to_a([], [])
 end
 def _to_a(a, tmp)
  if @nexts.size < 1
   a << (tmp << self)
  else
   @nexts.each {|nn|
    nn._to_a(a, tmp.dup << self)
   }
  end
  a
 end
end

n = Node.new(1234)
puts n.to_a.map {|a| a.join}.uniq
596仕様書無しさん:2007/07/10(火) 12:28:38
>>583

def make_all_pattern(str):
retl = []

def makepattern(seed):
fwd = seed[1:]
for l in range(len(fwd)):
for m in makepattern(fwd[l:]+fwd[:l]):
res = seed[0]+m
yield res
yield seed

for l in range(len(str)):
for x in makepattern(str[l:]+str[:l]):
if len(x) != len(str) or x in retl:
pass
else:
retl.append(x)

return retl

allist = make_all_pattern(raw_input())

print ",".join(allist)

# スゲー雑です
597仕様書無しさん:2007/07/10(火) 13:22:51
>>592
Javaさわったことあるか?
598仕様書無しさん:2007/07/10(火) 13:45:31
>>596
Pythonのコードはスペース-> の変換やっとけ!!
599仕様書無しさん:2007/07/10(火) 14:09:48
def all_permutater(str):
    retl = []

    def permutater(seed):
        fwd = seed[1:]
        for l in range(len(fwd)):
            for m in permutater(fwd[l:]+fwd[:l]):
                yield seed[0]+m
        yield seed

    for l in range(len(str)):
        for x in permutater(str[l:]+str[:l]):
            # print "DEBUG:"+x
            if len(x) != len(str) or x in retl:
                pass
            else:
                retl.append(x)

    return retl

allist = all_permutater(raw_input())

print ",".join(allist)
print len(allist)

# 専ブラによっては見えるんで失念してました。sorry.
600仕様書無しさん:2007/07/10(火) 20:44:59
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define RAND (rand() * 1.0 / RAND_MAX)
int main() {
  unsigned short int answer, i;
  srand((unsigned int)time(NULL));
  answer = (unsigned short int)(RAND * 9000 + 1000);
  puts("数当てゲームでーす。4桁の数字を入力してください。");
  for (i = 1; i <= 30; i++) {
    unsigned short int match;
    char instr[6] = {'\0'};
    unsigned char lie, gt;
    printf("%2hu: ", i); fgets(instr, 6, stdin);
    if (strspn(instr, "0123456789") != 4 || !(instr[4] == '\0' || instr[4] == '\n')) {
      puts("入力が変です。4桁の数字を入力してください。");
      fflush(stdin); i--; continue;
    }
    sscanf(instr, "%hu", &match);
    if (match < 1000) {
      puts("入力は1000以上にしてください……"); i--; continue;
    }
    if (match == answer) break;
    if (RAND < 0.2) lie = 1; else lie = 0;
    gt = match > answer;
    if (gt && !lie || !gt && lie) puts("正解は入力よりも小さいです。");
    else puts("正解は入力よりも大きいです。");
  }
  if (i <= 20) puts("正解です、お見事!"); else printf("残念、正解は%04huでした〜。\n", answer);
  return 0;
} /* >>593のQ1だけ 行数制限がきついっす */
601600:2007/07/10(火) 20:50:35
> if (i <= 20) puts("正解です、お見事!");
のところは (i <= 30) だった。あとgtはltにしときゃよかったな……。
602仕様書無しさん:2007/07/10(火) 21:31:42
#! /usr/bin/perl

use Acme::FizzBuzz;
exit;
603仕様書無しさん:2007/07/10(火) 21:46:45
python版。10分で作成。

import random
number = random.randrange(1000,10000)
answer = 0

while answer!=number:
    answer = input("Plase imput number!!: ")
    if answer > number:
        if random.random()>0.8:
            print answer,"> the number"
        else:
            print answer,"< the number"
    else:
        if random.random()>0.8:
            print answer,"< the number"
        else:
            print answer,"> the number"

print "正解です"
BEGIN { ORS = "" }
$1 % 3 == 0 { print "Fizz" }
$1 % 5 == 0 { print "Buzz" }
$1 % 3 != 0 && $1 % 5 != 0 { print $1 }
{ print "\n" }
605仕様書無しさん:2007/07/11(水) 02:08:53
sed版FizzBuzzに期待
606仕様書無しさん:2007/07/11(水) 18:34:03
>>605
断念した。bourne sh版で許してくれ…

#!/bin/sh -
n=1
while [ $n -le 100 ]; do
    f=
    if [ `expr $n % 3` = 0 ]; then
        f=Fizz
    fi
    b=
    if [ `expr $n % 5` = 0 ]; then
        b=Buzz
    fi
    fb=`expr "$f" \| "$b"`
    if [ "$fb" = 0 ]; then
        echo $n
    else
        echo $f$b
    fi
    n=`expr $n + 1`
done
607仕様書無しさん:2007/07/11(水) 18:37:51
sedで5の倍数は判定出来るが
3の倍数は無理じゃね?w
608仕様書無しさん:2007/07/12(木) 20:40:33
>>607
1桁の足し算さえ出来れば可能ではないかと
609仕様書無しさん:2007/07/13(金) 21:55:36
>>575
掲示板にちょろっと書くコードにいちいち、return 0;書けとかツッコンでるヤツこそ重箱のスミだろ。
定番の書籍なんかでもふつーに省略してあるし、書き捨てのコードだと、mainのreturnを省略してるくらいのほうがむしろ玄人っぽいくらい。
610仕様書無しさん:2007/07/13(金) 23:00:28
>>609
1byteも説得力無いな。

> mainのreturnを省略してるくらいのほうがむしろ玄人っぽいくらい。
ちょwwwwあんま笑わせんなwwwwwwwwww

しかしスゲー粘着するな。なにがそんなに悔しいのかわからんが、
ちゃんと最初から読んでるのか?



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

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



518が指摘したソース(>>514)みると、stdio.h の include まで書いて int main まで書いてる。
そのうえで return 無いよって指摘しただけ。
ま、>>535 が真性アホってことでいいじゃないか。 >>609>>518 なら南無。
611仕様書無しさん:2007/07/13(金) 23:41:42
>>610
> 518が指摘したソース(>>514)みると、stdio.h の include まで書いて int main まで書いてる。 
> そのうえで return 無いよって指摘しただけ。 

いや、そういう論点じゃないだろ。
もしかしてint main()以外だったら、省略可って話なのか・・・?
#include <stdio.h> がmain()のreturnにどう関係してくるかも意味不明。
612仕様書無しさん:2007/07/13(金) 23:47:04
もういいじゃん。

return 0; と書くのすら面倒くさがり、
しかも省略するほうが玄人っぽいと思っているバカも
この世には1人くらいいるんだなあ、

ってことで。
613仕様書無しさん:2007/07/14(土) 00:13:47
>>612
なんだよ、適当に言ってただけかよ。
614仕様書無しさん:2007/07/14(土) 00:18:41
ネットとかでちょっとしたコードを書くときに、mainのreturnを省略してると、わかってるなって感じがするよな。
いちいち揚げ足とりのツッコミ入れてるヤツとかいると、どこの素人だよって感じ。
615仕様書無しさん:2007/07/14(土) 00:45:14
Fizz-Buzz製品版を販売する気なのかもよw
616仕様書無しさん:2007/07/14(土) 01:00:11
ネットとかでちょっとしたコードを書くときに、int main()のreturnを省略してると、C++は眼中になしって感じがするよな。
617仕様書無しさん:2007/07/14(土) 01:04:36
>>616
プログラミング言語C++第3版の最初のコードは省略してるよ。
618仕様書無しさん:2007/07/14(土) 01:28:35
int main ... return 0; はマナーって言ってる人がいたっけ
要するに、時と場合で使い分ければいい

void main が問題となりえる状況では、徹底的に突っ込む
(C言語の)仕様に従っていないこと、ついでに仕様に従う重要性も含めて

初心者に教える場合とか、個人的なテストコードでは、めんどいから void main
最初の #include <stdio.h> を不思議な呪文として、詳細教えるの保留すること多いし

どうしても気になる人は使ってるコンパイラのmainからreturnした時のコードを確認すればいい
619仕様書無しさん:2007/07/14(土) 01:30:32
返り値がいらないとか言ってるのは一人だけなのに
相手してやるなんてみんな優しいな。
620仕様書無しさん:2007/07/14(土) 01:35:35
もういいよ。スレ違いだし、スレタイも微妙だし。

ただ、

>mainのreturnを省略してると、わかってるなって感じがするよな。

馬鹿じゃねーの?そんなとこ着目する奴いねーよ
621仕様書無しさん:2007/07/14(土) 01:36:08
int main()で戻り値を自分で int と定義したにも関わらず return で戻り値返さないのは中途半端だと思う。
戻り値いらんなら void main() にして明示的に戻り値ナシにすればいいのでは?
return省略して不定値返して、呼び出し側プロセスが異常な動作したらどうすんの?
622仕様書無しさん:2007/07/14(土) 01:39:50
マナーの問題。
この規模じゃ正直どっちでもいい。
623仕様書無しさん:2007/07/14(土) 01:46:32
>>621
void main()にしたら、決まった値が帰るような言い草だな。
624仕様書無しさん:2007/07/14(土) 01:49:32
void main()はreturn省略より、10倍くらいつっこまれるんじゃないか?
625仕様書無しさん:2007/07/14(土) 01:58:07
void main にすることで戻り値に意味無いと明示するんだろう。
return 省略コードは確かにWebでよくあるけど、実際に動いてるコードではあり得ない。

もっとためになること議論したほうがいいよ。どうせアホは1人だけだろ。
626仕様書無しさん:2007/07/14(土) 02:04:33
>>625
ソース見てリターン値の意味を判断するって話なら、void main()見ても意味無いよ。
なぜかは自分で考えてね。
それ以前の問題で、ソース見てvoid main()だったら、大丈夫かよって感じになるけど。
627仕様書無しさん:2007/07/14(土) 02:12:03
>>621 >>625
void main()にしたって、よそのプロセスが、無効な値かどうか判断できるわけないだろ。
628仕様書無しさん:2007/07/14(土) 02:14:30
>>625
Webだけじゃなくて、本とかでもよくあるよ。
そもそもWebの話じゃん。
629仕様書無しさん:2007/07/14(土) 02:21:09
ぬるぽっ!
630仕様書無しさん:2007/07/14(土) 02:30:40
>>628
本でもっていうか、世界中で使われてる某ソフトも、return省略してるけどな。
631仕様書無しさん:2007/07/14(土) 03:37:03
だから何?
632仕様書無しさん:2007/07/14(土) 15:47:04
別のスレで、プログラマでありがちなこと(議論しそうなこと?だっけ)、とかなんとか言うスレがなかったか?
そっち向けの話題だな。

gotoでもりあがるとか、
タブの数で盛り上がるとか
レスあった
633仕様書無しさん:2007/07/14(土) 16:57:34
いや、別に宗教論争じゃないから。
main()のreturnは省略可。
いちいち揚げ足取りのツッコミ入れるヤツのほうが素人ってだけの話。
634仕様書無しさん:2007/07/14(土) 18:44:19
>>633
だから、そう言い張る根拠を示してくれよ。
宗教論争じゃないんだからさ・・・
お前がそう言い張る以上は、規格書に
「main()のreturnは省略可」って一文が
ちゃんと書かれているんだろ?
635仕様書無しさん:2007/07/14(土) 21:57:39
争うなら別でやってくれよ…。

流れをぶった切る意味でも一問。
以下のようなプログラムを書け
・"ひらがな:漢字"というペアを受け付けた時はそれを記憶する
・ひらがなのみが入力されたとき、
記録にそのひらがなに対応する漢字があればその一覧を出力する。

(例)
>かんじ:漢字
>かんじ:幹事
>かんじ
漢字,幹事
636仕様書無しさん:2007/07/14(土) 22:20:34
m = Hash.new {|m, key| m[key] = []}
while gets
 hi, ka = gsub(/[\r\n]/,'').split(/:/)
 if ka
  m[hi] << ka
 else
  puts m[hi]
 end
end
637仕様書無しさん:2007/07/14(土) 22:31:46
組込みで連想配列を持ってる言語じゃないと面倒な課題だなぁ。
正直,Cでやれといわれると10分はかかるだろうな

map=Hash.new{|hash,key|hash[key]=[]}
$<.each do|line|
        if line =~ /(.*):(.*)/
                map[$1]<<$2
        else
                puts map[line.chomp].join(",")
        end
end
638仕様書無しさん:2007/07/15(日) 00:01:08
>>634
return省略した場合の動作は書いてあるよ。
639仕様書無しさん:2007/07/15(日) 00:07:17
よく見たら、上のほうで、自分で調べて納得してるじゃん。
640仕様書無しさん:2007/07/15(日) 01:54:20
main の return 省略ね。
こういうクズ議論を自転車置き場の議論っていうんだぜ。

難しい議論は、頭も悪いし勉強してないから参加できないが、
「自転車置き場をどこにするか?」
なんていう馬鹿でもわかる議論には必死に食いついてくる。

FizzBuzz が盛り上がったのも同じ理由だろ。

お題が難しければハナから諦めて、回答ソースを読むこともしないような
そんな負け犬のクズどもが多いですよ、このスレは。
641仕様書無しさん:2007/07/15(日) 02:06:27
わかったから一回オナニーして落ち着け、な?
642仕様書無しさん:2007/07/15(日) 03:30:12
>>635 Cはめんどいね
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void main(void)
{
  const char *keys[256], *vals[256];
  char *p_s, *res, s_buf[256];
  int idx, cnt_dic, f_cma;
  cnt_dic = 0;
  while (1)
  {
    printf(">"); gets(s_buf); if (strlen(s_buf)==0){ break; }
    res = strchr(s_buf, ':');
    if (res == NULL)
    {
      f_cma = 0;
      for (idx=0; idx<cnt_dic; idx++)
        if (strcmp(keys[idx],s_buf) == 0)
        {
          if (f_cma != 0){ putchar(','); }
          f_cma = 1; printf(vals[idx]); }
      putchar('\n'); continue; }
    if (cnt_dic < 256)
    {
      p_s = (char*)malloc(strlen(res+1)+1); strcpy(p_s, res+1); vals[cnt_dic]= p_s; *res = NULL;
      p_s = (char*)malloc(strlen(s_buf)+1); strcpy(p_s, s_buf); keys[cnt_dic]= p_s; cnt_dic++; }
  }
  for (idx=0; idx<cnt_dic; idx++)
  { free((void*)keys[idx]); free((void*)vals[idx]); }
}
643仕様書無しさん:2007/07/15(日) 04:19:01
>>642
> if (strcmp(keys[idx],s_buf) == 0)
を if (strncmp(keys[idx],s_buf,strlen(s_buf)) == 0)
にして
> … *res = NULL;
を res = NULL;
にしたら動いたよー
644仕様書無しさん:2007/07/15(日) 05:07:28
>>643
あれれ、ビルドして実行確認してあるけど、入力データの違いかなぁ?
めんどくて日本語処理を考慮してないから

strcmp() → strncmp() はそれでも問題ないと思う

*res = NULL は文字列を : の左側だけにぶった切る処理
それだと、使い終わったポインタ変数をクリアするだけで
keys[] へ検索キー文字列が正しく登録されないはず

個人的な蛇足で strchr() の引数が const char* なのに
戻り値が char* なのを、納得いかないまま利用してるんだけど
それが影響してるのかしらん?
645仕様書無しさん:2007/07/15(日) 05:20:04
>>644 を訂正
>strcmp() → strncmp() はそれでも問題ないと思う
やっぱダメ

>strncmp() 関数は、s1 と s2 の最初の n 文字だけを比較することを除けば、strcmp()と同様である。
s_buf の長さだけだと、表示に使う文字列の長さだけで比較してしまう

> >12:1to2
> >12345:1to5
> >12
> 1to2,1to5

strncmp の場合 strlen(s_buf) → strlen(s_buf)+1 とすれば
NULL まで比較するから、多分いけるはず
646637:2007/07/15(日) 08:05:01
時間計りながらCで適当にやってみると7分30秒かかった。

#include<stdio.h>
#include<string.h>
char keys[256][80];
char vals[256][80];
char input[80];
int  length;
int main(){
  while(fgets(input,sizeof input,stdin)){
    int i,cma=0;
    int n = sscanf(input,"%79[^:\n]:%79[^\n]",keys[length],vals[length]);
    if(n == 2){
      ++length;
      continue;
    }
    for(i=0;i<length;++i){
      if(strcmp(keys[i],keys[length])==0){
        printf("%s%s",cma?",":"",vals[i]);
        cma=1;
      }
    }
  }
}
647仕様書無しさん:2007/07/15(日) 08:53:24
6分ちょっとかかった
iimport std.stdio, std.cstream, std.string;
void main(){
char[][char[]] dic;
char[][] findKeys(char[] v){
char[][] r;
foreach( k ; dic.keys ){
if( dic[k] == v ) r ~= k;
}
return r;
}
while(1){
char[][] pair = split(din.readLine(), ":");
if( pair.length == 1 ){
foreach( s ; findKeys(pair[0]) ){
writef("%s,", s);
}
writefln("");
}
else if( pair.length == 2 ){
dic[pair[1]] = pair[0];
}
}
}
648仕様書無しさん:2007/07/15(日) 11:38:52
>>647
その使いかただと連想配列である利点が消えてるくね?
それに同じ漢字に複数の読みを割り当てれないし(これは半分いいがかりだけど)

import std.stdio, std.cstream, std.string;
void main(){
        string[][string] dic;
        while(1){
                string[]*get(string key){
                        auto x = key in dic;
                        if(!x)dic[key]=null ,x = key in dic;
                        return x;
                }
                string[] pair = split(din.readLine(), ":");
                if( pair.length == 1 ){
                        foreach(key;*get(pair[0]))
                                writef("%s,",key);
                        writefln();
                }else if( pair.length == 2 ){
                        *get(pair[0]) ~= pair[1];
                }
        }
}
649仕様書無しさん:2007/07/15(日) 14:37:55
推奨NGワード: main
650仕様書無しさん:2007/07/15(日) 15:54:24
>>637
WindowsにPerl入れて日本語を扱えるようにするのに一時間かかってしまった…。
651仕様書無しさん:2007/07/15(日) 18:30:56
#include <stdio.h>
struct Node {
    char *name;
    struct Node *next;
};
struct HNode {
    struct Node node;
    struct Node *nodes;
};
struct Node *find(struct Node *head, char *name) {
    struct Node *n;
    for (n = head; n; n = n->next) {
        if (strcmp(name, n->name) == 0) break;
    }
    return n;
}
struct HNode *hfind(struct HNode*head, char*name) {
    return (struct HNode *)find((struct Node *)head, name);
}
struct Node *create_node(char *name, struct Node *next) {
    struct Node *n = (struct Node *)calloc(1, sizeof(struct Node));
    n->name = name;n->next = next;
    return n;
}
struct HNode *create_hnode(char *name, struct HNode *next, struct Node *nodes) {
    struct HNode *hn = (struct HNode *)calloc(1, sizeof(struct HNode));
    ((struct Node *)hn)->name = strdup(name);
    ((struct Node *)hn)->next = (struct Node *)next;
    hn->nodes = nodes;
    return hn;
}
652仕様書無しさん:2007/07/15(日) 18:34:13
int main(void) {
  struct HNode *root = 0, *found;
  struct Node *n;
  char buff[80], hi[80], ka[80];
  while (fgets(buff, sizeof(buff), stdin)) {
    switch (sscanf(buff,"%79[^:\n]:%79[^\n]", hi, ka)) {
    case 1:
      found = hfind(root, hi);
      if (found) for (n = found->nodes; n; n = n->next) {
        printf(" %s\n", n->name);
      }
      break;
    case 2:
      found = hfind(root, hi);
      if (found /*&& !find(found->nodes, ka)*/) {
        found->nodes = create_node(ka, found->nodes);
      } else {
        root = create_hnode(hi, root, create_node(ka, 0));
      }
      break;
    default:
      break;
    }
  }
}

/* スキャン部分を>>646さんのを参考にし(パクッ)たというのに、
なぜか全部で四時間くらいかかりました。フヒヒすいません。*/
653仕様書無しさん:2007/07/15(日) 19:53:08
日本語処理という(少なくともCとかでは)泥臭い部分って
基本ロジック部とは隔絶すべきじゃねぇか、とか余計なコト考えてしまう
もちろん少数行のお試しテストで言うことじゃないけどね
654仕様書無しさん:2007/07/17(火) 16:59:26
char *a[] = {"a","b","c"};
をカンマ区切りで出力せよ。

例:
#include <stdio.h>
int main() {
    char *a[] = {"a","b","c"};
    int i;
    for (i = 0; i < (sizeof(a) / sizeof(char *)); i++) {
        printf("%s%s", i == 0 ? "" : ",", a[i]);
    }
}
655仕様書無しさん:2007/07/17(火) 17:38:21
なんて発展性のない・・・
656仕様書無しさん:2007/07/17(火) 20:18:53
書けない奴は絶対に入れたくないなぁ
657仕様書無しさん:2007/07/17(火) 21:11:22
他の言語使いにも理解できるように、誰か一般化してくれ。
658仕様書無しさん:2007/07/17(火) 22:46:57
>>657
文字列の配列の要素をカンマ区切りで出力しろ
659仕様書無しさん:2007/07/18(水) 00:58:53
>658
LLの類は大抵Joinがあるから一撃だなそれ
VBScriptですら
a = Array("a", "b", "c")
WScript.Echo Join(a, ",")
でしまいだ
ってことで、「Join関数もしくはメソッドの類がある言語は、それ使っちゃダメ」縛りを入れよう
660仕様書無しさん:2007/07/18(水) 01:20:13
# Ruby非join版
ary = %w(a b c)
exit if ary.empty?
print ary.shift
while item=ary.shift do
  print ",", item
end
661仕様書無しさん:2007/07/18(水) 01:22:41
>>659
確かに一発w
# ruby join版
puts %w(a b c).join(",")
662仕様書無しさん:2007/07/18(水) 01:26:02
>>660
そこで、injectですよw

# ruby非join版
puts %w(a b c).inject(""){|r,i|r+i+","}.chop
663仕様書無しさん:2007/07/19(木) 00:20:12
ワンライナースレにする気かおまいら
664仕様書無しさん:2007/07/19(木) 05:01:39
665仕様書無しさん:2007/07/19(木) 17:51:22
>>664
知ってたが、スルーしてた
お題が、ワンライナーでかきにくいってだけの理由だがw

しかし、デザインなんとかならんのかな?
マイナスに働いている気がするぜ?
つか、長いコードはっつけて、崩れるってどんだけ〜
666仕様書無しさん:2007/07/19(木) 18:17:11
いや、でも、今見たら結構おもしろいw
もちっと、UIを直してくれたらな・・・
667仕様書無しさん:2007/07/19(木) 22:59:35
・1~1000までの数値を出力
・素数の時は数値の代わりに「Bizz」と出力
・計算速度が出力する最大数(この問題の場合1000)に比例するアルゴリズムで書け
668仕様書無しさん:2007/07/20(金) 02:16:48
O(n) というとエなんたらのふるいしか思いつかん
669仕様書無しさん:2007/07/21(土) 06:44:39
・4×4の"+"を出力する。
・(行,列)というペアを受け取り、対応する部分の+/-を切り替える。

(例)
+ + + +
+ + + +
+ + + +
+ + + +

>(1,3)
+ + - +
+ + + +
+ + + +
+ + + +

>(2,2)
+ + - +
+ - + +
+ + + +
+ + + +
670仕様書無しさん:2007/07/21(土) 15:24:11
sub initmatrix(){
  my ($matrix) = @_;
  for(my $i = 0;$i < 4;$i++){
    for(my $j = 0;$j < 4;$j++){
      $$matrix[$i][$j] = "+";
    }
  }
}

sub printmatrix(){
  my ($matrix) = @_;
  for(my $i = 0;$i < 4;$i++){
    for(my $j = 0;$j < 4;$j++){
      print $$matrix[$i][$j];
    }
    print "\n";
  }
}

sub interchange(){
  my ($matrix,$i,$j) = @_;
  if(($i=~/\d/) and ($j=~/\d/) and ($i >= 1) and ($i <= 4) and ($j >= 1) and ($j <= 4)){
    if($$matrix[$i-1][$j-1] eq "+"){
      $$matrix[$i-1][$j-1] = "-";
    }
    else{
      $$matrix[$i-1][$j-1] = "+";
    }
  }
}
671仕様書無しさん:2007/07/21(土) 15:26:13
my @matrix = ();

&initmatrix(\@matrix);
&printmatrix(\@matrix);

while(1){
  print ">";
  my $input = <STDIN>;
  chomp($input);
  if($input =~ /^\((\d),(\d)\)/){
    &interchange(\@matrix,$1,$2);
    &printmatrix(\@matrix);
  }
  else{
    exit;
}
672仕様書無しさん:2007/07/21(土) 17:24:17
最近習ったばかりのC++で"反転"メソッドを実装したインスタンス[4][4]を生成して
・・・・・って考えたけどロジックとか無いつまらんコードになるからアウトだな・・・・
673仕様書無しさん:2007/07/21(土) 21:08:54
わざわざカッコとカンマが必要な入力インタフェースはいまいちだよね
とか言ってみる
674仕様書無しさん:2007/07/21(土) 22:22:36
python版。かなり適当。

# prepare
box=[]
line=""
for x in range(4):
    box.append(["+","+","+","+"])
for y in range(4):
    for z in box[y]:
        print z,
    print ""
    
while True:
    # change
    cha = input("Input: ")
    if box[cha[0]-1][cha[1]-1] == "+":
        box[cha[0]-1][cha[1]-1] = "-"
    else:
        box[cha[0]-1][cha[1]-1] = "+"
        
    # print
    for y in range(4):
        for z in box[y]:
            print z,
        print ""
    
675仕様書無しさん:2007/07/21(土) 22:27:52
>>673
同感、めんどいよね

a=("+"*16).scan(/#{"(\\+)"*4}/)
puts a.map{|x|x.join(" ")}
$<.each{|$_|
        i,j=scan(/\d+/)
        a[i.to_i-1][j.to_i-1][0]^=?+^?-
        puts a.map{|x|x.join(" ")}
}
676仕様書無しさん:2007/07/22(日) 00:04:38
>>669
#include <stdio.h>
int main() {
  char table[4][4] = {0};
  for (;;) {
    int row, col;
    char buf[7] = {0};
    for (row = 0; row < 4; row++) {
      for (col = 0; col < 4; col++) {
        putchar((table[row][col] ? '-' : '+'));
        if (col < 3) putchar(' ');
      }
      putchar('\n');
    }
    printf("\n>");
    fgets(buf, 7, stdin); fflush(stdin);
    if (sscanf(buf, "(%1d,%1d)", &row, &col) != 2) break;
    if (row < 1 || row > 4 || col < 1 || col > 4) break;
    table[row - 1][col - 1] = !table[row - 1][col - 1];
  }
  return 0;
}

>>675
みじかっ!
677仕様書無しさん:2007/07/22(日) 00:07:28
>672
そのメソッドがロジックを実装してるんじゃないのか
ってことでソース(屮゚Д゚)屮 カモーン
678仕様書無しさん:2007/07/22(日) 04:33:35
Cで書くならマクロ使いまくって短くしようぜ
679仕様書無しさん:2007/07/22(日) 05:04:39
C++で書くならgenericにして長くしようぜ
680仕様書無しさん:2007/07/22(日) 05:07:14
Cだと・・・+/-切り替えが クリア→再描画 にしろ 座標指定→1文字置換 にしろ
環境依存だなw
681仕様書無しさん:2007/07/23(月) 10:14:22
m=(1..4).map{(1..4).map{'+'}};while puts(m.map{|r|r*' '})||print('y,x>')||gets;m[y=$1.to_i][x=$2.to_i]=m[y][x]=='+'?'-':'+'if~/(\d).(\d)/;end
682仕様書無しさん:2007/07/23(月) 10:19:04
とうとう一行にw
683仕様書無しさん:2007/07/23(月) 14:58:44
行幅は80で抑えるのが俺の美学
a="+ + + +\n"*4;(y,x=scan(/\d+/);a[y.to_i*8+x.to_i*2-10]^=6)while$><<a&&gets
684仕様書無しさん:2007/07/23(月) 18:05:24
>683
その発想はなかった

でもメンテしたくないコードだなぁw
普段からRuby使ってるのに理解するのに10分掛かった
685仕様書無しさん:2007/07/23(月) 20:53:39
保守性うんぬんを言い出したら、ワンライナーなんてやってられるか!
ってことで。

というか、それが出来たらもはや真のプログラマの領域だな。
686仕様書無しさん:2007/07/24(火) 10:36:57
@Echo Off
SetLocal EnableDelayedExpansion
For /L %%I In (1,1,4) Do Set Rows_%%I=+ + + +
:MainLoop
  Set K=
  Set /P K=(x,y):
  If Defined K GoTo :MainLoop_InputNotEmpty
  GoTo :EoF
  :MainLoop_InputNotEmpty
  For /F "tokens=1,2 delims=(,)" %%x In ("%K%") Do (
    Set /A X=%%x*2-2
    Set Y=%%y
  )
  Set /A X2=%X%+1
  Set Rows_%Y%=!Rows_%Y%:~0,%X%!-!Rows_%Y%:~%X2%!
  For /L %%I In (1,1,4) Do Echo !Rows_%%I!
GoTo :MainLoop
687仕様書無しさん:2007/07/24(火) 10:41:03
投稿した後で気付いた…表示がループ最後になってらorz
688名無しさん@そうだ選挙に行こう:2007/07/29(日) 14:44:11
■問題
"A"から"Z"までのアルファベットを出力せよ。
ただし、ABC……XYZの文字列をそんまま出力してはいけない

出力例:
ABCDEFGHIJEKLMN……
689名無しさん@そうだ選挙に行こう:2007/07/29(日) 15:22:53
perl -e 'print join("",split(//,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"));'
690名無しさん@そうだ選挙に行こう:2007/07/29(日) 16:29:13
訂正:
"ABCDEFGHIJKLMNOPQRSTUVWXYZ"の文字列をそのまま使ってはいけない
691名無しさん@そうだ選挙に行こう:2007/07/29(日) 16:48:44
>>688 puts ('A'..'Z').to_a.join
692名無しさん@そうだ選挙に行こう:2007/07/29(日) 17:10:36
俺なら>>1を見た段階で仕様を箇条書きに書き直させる。
693名無しさん@そうだ選挙に行こう:2007/07/29(日) 17:31:19
int main() {
char c;
for (c = 'A'; c <= 'Z'; ) printf("%c", c++);
printf("¥n");
return 0;
}
694仕様書無しさん:2007/07/29(日) 18:25:21
>>688

>++++++++[<++++++++>-]>+++++[<+++++>-]<+[<+.>-]
695名無しさん@そうだ選挙に行こう:2007/07/29(日) 18:26:56
でもこのコードを得意じゃない言語で書けといわれたら
10分はかかってしまうなぁ
696名無しさん@そうだ選挙に行こう:2007/07/29(日) 18:28:38
Cでのfizzbuzz最短解って何文字だっけ?
697名無しさん@そうだ選挙に行こう:2007/07/29(日) 18:34:20
>>688>>693 みたいなのを釣るための問題だな
698名無しさん@そうだ選挙に行こう:2007/07/29(日) 18:45:30
やべ。俺>>688の問題は>>693以外に思いつかないわ。
あとはテーブル用意して、ループさせるとか?それはめんどくさいよなぁ
699名無しさん@そうだ選挙に行こう:2007/07/29(日) 19:00:35
>>688

int main() {
namespace bll = boost::lambda;
typedef boost::counting_iterator<char> counting_iterator;
std::for_each(counting_iterator('A'), counting_iterator('Z'), std::cout << bll::_1);
}
700名無しさん@そうだ選挙に行こう:2007/07/29(日) 19:09:35
main(c){c=65;while(c<91)putchar(c++);}
701名無しさん@そうだ選挙に行こう:2007/07/29(日) 19:11:44
forの方が短いな
702名無しさん@そうだ選挙に行こう:2007/07/29(日) 19:46:43
putchar() とか完全に存在を忘れてたwww
703名無しさん@そうだ選挙に行こう:2007/07/29(日) 20:04:01
すぐにゴルファーとかワンライナーが現れるなココ
704仕様書無しさん:2007/07/29(日) 20:37:58
2chに自動で書込みを行うコードを記述せよ
705仕様書無しさん:2007/07/29(日) 22:41:17
失せろ屑
706仕様書無しさん:2007/07/29(日) 23:43:53 0
perl -e 'print join("",reverse(split(//,"ZYXWVUTSRQPONMLKJIHGFEDCBA")));'
707仕様書無しさん:2007/07/29(日) 23:46:01 0
perl -e 'foreach("A".."Z"){print;}'
708仕様書無しさん:2007/07/30(月) 00:25:04
perl -e 'print uc("abcdefghijklmnopqrstuvwxyz");'
709仕様書無しさん:2007/07/30(月) 00:49:50
ruby -e "?A.upto(?Z){|c| print c.chr};puts"
710仕様書無しさん:2007/07/30(月) 03:10:12
100 FOR I=65 TO 90
110 PRINT CHR$(I);
120 NEXT
711仕様書無しさん:2007/07/30(月) 04:00:20
>>707
perl -e "print 'A'..'Z';"
712仕様書無しさん:2007/07/30(月) 08:49:27
ruby -e "('A'..'Z').each{|c| print c}"
713仕様書無しさん:2007/07/30(月) 10:38:39
     MOV AH,2
    MOV DX,41
main: MOV CX,26
     INT 21
     INC DX
     LOOP main
    
714仕様書無しさん:2007/07/30(月) 10:46:02
LOOPする毎にCXの値が戻ってるような
715仕様書無しさん:2007/07/30(月) 11:38:44
出力の最後に改行入れないのは邪悪だと思うんだ
716仕様書無しさん:2007/07/30(月) 12:23:32
オレが邪悪でないとでも?
何を今更
717仕様書無しさん:2007/07/30(月) 12:33:02
問題にも最後に改行をつけろとか特に書いてないし

> "A"から"Z"までのアルファベットを出力せよ。

ほら
718仕様書無しさん:2007/07/30(月) 13:04:59
715の主張は
  「出力」には「最後に改行を入れる」ことが含意されるんじゃね?
ということだ、と読解する力すらないんだな。
719仕様書無しさん:2007/07/30(月) 14:00:09
>>718
でも、下手に改行つけたら仕様を逸脱したと思われるよな
顧客満足度120% が尊ばれる時代は終わったんだよ。残念ながら。
720仕様書無しさん:2007/07/30(月) 14:16:48
というよりただ単に>>688の設問の仕方がなってないだけなのでは
721仕様書無しさん:2007/07/30(月) 14:27:33
Fizz-Buzzに引っかかる人種は
'A' ←数値
って時点でまず理解してなかったりするよね
722688:2007/07/30(月) 17:55:06
追記:
・最後の改行は特にあっても無くてもよい
723仕様書無しさん:2007/07/30(月) 17:55:41
>>706 >>708
おれは怒らせたいようだな・・・
724仕様書無しさん:2007/07/30(月) 18:15:27
おれはじゃ無くおれをのような
725仕様書無しさん:2007/07/30(月) 18:25:32
おれはじゃ無くおのれかも
726仕様書無しさん:2007/07/30(月) 19:40:17
>>721
('A' )
727仕様書無しさん:2007/07/30(月) 20:12:22
>>721の意味がわからない
728仕様書無しさん:2007/07/30(月) 20:21:09
C言語だと、例えば、'I' + 1 が 'J' であることは保証されていないんじゃなかったかと
729仕様書無しさん:2007/07/30(月) 20:27:40
EBCDICなんて見たことないもん。
730仕様書無しさん:2007/07/30(月) 20:31:33
0x41
731仕様書無しさん:2007/07/30(月) 23:20:03
perl -e "print A..Z"
括弧いらない。出せばいいだけなら、dieでもいいかもしれない。
732仕様書無しさん:2007/07/31(火) 00:47:10
ついに最終解まで辿り着いたか・・・
733仕様書無しさん:2007/07/31(火) 01:09:45
>>1
「書き出せる」ってのは「書き始めれる」って修正したほうが良いな。

2分でコーディング完了って話じゃなくて、2分もあれば構想を練り切って、コーディングに取り掛かることができるだろうって話。
下のほうでは、コーディングにかかってからコーディング終了までの時間を書いてるから話がややこしくなる。
734仕様書無しさん:2007/07/31(火) 01:11:57
ら抜き
735仕様書無しさん:2007/07/31(火) 08:05:15
>>731
> perl -e "print A..Z"
> 括弧いらない。

それを言うなら「括弧」ではなくクォーテーション(シングルクォーテーション)では?
736仕様書無しさん:2007/07/31(火) 08:43:10
>>733
> >>1
> 「書き出せる」ってのは「書き始めれる」って修正したほうが良いな。

ら抜きもアレだが、原文は
「Most good programmers should be able to write out on paper a program which does this in a under a couple of minutes.」
write out は完全に書く、書き尽くす、という意味。
従ってこの場合の「書き出せる」は「書き始められる」ではなく、やはり「書き終われる」と取るのが正しい。
そもそも「紙に書き出す」という表現が通常意味するところをちゃんと把握できていれば>>733のような誤解は起き得ないと思うのだが。
737仕様書無しさん:2007/07/31(火) 09:45:35
>>728
保証されてないこたないだろ
738仕様書無しさん:2007/07/31(火) 11:23:03
>>737
帰ってよし。
739仕様書無しさん:2007/07/31(火) 11:24:01
>>733
書き始めるまでに2分もかかる自分への言い訳ですか?
740仕様書無しさん:2007/07/31(火) 13:04:48
男ってのは自分に言い訳をいつもしてしまう生き物なのさ
741仕様書無しさん:2007/07/31(火) 13:09:46
女ってのはそれに付け込む生き物なのさ
742仕様書無しさん:2007/07/31(火) 17:12:29
あああー付け込まれてーなー
743仕様書無しさん:2007/07/31(火) 20:09:36
>>735
そう。それもいらない。
744仕様書無しさん:2007/07/31(火) 22:07:59
>>721
'A'は文字列だ!
745仕様書無しさん:2007/07/31(火) 22:41:08
【審議中】
746仕様書無しさん:2007/07/31(火) 22:49:53
>>744
シングルクォートは、言語によりけりだな。
PerlやPython、Rubyは文字列だし。
Javaは文字で、数値とはある程度区別されるし。
C言語は文字だけどサイズの小さい数値でもあるし。
X-BASICでは整数型を返すっけ。
Delphiはそもそも文字列は基本シングルクォート。
あとはダブルクォートで文字配列、シングルクォートで文字列って言語もあるな。
747仕様書無しさん:2007/08/01(水) 02:30:18
>>746
いや、Cで sizeof('A') == sizeof(int) だぜ

('A')ヴァー
748仕様書無しさん:2007/08/01(水) 03:40:58
>747
実装依存。
実際sizeof('A')==1になる処理系あるし。cintとか。
749仕様書無しさん:2007/08/01(水) 11:37:18
>>748
そりゃ C++ の場合。
750仕様書無しさん:2007/08/01(水) 12:55:15
>>748
('A')仕様だっての
751仕様書無しさん:2007/08/01(水) 13:03:38
('A')
752仕様書無しさん:2007/08/01(水) 21:52:21
('A') ←毒されてんのか、こいつが顔にしか見えない
753仕様書無しさん:2007/08/01(水) 22:10:03
>>752
えっ?、顔でしょ?
754仕様書無しさん:2007/08/01(水) 22:52:04
('A') 顔じゃないよ・・・
ノ(ヘヘ
755仕様書無しさん:2007/08/02(木) 10:08:41
なんとか顔に見えた奴 (ヒント:鼻、口、眉(眉間)、右向き左向き、人間以外の生き物)
(' ') ('#') ('!') ('&') ('(') (')') ('*') ('+') (',') ('-')
('.') ('/') ('0') ('1') ('2') ('3') ('4') ('5') ('6') ('7')
('8') ('9') (':') (';') ('<') ('=') ('>') ('?') ('@') ('A')
('B') ('C') ('D') ('E') ('F') ('G') ('H') ('I') ('J') ('K')
('L') ('M') ('N') ('O') ('P') ('Q') ('R') ('S') ('T') ('U')
('V') ('W') ('X') ('Y') ('Z') ('[') ('\') (']') ('^') ('_')
('a') ('b') ('c') ('d') ('e') ('f') ('g') ('h') ('i') ('j')
('k') ('l') ('m') ('n') ('o') ('p') ('q') ('r') ('s') ('t')
('u') ('v') ('w') ('x') ('y') ('z') ('{') ('|') ('}') ('~')
ちょっと厳しかった奴
('"') ('$') ('%') (''') ('`')

('~') はフォントにより ~ 部分が中心(下)の方にあると顔に見えやすい。

# perl -e 'print pack("cccccc", 0x20, 0x28, 0x27, $_, 0x27, 0x29) foreach (0x20..0x7e); print "\n";'
756仕様書無しさん:2007/08/02(木) 11:28:05
blogでやってろ
757仕様書無しさん:2007/08/02(木) 16:08:58
2ちゃんはオレ専用の巨大blog。
オマエらはオレのblogにコメントつけさせてもらってるただのゲストだ。
ってことで。
758仕様書無しさん:2007/08/02(木) 21:27:45
('3') ←真っ先にプップクプーやボルジョアが脳裏に浮かぶ(俺、もう駄目人間かも)
759ぼるじょあ ◆yBEncckFOU :2007/08/02(木) 22:24:01
(・3・)あるぅぇー?
ボクが思い浮かんだ程度で駄目人間だなんて思い上がりすぎだYO!
真の2ちゃんねらたるもの、IMEにAA辞書を用意するのは基本 DA☆YO☆NE!
760仕様書無しさん:2007/08/02(木) 22:38:34
"ぼるじょあ"の中の人は何%くらいがFizzBuzz問題クリアできるんだろ?
761仕様書無しさん:2007/08/02(木) 23:22:49
('3') から推測して… 3% くらい?
762仕様書無しさん:2007/08/02(木) 23:23:46
顔文字はいいから問題持ってこい
763仕様書無しさん:2007/08/03(金) 02:01:50
1から100までの数をプリントするプログラムを書け。
ただし3の倍数以外のときは数の代わりに「Fizz」と、
5の倍数以外のときは「Buzz」とプリントし、
3と5のどちらの倍数でもない場合には「FizzBuzz」とプリントすること。
764仕様書無しさん:2007/08/03(金) 09:03:20
3に対する出力は?
765仕様書無しさん:2007/08/03(金) 10:09:28
>>764
3
766仕様書無しさん:2007/08/03(金) 10:11:57
>>765
>5の倍数以外のときは「Buzz」とプリントし、
767仕様書無しさん:2007/08/03(金) 10:19:34
数字、表示できないじゃないかw
768765:2007/08/03(金) 10:34:21
ごめん。もう死ぬわ
769仕様書無しさん:2007/08/03(金) 11:02:07
n mod 3  n mod 5  output
  ≠0    ≠0    "FizzBuzz"
  ≠0    =0    "Fizz"
  =0    ≠0    "Buzz"
  =0    =0    n
770仕様書無しさん:2007/08/03(金) 16:12:34
>>769
考える余地を奪うなw
あとは、ゴルフするしかなくなるじゃないか
771仕様書無しさん:2007/08/03(金) 18:11:03
#include <stdio.h>

int 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");
 }

 return 0;
}

こうですか!? わかりません X-O
772仕様書無しさん:2007/08/03(金) 18:11:33
>>770
考えてないでとっととプログラム書けよ
773ぼるじょあ ◆yBEncckFOU :2007/08/03(金) 20:33:24
>>763
(・3・) エェー こんなもんかYO!
#include<stdio.h>
int main(void){
int i;
for(i=1;i<=100;i++){
if(i%3!=0 && i%5!=0) printf("FizzBuzz");
else if(i%3!=0) printf("Fizz");
else if(i%5!=0) printf("Buzz");
else printf("%d", i);
}
return 0;
}
774ぼるじょあ ◆yBEncckFOU :2007/08/03(金) 20:56:02
>>763
#include<stdio.h>
int main(void){
char *fmt[]={"%d","Fizz","Buzz","FizzBuzz"};
int i;
for(i=1;i<=100;i++) printf(fmt[(i%3!=0)+(i%5!=0)*2], i);
return 0;
}
775ぼるじょあ ◆yBEncckFOU :2007/08/03(金) 21:23:27
>>763
#include<stdio.h>
int main(void){
int i;
for(i=1;i<=100;i++) printf("%.0d%.*s\n", !(i%15)*i, 8-!(i%3)*4-!(i%5)*4, &"FizzBuzz"[!(i%5)*4]);
return 0;
}
776ぼるじょあ ◆yBEncckFOU :2007/08/03(金) 21:35:30
(・3・) エェー 間違っちゃったYO!
for(i=1;i<=100;i++) printf("%.0d%.*s\n", !(i%15)*i, 8-!(i%3)*4-!(i%5)*4, &"FizzBuzz"[!(i%3)*4]);
777仕様書無しさん:2007/08/03(金) 21:42:10




はい、次。
778仕様書無しさん:2007/08/03(金) 22:05:12
すげー
779問題ジャジャン♪:2007/08/03(金) 23:11:57
A
AAA
AAAA
AAAAA
AAAAAA
こーいう図形を出力せよw

簡単すぎるなw30秒か
780ぼるじょあ ◆yBEncckFOU :2007/08/03(金) 23:15:25
>>779
#include<stdio.h>
int main(int argc, char *argv[]){
int i, j, num[]={1,3,4,5,6};
for(j=0;j<sizeof(num)/sizeof(num[0]);j++){
for(i=0;i<num[j];i++) printf("A");
printf("\n");
}
return 0;
}
781仕様書無しさん:2007/08/03(金) 23:35:06
perl -e 'print "A\nAAA\nAAAA\nAAAAA\nAAAAAA\n";'
782問題ジャジャン♪:2007/08/03(金) 23:35:54
>>780
簡単すぎたなw

>>781
そーゆーことしちゃダメ
783仕様書無しさん:2007/08/03(金) 23:45:33
#include <stdio.h>

int main(void)
{
 int i, j;

 for(i = 1; i < 6; i++){
  for(j = 0; j <= i; j++){
   printf("A");
   if(i == 1) break;
  }
  printf("\n");
 }
 return 0;
}

なんのヒネリもないけど。
784仕様書無しさん:2007/08/03(金) 23:48:55
>>780
すんません、降参です

>>781
やられた!
785仕様書無しさん:2007/08/04(土) 01:27:07
perl -e 'print "A" x $_ . "\n" foreach 1,3..6;'
786仕様書無しさん:2007/08/04(土) 02:33:02
  __ / / / ̄//>    _   __/_ ヽ /   __   _/_
    ///   7" /   / /\   /| 三/三     /   /、_
   //|   / /-/_\ /  /  / // | ヽ//  ̄ ̄/ ̄ ̄  / \
 /_,/ \_  ̄ ̄ /__/  \/ _/   / /_/ ヽ    _/     ヽ_

    / ̄ ̄/     // ――     ___   /  ___
  / ̄ ̄/  / ― // ――          / /      /
  / ̄ ̄/  /      /   /   ̄ ̄ヽ   /  \    / ̄ ̄ヽ
 _フ"て_  レ \  /   _/     _/   \_    \   <二/
787仕様書無しさん:2007/08/04(土) 04:41:21
2だけは飛ばせってのが意図したところなのかな
(1..6).each{|i|i==2||puts("A"*i)}
788仕様書無しさん:2007/08/04(土) 08:21:05
>>779
780のような回答はいいけど、781のような回答はできない縛りはあるかな?
「ただし、6行目、7行目…n行目に、Aを任意の文字数出力するように拡張する可能性がある。
追加が何行になっても、Aが何個になっても、すぐ拡張できるようにせよ」はどうだろ。
789問題ジャジャン♪:2007/08/04(土) 10:11:25
>>788
いや、特に無いよ。
半分洒落で出した問題出し(悪いね)

「すぐ***」の件の縛りでもいいんじゃない?

※因みに俺は暇してるのでWEB上からメールアドレスを自動
収集するプログラムを作ってるよw
790仕様書無しさん:2007/08/04(土) 10:31:10
入力:0 から 99 までの整数
出力:入力の英語表記

例:
0 → "zero"
12 → "twelve"
29 → "twenty nine"
791仕様書無しさん:2007/08/04(土) 10:37:25
 scanf("%d",&i);
 if (i==0) printf("zero");
 if (i==1) print("one");
  ・
  ・
 if (i==99) printf("ninety nine");
792仕様書無しさん:2007/08/04(土) 10:53:38 BE:209813142-2BP(0)
int i;
for( i=1; i<=100; i++ )
{
char buf[10];
sprintf(buf,"%d", i);

if( i%15 == 0 )
sprintf(buf,"FizzBuzz");
else
{
if( i%3 == 0 )
sprintf("buf,Fizz");

if( i%5 == 0 )
sprintf("buf,Buzz");
}

printf(buf);
}
793仕様書無しさん:2007/08/04(土) 11:27:40
このスレでコードを披露してる奴って、必死さが滲み出てるよな。
よっぽど>1の記事は、心の微妙な部分に触れる何かがあるんだろうね。
794仕様書無しさん:2007/08/04(土) 11:57:27
最近スクリプト書いてなくて欲求不満気味
795仕様書無しさん:2007/08/04(土) 12:10:57
>>793 なんでおまえ涙目なんだよ?
796仕様書無しさん:2007/08/04(土) 12:32:19
考えることを放棄し始めたら危険信号
797とりあえず:2007/08/04(土) 12:36:00
my @n = qw(zero one two three four five six seven eight nine ten eleven twelve thirteen fourteen fifteen sixteen seventeen eighteen nineteen);
for (my $i = 0; $i < 100; $i++) {
if ($i < 20) {
print $n[$i];
} else {
print qw(nil nil twenty thirty forty fifty sixty seventy eighty ninety)[$i / 10];
if (my $j = $i % 10) {
print " $n[$j]";
}
}
print "\n";
}

2chてTAB使えないんだっけ? インデント変だったらスンマセン
798仕様書無しさん:2007/08/04(土) 12:50:45
>>790
#/bin/sh
/usr/games/number $1
799仕様書無しさん:2007/08/04(土) 13:12:07
>>798
素人が要らん恥かくことないのに。
800仕様書無しさん:2007/08/04(土) 14:14:04
public static void main (String args[]) {
String[] a = {"", "", "twenty", "thirty", "forty", "fifty", "sixty", "seventy", "eighty", "ninety"};
String[] b = {"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"};
String[] c = {"ten", "eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen", "seventeen", "eighteen", "nineteen"};
int n = Integer.parseInt(args[0]);
int p = n / 10;
int q = n % 10;
System.out.println(p == 0? b[q]: (p == 1? c[q]: (a[p] + (q == 0? "": " " + b[q]))));
}
801仕様書無しさん:2007/08/04(土) 14:43:02
Fizz-Buzzより簡単な
「1から100までの数をプリントするプログラムを書け。」
ができない外注が数名プロジェクトにやってきた。ちなみに正解率0%
問題はこの人たちにあるのか?雇う側にあるのか?
802仕様書無しさん:2007/08/04(土) 14:45:27
んなアホな
803仕様書無しさん:2007/08/04(土) 14:57:04
>>801
仕様があいまいだったんじゃない?
それは何進数なのか、改行は必要なのか
文字コードは何か、出力先は、言語は、などなど
804仕様書無しさん:2007/08/04(土) 15:11:58
>>803
言語はjavaだが紙に書かせるようにした。
素直に
public class A {
    public static void main(String[] args) {
        for (int i = 1; i <= 100; i++) {
            System.out.println(i);
        }
    }
}
のようにjavaの言語仕様と単純なループ構造が書けるかどうか見たいだけ
だったのだが・・・。
あまりに単純すぎる問題なので逆に混乱させちゃったのかな?
でも、たまにコンパイルすらできない奴もいる。
805仕様書無しさん:2007/08/04(土) 16:37:39
マニュアルもらえなきゃコンパイルできないなぁ。
今までmake叩いてたやつがいきなりEclipse与えられて
40秒で仕度しな とか言われてもそりゃ無理だ。
せめて半日もらわないと業務レベルには辿り着かんよ
806仕様書無しさん:2007/08/04(土) 16:38:19
#include <stdio.h>

char *an1[]={"zero", "one", "two", "three", "four", "five", "six",
"seven", "nine", "ten", "eleven", "twelve", "thirteen", "fourteen",
"fifteen", "sixteen", "seventeen", "eighteen", "nineteen"};

char *an2[]={"", "", "twenty", "thirty", "forty", "fifty", "sixty",
"seventy", "eighty", "ninety"};

int main(void);
{
 extern char *an1[], *an2[];
 char val[2];
 int i, j, k;

 for(i = 0; i <= 99; i++){
  if(i < 20) printf("%s", an1[i]);
  else {
   k = i;
   j = 0;
   do{
    val[j++] = k % 10;
   }while((k /= 10) > 0);
   printf("%s", an2[val[1]]);
   if(val[0] > 0) printf("%s", an1[val[0]]);
  }
  printf(" ");
 }

return 0;
}
807仕様書無しさん:2007/08/04(土) 16:40:46
最近IDE使いまくってなまってるから
mani() から書けといわれても
調べるのに20分くらいかかりそうだ
808仕様書無しさん:2007/08/04(土) 16:45:04
>>807
mani() がそのへんを如実に物語っているね
809仕様書無しさん:2007/08/04(土) 17:13:15
>>805
それくらい想定済み。業務や環境のことを言ってるのではなく、
プログラマーとしてのスタートラインにすら辿り付いていないのが
多くないかな。hello worldすら出力できないような。
>>807
www
810仕様書無しさん:2007/08/04(土) 17:16:36
>>801-804を読んで。
契約締結後に発覚しちゃったんならご愁傷さまとしか言い様がない。

その出来ない人に関しては、仕事人として「命、売ります」って表に出ては
いけないよう気がする。
・使用言語は事前情報として与えられてるべ?
・(譲歩して)他の経験した言語で解法を示せるべ?

#まぁ、ネタだよね?・・・と思いたい
811仕様書無しさん:2007/08/04(土) 17:44:12
俺だとBASIC、PERL、C、VB、アセンブラ、php
なんかむちゃくくちゃ混ざった形で回答しそうな気がする
812仕様書無しさん:2007/08/04(土) 17:50:05
専門とかだとアルゴリズムとか仮想言語とやらで習うらしい
無駄な気もするけど
813仕様書無しさん:2007/08/04(土) 18:29:41
それをシラフで書けたり、すぐに既存言語に直せるなら価値はあるんじゃね
814仕様書無しさん:2007/08/04(土) 18:57:16
>>801
ネタ乙!!

下らんネタ書いてんじゃねーぞ!!
木瓜!
815仕様書無しさん:2007/08/04(土) 19:16:16
何の言語でもいいから書け

といわれて書けないやつなら確かに死んだほうがいいな
言語指定はちょっと本来の話とずれる
816仕様書無しさん:2007/08/04(土) 19:46:26
プロマネのFizz-Buzz問題も面白いかも。
「プロジェクトマネージメントにおける3大要素を述べよ。」
817仕様書無しさん:2007/08/04(土) 20:36:34
蛋白質・脂質・無機質
818仕様書無しさん:2007/08/04(土) 20:41:10
脂質・糖質・カロリー
819仕様書無しさん:2007/08/04(土) 23:09:37
生麦・生米・生卵
820仕様書無しさん:2007/08/04(土) 23:17:25
友情・努力・勝利
821仕様書無しさん:2007/08/04(土) 23:25:01
貧乏・大尽・大大尽
822仕様書無しさん:2007/08/05(日) 00:13:45
洗脳・搾取・虎の巻
823仕様書無しさん:2007/08/05(日) 00:15:29
愚民・教育・人のため
824仕様書無しさん:2007/08/05(日) 00:25:51
諸行無常・諸法無我・寂滅為楽
825仕様書無しさん:2007/08/05(日) 00:30:40
キャビア・フォアグラ・トリュフ
826仕様書無しさん:2007/08/05(日) 00:58:06
827仕様書無しさん:2007/08/05(日) 00:58:38
2007/08/05時点で

計 593URL
存在する様だ。
828仕様書無しさん:2007/08/05(日) 02:33:13
立法・行政・司法
829仕様書無しさん:2007/08/05(日) 09:02:16
2chの全メニューってのが何を指してるのかがわからん
830仕様書無しさん:2007/08/05(日) 10:44:55
ま、夏休み真っ只中ですから
831仕様書無しさん:2007/08/05(日) 12:36:12
>>829
左部分だよ。


あと、2chに書き込みをする際に*******を
全て取得するプログラムを作成中w


832仕様書無しさん:2007/08/05(日) 13:32:02
痛々しい
833仕様書無しさん:2007/08/05(日) 13:48:59
いや、微笑ましいw
生暖かく見守ろう
834仕様書無しさん:2007/08/05(日) 15:39:44
むしろ生温く
835仕様書無しさん:2007/08/05(日) 15:49:35
いいね、楽しそうじゃん。
wgetとsedで1行で書けるから暇つぶしにはちょうどいいかも。
836仕様書無しさん:2007/08/05(日) 17:13:21
ひどいw
837仕様書無しさん:2007/08/05(日) 17:40:44
俺なら一行も書かないでできるぜ?
838仕様書無しさん:2007/08/05(日) 19:02:25
>>837
それならそれが一番だろうね。
語弊を恐れずに言うなら、タイプ量が少なければ少ないほど
プログラマとして優秀といえるからね。

1行も書かないで用件を満たせるならそれが一番いい
839仕様書無しさん:2007/08/05(日) 20:20:28
「これやっといて♪」
840仕様書無しさん:2007/08/05(日) 21:20:05
君に任せる
841仕様書無しさん:2007/08/05(日) 21:37:50
ざけんな
842仕様書無しさん:2007/08/05(日) 22:18:57
一日数万行
でも実際打ってるのは数百行で残りはコード生成ツールや入力補完というのを目指してます><
843仕様書無しさん:2007/08/05(日) 23:31:54
>>839-840
それで出来るなら問題ないさ。

出来なかったとき、自分でケツを拭けるのが前提だけどな。
844仕様書無しさん:2007/08/05(日) 23:42:43
HQ9+を拡張してFizzBuzz問題に特化したプログラミング言語を作れば、
プログラマーに向かない人でも安心してFizzBuzz問題が解けるようになる。
845仕様書無しさん:2007/08/05(日) 23:47:12
調べてみたらもう既にあった。
プログラマーに向かない人は、HQ9F+を使えば良い。
846仕様書無しさん:2007/08/05(日) 23:55:24
Fizz
847仕様書無しさん:2007/08/06(月) 07:06:02
>>845
HQ9F+ならFizzBuzzくらい誰でも解けると思った。

でも、メモ帳のような桁数表示の無いエディタを使ってたら、
自分は + の数を間違えてしまいかねない。
(保存してからファイルサイズ確認が楽かな?)
848仕様書無しさん:2007/08/06(月) 07:43:57
>>847
HQ9F+使ってFizzBuzzが解けないのは逆に凄い。
849仕様書無しさん:2007/08/06(月) 10:47:34
WebでこんなSQLを見かけたw
Oracleはよく分からんが、動くのか?

WITH A AS (SELECT * FROM DUAL UNION ALL SELECT * FROM DUAL),
B AS (SELECT A.* FROM A, A A2 UNION ALL SELECT * FROM DUAL)
SELECT CASE WHEN MOD(ROWNUM, 15) = 0 THEN 'FizzBuzz'
WHEN MOD(ROWNUM, 5) = 0 THEN 'Buzz'
WHEN MOD(ROWNUM, 3) = 0 THEN 'Fizz'
ELSE TO_CHAR(ROWNUM) END FROM A, A A2, B, B B2;
850仕様書無しさん:2007/08/06(月) 11:21:35
>>849
動く。
ダミーの行をAで2行、Bで5行生成して
A×A×B×B (=100行) のデータの行番号を
select 〜 end で変換してる。
851仕様書無しさん:2007/08/06(月) 21:27:53
Subquery Factoring Clause使うぐらいならOracle限定として
select level from dual connect by level <= 100
をそのまま使えばいいのにな、と思った。
852851:2007/08/06(月) 21:42:57
ためしに短い版書いてみたよ。
select nvl( decode(mod(level, 5), 0, 'Fizz') || decode(mod(level, 3), 0, 'Buzz'), level) from dual connect by level <= 100
動作未確認です。
853仕様書無しさん:2007/08/07(火) 09:57:43
>>852
SQL> select nvl( decode(mod(level, 5), 0, 'Fizz') || decode(mod(level, 3), 0, 'Buzz'), level) from dual connect by level <= 100;

NVL(DECODE(MOD(LEVEL,5),0,'FIZZ')||DECOD
----------------------------------------
1

SQL>
854851:2007/08/07(火) 10:12:59
>>853
あ、mod 3とmod 5が逆だった。
でも結果は返ってきたぞ。どんな環境で実行したの?
855仕様書無しさん:2007/08/07(火) 11:50:22
>>854
Oracle 9i だと 1件、10g だと 100 件、8i だと ORA-1436。
856851:2007/08/07(火) 12:41:03
>>855
なるほど。実験thx。
8iは階層的クエリ(っていうのか?)には対応してないからしょうがないとして、
9iじゃ駄目なのね。
857仕様書無しさん:2007/08/07(火) 13:16:13
>>856
ちょっとググってみたけど、9i がおかしいのか 10g で解釈が変わったのか
釈然としなかった。でも、
  select level from dual connect by level <= 100;
が 1 行しか返さないのに
  select count(*) from dual connect by level <= 100;
が 100 を返すあたり、9i が変なんじゃないかって気がする。
というわけで、↓Oracle 9i 対応版。

 select nvl(decode(mod(rownum, 3), 0, 'Fizz') || decode(mod(rownum, 5), 0, 'Buzz'), rownum) from (select level from dual connect by level <= 100);
858仕様書無しさん:2007/08/10(金) 01:48:32
Prolog版FizzBuzz
普段使わないせいか何となく手続きっぽくなってしまった気がする。

fizz(X) :- X mod 3 =:= 0.
buzz(X) :- X mod 5 =:= 0.
fizzbuzz(X) :- fizz(X), buzz(X).
fizzbuzz_map(X,R) :- fizzbuzz(X) -> R = 'FizzBuzz';
                     fizz(X)     -> R = 'Fizz'    ;
                     buzz(X)     -> R = 'Buzz'    ;
                     R = X.
fizzbuzz_game([]).
fizzbuzz_game([X|L]) :- fizzbuzz_map(X,O),
                        write(O), nl,
                        fizzbuzz_game(L).
range(S,S,[S]).
range(S,E,[S|L]) :- S < E,
                     S2 is S + 1,
                     range(S2,E,L).
main :- range(1,100,L),
        fizzbuzz_game(L).
859仕様書無しさん:2007/08/13(月) 02:35:39
↓Erlangバージョン。まだ勉強したてだから不自然…。

-module(fizzbuzz).
-export([fizzbuzz/0]).

fizzbuzz() -> fizzbuzz(1).

fizzbuzz(101) -> ok;
fizzbuzz(I) ->
X3 = I rem 3 == 0,
X5 = I rem 5 == 0,
io:format(
if X3 -> "Fizz"; true -> "" end ++ if X5 -> "Buzz"; true -> "" end ++ if not(X3 or X5) -> integer_to_list(I); true -> "" end
++ "~n", []),
fizzbuzz(I + 1).
860仕様書無しさん:2007/08/15(水) 01:25:16
流れが止まったところで一問。

約数FIzzBuzz。
1から順に100までの自然数を出力する。
ただし、300の約数なら"Fizz"、500の約数なら"Buzz"、
500と300の公約数なら"FizzBuzz"を出力せよ。
861仕様書無しさん:2007/08/15(水) 01:27:49
公約数は固定で持っちゃっていいの?
862仕様書無しさん:2007/08/15(水) 01:36:18
んなアホな
863仕様書無しさん:2007/08/15(水) 02:13:18
じゃあ仕様にそう書いておかないと・・・
864仕様書無しさん:2007/08/15(水) 09:35:03
300と500の約数をテーブルに入れてry
865仕様書無しさん:2007/08/15(水) 10:13:47
1分でできた

for x in range(1,101):
    if 500%x==0 and 300%x==0:
        print "FizzBuzz"
    elif 300%x==0:
        print "Fizz"
    elif 500%x==0:
        print "Buzz"
    else:
        print x
866仕様書無しさん:2007/08/15(水) 12:03:00
>>865
>>864みたいに考えていた俺は orz
867仕様書無しさん:2007/08/15(水) 13:05:41
でも500と300の約数を先に計算してしまうアプローチもアリと思うな
868仕様書無しさん:2007/08/15(水) 13:10:09
このスレのどこかで書いたやつのまんま
perl -e "print join \"\n\", map { (300 % $_ ? '' : Fizz) . (500 % $_ ? '' : Buzz) or $_ } 1..100"

>>864
perl -e "%r300 = map {$_,1} grep {300 % $_ == 0} (1..300); %r500 = map {$_,1} grep {500 % $_ == 0} (1..500); print join \"\n\", map {($r300{$_} ? Fizz : '') . ($r500{$_} ? Buzz : '') or $_} 1..100"

他人にPerlは使われたくないな、と思った。
869仕様書無しさん:2007/08/15(水) 14:05:28
ワンライナーでやるからだろw
870仕様書無しさん:2007/08/15(水) 18:41:07
1.upto(?d){|i|300%i<1&&v=:Fizz;puts 500%i<1?"#{v}Buzz":v||i}
Rubyって読みにくいよね
871仕様書無しさん:2007/08/15(水) 20:40:25
golfer大活躍w
872仕様書無しさん:2007/08/16(木) 06:09:28
じゃあ逆に水増し大作戦だ、Gauche用
(use srfi-1)
(define (divisors x)
(reverse
(let loop ((n 1) (r '()))
(if (= n x) (cons n r)
(if (= (modulo x n) 0)
(loop (+ n 1) (cons n r))
(loop (+ n 1) r))))))
(define (gcd m n)
(cond ((= n 0) m)
((= (modulo m n) 0) n)
(else (gcd n (modulo m n)))))
(define (common-divisors m n)
(divisors (gcd m n)))
(define (main args)
(for-each print
(let loop ((lst (iota 100 1))
(fizz (divisors 300))
(buzz (divisors 500))
(fizzbuzz (common-divisors 300 500))
(result '()))
(if (null? lst) (reverse result)
(let ((n (car lst)))
(cond ((= n (car fizzbuzz))
(loop (cdr lst) (cdr fizz) (cdr buzz) (cdr fizzbuzz) (cons "FizzBuzz" result)))
((= n (car fizz))
(loop (cdr lst) (cdr fizz) buzz fizzbuzz (cons "Fizz" result)))
((= n (car buzz))
(loop (cdr lst) fizz (cdr buzz) fizzbuzz (cons "Buzz" result)))
(else
(loop (cdr lst) fizz buzz fizzbuzz (cons n result)))))))))
873仕様書無しさん:2007/08/16(木) 07:18:02
ありそうで、ぶちきれるようなパスタソース(長いの!)を書いた人が優勝
874仕様書無しさん:2007/08/16(木) 18:50:06
srfi-1なんて使わずにiota自力実装すれば良かった
875仕様書無しさん:2007/08/16(木) 21:20:36
#include <stdio.h>

int main(void){
int i, j, k, l;

for(i=1;i<=100;i++){
k=i;
while(k>10){
l=0;
for(j=k;j>0;j/=10)
l+=j%10;
k=l;
}
l=i%10;
if(k==3 || k==6 || k==9){
printf("Fizz");
}
if(l==0 || l==5){
printf("Buzz");
}
else{
if(k==3 || k==6 || k==9)
;
else
printf("%d", i);
}
printf("\n");
}

return 0;
}
876仕様書無しさん:2007/08/16(木) 21:27:38
#include <stdio.h>
#include <string.h>

int main(void){
int i, j, k, l;
char buf[20];

for(i=1;i<=100;i++){
k=l=i;
while(k>=10){
sprintf(buf, "%d", k);
if(k==i) l=buf[strlen(buf)-1]-'0';
k=0;
for(j=0;buf[j]!='\0';j++) k+=buf[j]-'0';
}
if(k==3 || k==6 || k==9) printf("Fizz");

if(l==0 || l==5){
printf("Buzz");
}
else{
if(k==3 || k==6 || k==9);
else printf("%d", i);
}
printf("\n");
}

return 0;
}
877仕様書無しさん:2007/08/18(土) 23:48:42
フィボナッチ
878仕様書無しさん:2007/08/22(水) 17:39:00
>>876
意味を読み取るのが難しくて Fizz-Buzz 問題と思えないくらいだ
ただ、ありえないと言い切れないところも怖い
879仕様書無しさん:2007/08/22(水) 21:29:25
流れが止まったようなので、

・さいころを100回ふる(=1〜6の整数からランダムに100回選ぶ)
・最後に目が出た回数を以下のような表にまとめて出力する。(*ひとつでその目が1回出たことを表す)

<例>
1:**************************
2:************
3:*******************
4:*************
5:******
6:********************
880仕様書無しさん:2007/08/22(水) 21:53:39
「さいころを100回振る」のはプログラムでは不可能だろ
1から6までの乱数を発生させて、と書かないとおかしくね?
881仕様書無しさん:2007/08/22(水) 22:18:57
何その突っ込み。
882仕様書無しさん:2007/08/22(水) 23:58:06
for (int i=0; i<100; ++i) {
 puts("さいころ「お付き合いしてください」");
 puts("「ごめんなさい」");
}
883147:2007/08/23(木) 00:32:52
>>880
>>879に、(=1〜6の整数からランダムに100回選ぶ)と書いてあるよ。
884仕様書無しさん:2007/08/23(木) 00:34:38
>>879
#include<stdio.h>
#include<stdlib.h>

int main(void){
int i, j, dice, count[1+6]={0};

for(i=0;i<100;i++){
dice=(rand()%6)+1;
count[dice]++;
}
for(i=1;i<=6;i++){
printf("%d:", i);
for(j=0;j<count[i];j++) putchar('*');
putchar('\n');
}
return 0;
}
885883:2007/08/23(木) 00:34:59
>>883の名前 147 は間違い。
886仕様書無しさん:2007/08/23(木) 01:11:56
#!/usr/bin/perl -w
use strict;

srand;
my @a;
foreach((1..100)){
 $a[int(rand()*6+1)]++
}
foreach((1..6)){
 print $_," ","*" x $a[$_],"\n";
}
887仕様書無しさん:2007/08/23(木) 09:52:11
>>879
r = (1..6).map{|n| "#{n}:" }
100.times{ r[rand(6)] << "*" }
puts r
888仕様書無しさん:2007/08/23(木) 09:54:46
m = Hash.new(0)
100.times { m[rand(6) + 1] += 1}
(1..6).each {|i| puts "#{i}:#{"*" * m[i]}"}
889仕様書無しさん:2007/08/23(木) 18:49:50
お題出してもいい?
890仕様書無しさん:2007/08/23(木) 18:57:34
中はダメっ!!
891仕様書無しさん:2007/08/24(金) 14:46:17
エスケープシーケンスが有効な端末用
#include<stdio.h>
#include<stdlib.h>
#include<time.h>

int main(void){
int i, dice, count[6+1]={0};

printf("\x1b[2J");
for(i=1;i<=6;i++) printf("%d:\n", i);
for(i=0;i<100;i++){
dice=(rand()%6)+1;
count[dice]++;
printf("\x1b[%d;%dH*", dice, count[dice]+2);
{time_t prev;time(&prev);while(!(time(NULL)-prev));}
}
printf("\x1b[7;1H");

return 0;
}
892仕様書無しさん:2007/09/01(土) 14:51:16
ユーザーから正の整数を入力してもらい
足してその数になる正の整数二つの組み合わせを全て出力
例えば 4 と入力した時に 1+3 と 3+1 を一緒と扱うか別と扱うかは自由
出力順序も自由
893892:2007/09/01(土) 14:59:37
あ、1+1=2だから1を入力されるとちょっと困るな。
ユーザー入力は「2以上の整数」に訂正。
894仕様書無しさん:2007/09/01(土) 17:50:24
これはよい再帰の練習
895仕様書無しさん:2007/09/01(土) 18:06:25
再帰する必要ないような…?
896仕様書無しさん:2007/09/01(土) 18:07:27
for でブン回すだけだろ
897仕様書無しさん:2007/09/01(土) 23:55:06
>>892
exit! unless gets
input = chomp.to_i
exit! if input<2
for i in 1..input do
    for j in 1..input do
        puts("#{i},#{j}") if i+j==input
    end
end
898仕様書無しさん:2007/09/02(日) 00:21:45
num=input()
for x in range(1,num):
print x,"+",num-x
899仕様書無しさん:2007/09/02(日) 00:42:46
再帰にさせるには組み合わせ数を任意にすればよし
900仕様書無しさん:2007/09/02(日) 00:46:06
(1...n=gets.to_i).map{|x|puts"#{x},#{n-x}"}
901仕様書無しさん:2007/09/02(日) 18:00:03
こういうのはどうだろうか?

ユーザーから正の偶数を入力してもらい、
足してその数になる素数2つの組合せを出力する。
902仕様書無しさん:2007/09/02(日) 18:11:17
追記。入力する数は4以上で、
そうなる組が存在しない場合は何も返さなくてよい。
903仕様書無しさん:2007/09/02(日) 23:25:00
それって結局素数を列挙する問題では
904仕様書無しさん:2007/09/03(月) 23:37:59
Fizz-Buzzでアウトは洒落にならないと思うが、戦力としていれるPGならば・・・

次のCVSファイルを読み込んで表示しろ
※言語の基本APIのみ使用可
※出力形式などは自分で考える事

#メールアドレス,苗字,名前
hogehoge@mail,jp,hoge,hogera
[email protected],foo,poo

くらいは2時間でやって欲しい所かな?
905仕様書無しさん:2007/09/03(月) 23:50:53
>>904
どこにcommitすりゃいいんだ?
906仕様書無しさん:2007/09/03(月) 23:58:15
>>904
お前に言われたくねえ(w
907仕様書無しさん:2007/09/04(火) 00:52:35
>>904
CSVって、カンマ入りの要素の扱いが面倒だから
標準APIだと結構手間だと思うぞ
908仕様書無しさん:2007/09/04(火) 00:58:56
メールアドレス、名字、名前のどれにもカンマなんて入らないと思うのは俺だけ?
909仕様書無しさん:2007/09/04(火) 01:02:02
仕様次第でそ。
入ってないだろう、で進める前に仕様確認しないと。
910仕様書無しさん:2007/09/04(火) 01:14:00
ああ、CVSって何言ってるのかわからなかったがCSVのことか・・・
911仕様書無しさん:2007/09/04(火) 01:18:09
ユーザがカンマを入れないという保証はない

入力値チェックが甘い上にその情報をエスケープもせずCSVにぶっこみ
さらにそのCSVをそのままDBに突っ込んでて
…つまりユーザ入力でDB破壊できる素晴らしいシステムを知ってる
912仕様書無しさん:2007/09/04(火) 02:19:06
>※出力形式などは自分で考える事
読み込んだままのテキストで表示する私は戦力外ですか。
913仕様書無しさん:2007/09/04(火) 02:40:54
ここでOO信者のワタクシがみなさまに幸せになれるアドバイスをば
914仕様書無しさん:2007/09/04(火) 03:06:34
まず問題文から名詞を抽出します。
CVSファイル 言語 基本API 出力形式 自分
メールアドレス 苗字 名前

次にオブジェクトになりそうな名詞を選択します。

CVSファイル 出力形式
メールアドレス 苗字 名前



ほら簡単でしょ
915仕様書無しさん:2007/09/04(火) 10:24:49
>913-914
…で、実装は?
916仕様書無しさん:2007/09/04(火) 10:57:02
>914
だからどこにcommitするのかはっきりせぇよww
917仕様書無しさん:2007/09/04(火) 12:11:12
>>904
ok.5秒でできた。入力はSTDINからな。
while(<>){print}
918仕様書無しさん:2007/09/04(火) 18:51:09
仕様が曖昧だからねー。
CSVだとしても917みたいなのでも一応条件満たしてるよな。
919仕様書無しさん:2007/09/04(火) 19:00:54
では、もうちょっと具体的に・・・

次のCVSファイルを読み込んで表示しろ

#メールアドレス,苗字,名前
hogehoge@mail,jp,hoge,hogera
[email protected],foo,poo

出力形式は、
メールアドレス:hogehoge@mail
苗字:hoge
名前:hogera

という感じで、列挙せよ
920仕様書無しさん:2007/09/04(火) 19:01:48
ちなみに、ライブラリは使ってよい
921仕様書無しさん:2007/09/04(火) 19:26:18
いい加減CVSとCSVの間違いに気付けよ
922仕様書無しさん:2007/09/04(火) 19:27:10
ほんとだw これはひどいw
923仕様書無しさん:2007/09/04(火) 19:28:07
commit云々いってたのはそれだったのかw
素で気づかなかった。
924仕様書無しさん:2007/09/04(火) 19:32:05
もうねアフォかと
925仕様書無しさん:2007/09/04(火) 19:32:10
おまいら仕事じゃないんだから仕様書を絶対視したれよ。
出題者がCVSファイルと言ったら、たとえ中身がCSV形式だとしても、それはCVSファイルなんだよ。
王様は馬鹿には見えない着物を着ているんだ。
926仕様書無しさん:2007/09/04(火) 19:50:55
>>919
正しい入力を前提にしてみた
で、やけに拘ってる理由は「課題だが、該当スレは監視されてる」って事?
それとも、「オレ様の csv 読み取りライブラリを見てくれ!」って事?
#include<stdio.h>

int main(void){
char mailaddress[256], dummy[256], familyname[256], firstname[256], tmp[2];
int ret;
FILE *fp=stdin;

while(1){
ret=fscanf(fp, "%255[^,\n]", mailaddress);
if(ret!=1) break;
if(mailaddress[0]=='#')
{
fscanf(fp, "%*[^\n]%1[\n]", tmp);
continue;
}
ret =fscanf(fp, "%1[,]%255[^,\n]", tmp, dummy);
ret+=fscanf(fp, "%1[,]%255[^,\n]", tmp, familyname);
ret+=fscanf(fp, "%1[,]%255[^,\n]", tmp, firstname);
ret+=fscanf(fp, "%1[\n]", tmp);
if(ret!=7) break;
printf("メールアドレス:%s\n", mailaddress);
printf("苗字:%s\n", familyname);
printf("名前:%s\n", firstname);
}

return 0;
}
927仕様書無しさん:2007/09/04(火) 19:52:28
訂正
fscanf(fp, "%*[^\n]%1[\n]", tmp);

fscanf(fp, "%*[^\n]);
fscanf(fp, "%1[\n]", tmp);
928仕様書無しさん:2007/09/04(火) 20:02:39
#!ruby -naF,
puts"メールアドレス:%s
名字:%s
名前:%s"%$F
929仕様書無しさん:2007/09/04(火) 20:09:27
BEGIN{FS=","}
!/^#/{printf "メールアドレス:%s\n苗字:%s\n名前:%s\n",$1,$3,$4}
930仕様書無しさん:2007/09/04(火) 20:29:16
>>926-927
そういうコードは正しい入力を前提にしているとは言わない
そういうのはGJというんだ
931仕様書無しさん:2007/09/04(火) 22:47:42
CVSって書いた仕様書でチャイナに発注しちゃったらやっぱその通りに動くプログラムが出来ちゃうんだろうなぁ。
行間を読める日本人っていいなぁ。
932仕様書無しさん:2007/09/04(火) 23:08:55
>>917
どうでもいいけど、print<>で十分。
933仕様書無しさん:2007/09/05(水) 00:13:01
取り敢えずCVSなのかCSVなのかハッキリしてほしい
934仕様書無しさん:2007/09/05(水) 00:15:48
ちゃんと指摘されてるのにCVSって言い続けてるんだから
多分、CVSなんじゃね?w
935仕様書無しさん:2007/09/05(水) 00:50:27
CPU2GHzのWindowsME使ってる。先月PC購入して開発環境探しに行ったら見た瞬間に即決した。
カッコイイ、マジで。そして速い。IE開くとシェルが落ちる、マジで。ちょっと
感動。しかも16bitOSなのにGUIだから操作も簡単で良い。WindowsMEは安定しないと言わ
れてるけど個人的には速いと思う。XPと比べればそりゃちょっとは違うかもし
れないけど、そんなに大差はないって店員も言ってたし、それは間違いないと思う。
ただデータ保存中とかで止まるとちょっと怖いね。Core 2なのに画面動かないし。
安定性にかんしては多分MEもXPも変わらないでしょ。XP使ったことないから
知らないけど安定性があるかないかでそんなに変わったらアホ臭くてだれもMEな
んて使わないでしょ。個人的にはMEでも十分に速い。
嘘かと思われるかも知れないけどベンチマークテストで140MHz位でマジでiMACを
抜いた。つまりはiMACですらMEには勝てないと言うわけで、それだけでも個
人的には大満足です。
936919:2007/09/05(水) 06:22:30
素で気付かなかった・・・
CSVです。
937仕様書無しさん:2007/09/06(木) 00:10:32
俺もよく間違えちゃうからSVN(Subversion)の方が好き。
まあ、木全体が保存されることの方がデカいが。
938仕様書無しさん:2007/09/06(木) 16:27:33
CSVよりTSVの方が好き
939仕様書無しさん:2007/09/07(金) 00:25:05
>>932
一つ勉強になった。ありがとう。
940仕様書無しさん:2007/09/07(金) 10:35:54
>>938
TortoiseSVNを、CSVと一緒にあげんな
941仕様書無しさん:2007/09/07(金) 19:56:37
CVS -> CSVなら、
SVN -> SNV = Separated by Number Values

3 Bob 10 Programmer

chunked(ry
942仕様書無しさん:2007/09/08(土) 08:55:03
>>940
Tab-Separated Values
オロカモノメ
943仕様書無しさん:2007/09/08(土) 19:56:39
ボケにボケを返してくれとサンクスw
944仕様書無しさん:2007/09/10(月) 01:51:14
標準入力から読み込み、そのまま標準出力へ吐き出すコード。
但しシェルのコマンド(cat、typeなど)に丸投げするのはナシ。
テキストモードとかバイナリモードとかは気にしなくてOK。
945仕様書無しさん:2007/09/10(月) 01:56:20
>>944 awk
{print}
946仕様書無しさん:2007/09/10(月) 08:46:49
awk '1'
947仕様書無しさん:2007/09/10(月) 13:38:10
FizzBuzzのまねっこ問題。
1から100の数が対象。数に3が含まれていた場合(3,32,33など)
'San'を出力、5が含まれていた場合、'Go'を出力する。
3と5の両方が含まれていた場合(35など)には'SanGo'を出力、
3も5も含まない場合は、その数字を出力する。
948仕様書無しさん:2007/09/10(月) 14:12:47
int i;
bool san, go;

for(i=0;i<100;i++) {
san = go = false;
if(i/10==3||i%10==3) san = true;
if(i/10==5||i%10==5) go = true;
if( san && go )
printf( "SanGo\n" );
else if( san )
printf( "San\n");
else if( go )
printf( "Go\n" );
else
printf( "%d\n",i);
}
949仕様書無しさん:2007/09/11(火) 00:30:57
perl -e "print join $/, map {( /3/ ? 'San' : '').( /5/ ? 'Go' : '') or $_ } 1..100"
950仕様書無しさん:2007/09/23(日) 04:09:33
任意の文字列の大文字小文字を変化させた、組み合わせを全部出力せよ


入力例:abc
出力例:
abc
Abc
aBc
abC
ABc
AbC
aBC
ABC
951仕様書無しさん:2007/09/23(日) 05:06:05
#include <stdio.h>
#include <ctype.h>
int upper(char* const b){
  int i;
  for(i=0;b[i];++i){
    if(islower(b[i])){
      b[i]=(char)toupper(b[i]);
      return 1;
    }
    b[i]=(char)tolower(b[i]);
  }
  return 0;
}
int main(void){
  char b[40];int i;
  printf("入力:");fgets(b,sizeof(b)/sizeof(b[0]),stdin);
  for(i=0;b[i];++i){
    b[i]=(char)tolower(b[i]);
    if(b[i]=='\n')b[i]='\0';
  }
  do{
    printf("%s\n",b);
  }while(upper(b));
  return 0;
}
952仕様書無しさん:2007/09/23(日) 05:21:19
import Char
f x
 |isLower x = [x,toUpper x]
 |isUpper x = [toLower x,x]
 |otherwise = return x
main = putStrLn . unlines . sequence . map f =<< getLine
953仕様書無しさん:2007/09/25(火) 12:02:32
16進アスキーで書かれた以下のようなテキスト
aa bb cc 00 12
をバイナリファイルに落とす
デリミタはホワイトスペースでいいや
954仕様書無しさん:2007/09/25(火) 14:14:45
>>953
日本語の勉強からやり直しだな
955仕様書無しさん:2007/09/25(火) 14:47:42
>>953
#include<stdio.h>

int main(void){
int value;
FILE *fp_in=stdin, *fp_out;

fp_out=fopen("out.dat", "wb");
if(fp_out==NULL) return 1;
while(fscanf(fp_in, "%x", &value)==1) fputc(value, fp_out);
fclose(fp_out);

return 0;
}
956仕様書無しさん:2007/09/25(火) 16:04:16
#!ruby -na
$F.map{|x|putc x.to_i(16)}
957仕様書無しさん:2007/10/02(火) 17:03:01
Recent codes - RefactorMyCode.com
http://refactormycode.com/

コードをアップすると、誰かがリファクタリングしてくれるサイト
意外といいかもw
958仕様書無しさん:2007/10/03(水) 18:19:18
ワンライナー達にリファクタリングされたり
959仕様書無しさん:2007/10/27(土) 21:27:12
Cを本で勉強し始めて約半年の高3ですが書いてみました↓何かアドバイスが有ったらください。

//Fizz-Buzz問題

#include <stdio.h>

int main (void)
{
int i;
for( i = 1 ; i <= 100 ; i++ )
{
if( i % 3 != 0 && i % 5 != 0 ) printf( "%d", i );
if( i % 3 == 0 )printf( "Fizz" );
if( i % 5 == 0 )printf( "Buzz" );
printf( "\n" );
}
return 0;
}
960仕様書無しさん:2007/10/27(土) 21:38:07
>if( i % 3 != 0 && i % 5 != 0 ) printf( "%d", i );

if(((i % 3) != 0) && ((i % 5) != 0)) printf("%d",i);
このように面倒でも出来るだけ括弧を使って優先順位を
指定する癖をつけた方が良い。
最近のコンパイラは
教科書的な演算子の評価順序をあてにするな!
というwarningを出すのもあるし、糞なコンパイラに移植したとき
演算子の評価順序により起きるバグは見つけるのに手間取る。
961仕様書無しさん:2007/10/27(土) 21:45:29
好みの問題になるかと思うが、括弧つけすぎも読みにくいよ

>>959
改良する余地はあるけど、いいんじゃない。
else ifを使うと挙動がどのように変ってどんな効果があるか考えてみよう。
962仕様書無しさん:2007/10/27(土) 21:58:53
>>960
>>961
アドバイスどうもです。
環境によってはキチンと括弧つけた方がいいんですね。

最初、else ifを使おうとしたのですが、かえって長くなりそうな気がしたのでやめたんです。
でも今度考えてみます。
963仕様書無しさん:2007/11/04(日) 20:55:46
>>960
流石にやり過ぎ。

条件が長いとか、優先順位の微妙な演算子はそれが良いが
そうでなければLispじゃあるまいし全てに括弧付ける必要はあんめぇ。
964仕様書無しさん:2007/11/05(月) 16:13:52
>>963
計算、比較、条件、って単位で括ってるだけだからそう酷いって程でも無いんじゃないか?

個人的には比較対象や論理演算対象は明確に単項で無い限り括りたい。
四則演算以外の優先順位を瞬間的に判断する自身が無い。
C言語だと「シフト演算子 > 比較演算子 > シフト以外のビット演算子」てなってて覚え難い。
皆ソラで言える?
965仕様書無しさん:2007/11/05(月) 16:32:37
(*hoge++)

(*hoge)++
とか?
966  田中:2007/11/06(火) 22:05:50
1から100までの数をテキストボックスに表示するプログラム。ただし、
3の倍数はsdと表示するプログラム、VC#2005でかくとどうんるのでしょう?いちおう書いてみましたが思い通りに動きません
string x="";
private void button1_Click(object sender, EventArgs e)
{

for (int i = 0; i < 100; i++)
{
x += i + " ";
textBox1.Text = x;


if (x % 3 == 0)
{
i.Replace("x", "p");



}
967仕様書無しさん:2007/11/06(火) 22:26:07
C#はまったく知らんのだけど、

>>x += i + " ";

こういう書きかたってできるの?
いや、できてもおかしくはなさそうだけど。

x%3とかあるけど、xはstringなんじゃないか、とか。
}が足りなさそうなのは、まあコピペのミスとして、"x"はなんかおかしくないか、とか。

・・・釣り? それともC#だとこれで良いの?
968仕様書無しさん:2007/11/06(火) 22:49:36
「おもいどうりに動きません」っていうか、動いてないんじゃないか?
969仕様書無しさん:2007/11/06(火) 23:13:05
何処から突っ込めばいいのか分からないくらいだな。
やっぱ釣りか。
970仕様書無しさん:2007/11/07(水) 05:31:48
まずツッコむところは「田中」だな
971仕様書無しさん:2007/11/07(水) 22:09:50
釣りってなあに?
972仕様書無しさん:2007/11/07(水) 22:50:38
fishing.
973仕様書無しさん:2007/11/07(水) 23:01:07
>>967
JavaScriptなら「x += i + " "; 」って出来るけど、C#は知らん。
974963:2007/11/08(木) 11:58:54
>>964
シフトやビット演算が絡むなら流石に書くよ。
剰余と四則演算が入り交じってる場合は書くけど
どちらか片方+論理演算1種類くらいなら楚良でいける。
975仕様書無しさん:2007/11/11(日) 13:43:47
x += i + " ";
xがstring型ならできるけど、int型ならできまへん。
976仕様書無しさん:2007/11/11(日) 17:29:20
こういう問題が出された時、コードの短さと引き換えに見づらくする奴が必ずいるよな。
977仕様書無しさん:2007/11/11(日) 18:07:17
>>976
それは単なるゴルファーでは?
978仕様書無しさん:2007/11/11(日) 19:42:58
>>975
何が出来ないの?
Warningは出るけどコンパイルはされるよ。
そして書いてあるとおりに動く。
979Cをかわいく書いてみた (1/2):2007/12/09(日) 22:18:09
#include <stdio.h>
#define 。 ;
#define 「 (
#define 」 )
#define 『 {
#define 』 }
#define あい i
#define あまり %
#define おっきくなったね ++
#define いっしょかな ==
#define ととのえよう "\n"
#define かえすよ return
#define かくよ printf
#define くりかえすよ for
#define すうじ "%d"
#define すくなめ 3
#define まあまあ 5
#define けっこうおおきいね 100
#define ちいさいかも <=
#define ちょっと 1
#define せいすう int
#define なにもないね 0
#define は =
#define ばず "Buzz"
#define ふぃず "Fizz"
#define ふらぐ flag
#define もしも if
#define めいん main
980Cをかわいく書いてみた (2/2):2007/12/09(日) 22:18:59
せいすう めいん 「 」

せいすう あい, ふらぐ 。

くりかえすよ 「 あい は ちょっと 。 あい ちいさいかも けっこうおおきいね 。 おっきくなったね あい 」

ふらぐ は なにもないね 。

もしも 「 あい あまり すくなめ いっしょかな なにもないね 」

かくよ 「 ふぃず 」 。
ふらぐ は ちょっと 。

もしも 「 あい あまり まあまあ いっしょかな なにもないね 」

かくよ 「 ばず 」 。
ふらぐ は ちょっと 。


もしも 「 ふらぐ いっしょかな なにもないね 」
かくよ 「 すうじ, あい 」 。

かくよ 「 ととのえよう 」 。


かえすよ なにもないね 。
981979:2007/12/09(日) 22:19:31
ごめん誤爆ですorz
982仕様書無しさん:2007/12/10(月) 00:10:52
いや、あってる
983仕様書無しさん:2007/12/10(月) 20:49:12
( ^ω^)
984仕様書無しさん:2007/12/11(火) 17:56:20
#include <stdio.h>
#define AND ,/*改行*/#define BGN {/*改行*/#define BUZ "Buzz"/*改行*/#define CNT i
#define END }/*改行*/#define EQL ==/*改行*/#define FIV 5/*改行*/#define FIZ "Fizz"
#define FLG flag/*改行*/#define FOR for/*改行*/#define HUN 100/*改行*/#define INC ++
#define INT int/*改行*/#define MAI main/*改行*/#define MES printf/*改行*/#define NEX ;
#define NEW '\n'/*改行*/#define NUM "%d"/*改行*/#define ONE 1/*改行*/#define PCH putchar
#define RTN return/*改行*/#define SML <=/*改行*/#define SNC (/*改行*/#define SUB =
#define SUR %/*改行*/#define THR 3/*改行*/#define TIL )/*改行*/#define WEN if
#define ZER 0

INT MAI SNC TIL BGN INT CNT AND
FLG NEX FOR SNC CNT SUB ONE NEX
CNT SML HUN NEX CNT INC TIL BGN
FLG SUB ZER NEX WEN SNC CNT SUR
THR EQL ZER TIL BGN MES SNC FIZ
TIL NEX FLG SUB ONE NEX END WEN
SNC CNT SUR FIV EQL ZER TIL BGN
MES SNC BUZ TIL NEX FLG SUB ONE
NEX END WEN SNC FLG EQL ZER TIL
MES SNC NUM AND CNT TIL NEX PCH
SNC NEW TIL NEX END RTN ZER NEX
END
985仕様書無しさん
#define HELLO_WORLD int main() { printf("Hello, world!"); return 0; }