1 :
仕様書無しさん :
2007/05/08(火) 21:22:40 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
紙に?
紙にフローチャートだったら俺も時間かかりそう コーディングだったらすぐだが
紙に機械語で?
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分で出来た
3及び5の倍数の時は数値は出力されてはいけない
>>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 ご要望どうりに
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); } }
見苦しい もういいよ
>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
つまりコンピュータサイエンス学科卒業生の過半数は文盲?
本気でいるんだな・・・新人教育の最後にやってみよう
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; } } むしゃくしゃしたので書き直した。反省等しない
%は頻繁には使わないから、 初心者なら % を知らないことはありうるかもな。
/* % を使わない例 */ #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'); } }
あってますか? あともっと面白いやり方がある気もします #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; }
スペル間違ってました…orz
プログラマ二年目。Perlです。 print map { my ($fizz, $bazz); ($_ % 3 == 0 ? ($fizz = 1, "Fizz") : "") . ($_ % 5 == 0 ? ($bazz = 1, "Bazz") : "") . ($fizz || $bazz ? "" : $_) } (1..100)
24 :
23 :2007/05/09(水) 01:42:55
あ、 print map { my ($fizz, $bazz); ($_ % 3 ? "" : ($fizz = 1, "Fizz")) . ($_ % 5 ? "" : ($bazz = 1, "Bazz")) . ($fizz || $bazz ? "" : $_) } (1..100) ってすればよかった(´・ω・`)
25 :
23 :2007/05/09(水) 02:13:09
('A`) 結局こう書けばよかった... スレ汚してごめんなさい。 才能無いわ… print map { ($_ % 3 ? '' : Fizz) . ($_ % 5 ? '' : Bazz) or $_ } 1..100
あのぅ。ここで 少なくともCで書くなら 演算部分と出力部分を分けて書くべきであって、 誰も10*100のサイズのバッファを使わないのが不思議でならない。 という発言はスレ違いなのでしょうか?
>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; }
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"); } }
↑そういうアホコードが最新のコンパイラでどこまで最適化されるか興味あるなw
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); }
∧_∧ (ill´Д`) ノ つ!;:i;l 。゚・ と__)i:;l|;:;::;:::⊃ ⊂;::;.,.';;;;'::.:.;::.⊃
// 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
#!/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}
とりあえずコードが書けるヤシと書けないヤシをふるいわけるのが目的なんだから バグがあろうが非効率的であろうが問題無い うちの入社試験でもやってくれんかな。
微妙にうっかり八兵衛検出機能も内蔵しているのもよいな。
>>37 「実引数が残っているにもかかわらず書式が尽きてしまう場合,余
分の実引数は,評価するだけで無視する。」
(JIS X 3010 : 2003 (ISO/IEC 9899 : 1999)
気が早いのか、思い込みが激しいのか、(と言ったら大げさだが) Fizzがfizzになったり、BuzzがBazzになったり独自仕様な人もいるな。
改行文字入れるのはいいの?
2分足らずで紙に書くのはなかなか難しいと思う
んなこたないだろw よっぽどあせらなきゃ無問題。 と、国語の入社試験で余裕ぶっこきすぎて時間切れになって 半分白紙で出した俺が偉そうに言ってみる。
プロの書くコードって、きたなくて読みづらいんですね。
48 :
仕様書無しさん :2007/05/09(水) 20:31:45
マ板がアホ学生の巣窟に見えたのは気のせいじゃなかったんだ・・・
>>30 それを実行させると、
なぜか途中で「(中略) 」などという文字列が出てくる。
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...
いるよな、こういうアホって。
2分ってとこが味噌だよな。
#include <stdio.h> int main() { int i; for (i = 1; i <= 100; i++) { } return 0; } とりあえずコレだけ書いて、それから中身を書こうと思ったけど、ここですでに30秒つかってる。 2分だとけっこうギリギリかも。
>>44 設問を額面通りに受け取るなら空白も入れられないが
それじゃ見づらいとは思わないのか?
コーダの発想だな、まるで。
要求される2分間という時間と10〜15分という実績の時間について。 まさか優秀な奴を使えば工期が1/5で済むと思っていないよな
>>50 つFizzBuzz[123456789101112131415]
>>50 12345678 も 123456789 も、更には 1234567891011 も 3 の倍数だとは気付かなかったのか。なんと間抜けな。
60 :
50 :2007/05/10(木) 01:42:30
>>59 >12345678 も 123456789 も、更には 1234567891011 も 3 の倍数だとは気付かなかったのか。なんと間抜けな。
え?
なぜ
>>50 の文章から
「3 の倍数だとは気付かなかった」という結論になるの?
12をFizzと書け、という仕様なら、4Buzzじゃなくて "45は5の倍数だからまとめてBuzz"になるはずだしなあ。 表示と評価のタイミングが不透明だな。
62 :
50 :2007/05/10(木) 02:13:22
>>61 >"45は5の倍数だからまとめてBuzz"になるはずだしなあ。
あ、スマン。
それは確かに見逃してた・・・
64 :
50 :2007/05/10(木) 02:17:12
となると、数字が表示される可能性が 全くなくなりそうだな。 少しは面白い問題になったと思ったのだが・・・
その判定だと、どんな数も0か5が出るまで待てばBuzzれるからな その前にFizzれるか否か、だけだから 数値を出力する機会はなくなる
>>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]
#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); }
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; }
>>66 よ大丈夫か?
1234567891011121314......9899100は既に巨大な5の倍数だが?
3の倍数かどうかは知らん
70 :
66 :2007/05/10(木) 08:03:04
>>69 仕様に書かなかったが「最短一致」の繰り返しってことで。
数が四つ以上連なる3の倍数は無い
72 :
36 :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);
74 :
36 :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に過ぎん。
計算に使っちゃダメだろ。
77 :
仕様書無しさん :2007/05/10(木) 15:38:36
あ、論理式を計算してるのかスマンw
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で書いたら読みにくかった
>>78 それじゃ
Fizz
Buzz
がFizzとBuzzなのかFizzBuzzなのか判別できないよ
/* 力技 */ #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; }
>80 おまえ頭いいなw
↓キレイ派、最適化&速度派
printf("012Fizz4BuzzFizz78FizzBuzz11Fizz ....");
しかし、ここまでで最小公倍数15を明示的に使ったのは>80だけとは、、。
%は遅いからなるべく論理演算で判定したほうが速いだろ。 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 がやりたかったのはこんな感じかな。漏れ的にもこんなコードが
一番好きだな。
ブログとかでもしきりにこのコードの話が盛り上がっているのを見ると、皆さん内心は不安なんだろうなと感じてしまFizzます。
エディタもデバッガも使わず、いきなり紙にミスなく書き出せといわれたら無難にこう書くな。 "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; }
紙? いったい何時の時代の話なんだ。
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)までしか表示されなくないですか?
>>92 試験もしない似非PGが書いているからだ。
面白い書き方するなぁ。 1〜100迄というのを明示したい時は、俺は普通に for(i = 1; i <= 100 と書くけどな。
101とは書かないよなぁ
96 :
文系学生 :2007/05/11(金) 14:26:13
>94 たしかに、どう考えてもそっちのほうがわかりやすいですね。 俺センスなさすぎwwwww
なんか上のほうのレス見てたらFizzBuzz問題は200人に1人しか 出来ないってのが本当な気がしてきたよ。 細かいところで未熟な部分はあるけど文系君のコードが一番素直で 良く書けてる気がするのは気のせい?プログラミングってやっぱ才能なのかな。
>紙? >いったい何時の時代の話なんだ。 そのうち100人くらいは問題すら読めていなさそうだなw
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");
#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; } これでいいですか?
ゴメwまじで読んでなかったww
なんかこのスレを見ていると、Fizz-Buzz問題の本当の意味は 「彼らはまったくちっぽけなコードでさえ、 実際に動かして確認することをしない」 という事にあるような気がしてきた・・・
こういうミスってプログラムを実際に走らせれば一瞬で気づくよな。
>>1 がテストを許さず紙に一発書きを要求してるのは何故だ?
1から100までの十進整数を順に1行ずつ出力するプログラムを書け。 ただし、整数が「7」という数字を含む場合は、 整数のかわりに "CRAP!" と表示すること。
Joel On Softwareって本でも、面接のときに簡単なコードを書かせてみるって話が載ってるけど、 この本では、紙にコードを書くのは難しいから、ロジックがかけてれば多少のバグはあっていいと 伝えてPGを安心させるとか書いてあるよ。
この程度の問題でいちいちバグ出す奴はリアルバカ。 こういう奴に限ってインデックスの境界周りなんかでバグ出しまくる。 UnitTestが流行っていることもあってかコード書いた直後の 読み返し&脳内デバッガによるチェックが杜撰になってきている傾向があるな。
と、普段テストなんかいらないと思っているバグ量産機さまがおっしゃっています
↑リア厨レベルの論理記号も理解していないバカ
>>110 >UnitTestが流行っていることもあってか
あのねぇ、
それは「流行っている」じゃなくて
「有効性が認識されるようになった」だけだよ。
走らせれば1秒で正誤がわかるのに わざわざ脳内デバッグで労力を使うのか・・・。
>>110 何度も読み返して脳内デバッガで確認した後でさらに実際にテストするの?
そんな労力を「この程度の問題」に費やして誰が得するの?
それとも確認はもう十分だから実際のテストはしないの?
読み返し/紙上デバッグ/机上デバッグ? それはまたいつの時代の話なのか バグの存在は試験でしか証明できないのだ
一般に UnitTest を否定する奴って まともに UnitTest が出来ない 長大な関数を書く傾向があると思う。
このスレのどこかのレスからUnitTestが批判されていると 読み取った奴は国語力に相当問題があるよw
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; }
つらつら思うに。 こんなに何種類も回答が出てるのにさらにコードを貼る奴ってどんなレスが欲しいんだろう。 ほめて貰いたいのか?
すなおに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); }
それが素直に見える人もいるのか
ノ
BEGIN { for (i = 1; i <= 100; i++) print i ~ /7/ ? "CRAP!" : i }
>>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);
}
>>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);
}
}
}
#include <stdio.h> #include <string.h> int main() { int i; char s[4]; for (i = 1; i <= 100; i++) { sprintf(s, "%d", i); printf("%s\n", strchr(s, '7') == NULL ? s : "CRAP!"); } return 0; }
129 :
80 :2007/05/12(土) 01:24:20
70代がカオスw
流れを読まずに、ペタ。 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); } } }
美しすぎる・・・ 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.
1÷15
15使うとかっこいいのはわかるけど、 あとで条件が変わって3と4になった場合に、修正箇所としてわかりにくい。 どうしても15を使いたいなら、3と5から公倍数を求めるプログラムも書いておくべきだろう。 1年後に他人が見て修正が容易なように書いておくのが玄人と素人の違いではないかと。
一年後にFizzBuzzの仕様変更によるメンテってどんな罰ゲームだよw
初心を思い出させるのに絶好の機会だと思うが。
いつの間にかプログラムを紙に書く前提になっているんだが、読解力不足。 FizzBuzzの問題では「プログラムを書け(Write a program)」としか言ってない。 それに対して著者が「優秀なプログラマならば紙に完全に書けるだろう(Most good programmers should be able to write out on paper)」と言っている。
改行を出力しろとは書いていない。だからすべてつなげて表示すべき。 とか言ってるアホと同レベルだなw
なんにも考えないで作った。所要時間は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 ×脳内ルール △脳内仕様 ○脳内言語
まぁここで必死こいてコード見せてる奴は別だろうけど、 実際いるからな、アルゴリズムというか、処理の組み立てができない奴が。 今は派遣なんかでそういうのが入ってきて、しょうがないから細かく指示して 書かせるんだけど、いちおう「経験者」扱いで入ってきてるんだよな。 自分ではコード書けないくせに、「○○の開発を経験」という実績だけは 積んでいくんだよ。
何かFizzBuzzに続く「プログラミング噛ってりゃ出来て当然」レベルの問題を出題しる
1から100までの素数をプリントするプログラムを書け。ただし3の倍数のときは数の代わりに「Fizz」と、5の倍数のときは 「Buzz」とプリントし、3と5両方の倍数の場合には「FizzBuzz」とプリントすること。
145 :
仕様書無しさん :2007/05/13(日) 23:39:25
>>143 Joel On Software の著者が面接の時に出す問題の例
・文字列をその場で逆にする
・連結リストを逆にする
・バイトデータの中で立っているビットを数える
・二分検索
・文字列の中で同じ文字が一番長く続くところを見つける
・atoi
・itoa
ハノイの塔をマウス1クリック1ステップで解答の紙芝居を連続表示せよ
>144 ネタじゃなかったら中学校の数学からやり直せ ……と言いたくなったが、つまり「そういうの」を引っかけるための問題か。
148 :
仕様書無しさん :2007/05/14(月) 15:55:55
仕様バグを未然に防ぐスキルを確認する試験だな 対コボラスキルを確認する試験とかあると便利かもな
二つの矩形が重なり合っているかどうかを判定する関数を書け、 ただし思考の過程をホワイトボードを使って説明しながら。 MSにはこんな試験があるらしい。
>>150 >仕様バグを未然に防ぐスキルを確認する試験だな
回答時間中は質問を一切認めず、
そして回答が終われば仕様どおりに実装しろと時間延長でやり直しをさせ、
やり直してる途中で仕様変更が伝えられ、結局最初のものを提出とする。
という精神耐久力テスト
//
>>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);
}
aaa aaa test
>>155 こんな感じの矩形はどうするの?
/\
\ \
\/
これじゃ抜けがあるかな? 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; }
>>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;
}
つづく
>>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);
}
>>159 >まだスマートに書けそうだけど、一応itoa()。
>
>char* reverse(char* s, int len)
0点
>>159 は黒のボールペンを赤といって売りつけるタイプ。
>>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;
}
>>145 >・二分検索
は、最初にアルゴリズムが発表されてから、正確な実装が発表されるまで
15年くらいかかったとかペントリーの本に書いてあったぞ。
まるでこのスレのようだ。
165 :
164 :2007/05/15(火) 01:41:05
>>164 s/ペントリー/ベントリー/
ローマ字打ちなのにこの手のミスが多い。昔カナで打ってたせいかな
>>145 >・連結リストを逆にする
単方向でいいよな。 item は next が次の奴を指してる、良くあるパターンってことで。
item* reverseList(item* p) {
item* prev = NULL;
while (p) {
item* next = p->next; // 上書きする前に取っとく
p->next = prev; // 前の奴を指す
prev = p; // 自分が前の奴になる
p = next; // 次の方どうぞ
}
return prev; // 新しい先頭
}
167 :
155 :2007/05/15(火) 04:52:46
>158 そうか、それだけで判定できるのか…俺もまだまだだなorz
seq 100 | perl -ple '$_=(Fizz)[$_%3].(Buzz)[$_%5]||$_'
矩形って・・・長方形って書けばいいのに(絶句)これだから頭でっかちは困る ついでに言うとひし形みたいな場合は判定できるのか?普通はPointx4の判定だろ・・・
この業界で"矩形領域"を"長方形領域"なんて言ったらいい笑い者だと思うが。
長方形領域でぐぐったらいっちゃん上にCiNiiがきたんだが、、、 九州大学大学院とおまいらと、さて世間はどっちを信じるだろうね。
超包茎ってw
あれだな・・・幼稚園児、小学生は覚えた言葉使いたくて使いたくてしょうがないもんな…
____ / \ /\ キリッ . / (ー) (ー)\ / ⌒(__人__)⌒ \ 矩形領域! | |r┬-| | \ `ー'´ / ノ \ /´ ヽ | l \ ヽ -一''''''"~~``'ー--、 -一'''''''ー-、. ヽ ____(⌒)(⌒)⌒) ) (⌒_(⌒)⌒)⌒)) ____ /_ノ ヽ、_\ ミ ミ ミ o゚((●)) ((●))゚o ミ ミ ミ /⌒)⌒)⌒. ::::::⌒(__人__)⌒:::\ /⌒)⌒)⌒) 長方形領域だっておwwww | / / / |r┬-| | (⌒)/ / / // | :::::::::::(⌒) | | | / ゝ :::::::::::/ | ノ | | | \ / ) / ヽ / `ー'´ ヽ / / | | l||l 从人 l||l l||l 从人 l||l ヽ -一''''''"~~``'ー--、 -一'''''''ー-、 ヽ ____(⌒)(⌒)⌒) ) (⌒_(⌒)⌒)⌒))
悲哀が漂う。 ま、楽しくやってそうだからいいけど。
>>171 ググるんだったら両方の単語でやらなきゃ。
"長方形領域" に一致する日本語のページ 約 9,430 件中 1 - 10 件目 (0.19 秒)
"矩形領域" に一致する日本語のページ 約 36,200 件中 1 - 10 件目 (0.09 秒)
まあどちらもRectangleなんですけどね
>>178 以外や以外、なかなか健闘してるじゃん、”長方形領域”。
あまりメジャーな言葉ではないが、あと半世紀もすれば勢力逆転も夢じゃないな。
本当は”矩形領域”なんだ・・・と一人でぶつぶつ言ってりゃいいさ。
そして、
>>171 は「本当は"長方形領域"なんだ…」と、0.26人でぶつぶつ言うわけだ。
領域いらないだろ・・・ 矩形 に一致する日本語のページ 約 679,000 件中 1 - 10 件目 (0.03 秒) 長方形 に一致する日本語のページ 約 1,640,000 件中 1 - 10 件目 (0.03 秒)
>>170 の、"この業界で"という条件に近づけるために"領域"という単語を付加してるのがわからんの?
単純な"長方形"って単語だったら小学生の算数のページだってヒットしちゃうじゃん。
ながしかく領域
四直角形
九十度四個系
まさに仕事の遂行ができない不採用の人
不採用形
終了形
数の暴力に屈するわけにはいかないのです。
なぜデータ構造ではなく問題での呼び方で盛り上がるんだw
コナミの矩形波クラブって知ってる?
>>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); } } } }
100はいらないのか、そうなのか
>>196 仕様には3と5の倍数と書いてあって、
15の倍数とは書いてないぞ!
それに評価の順があっていない!
3の倍数、5の倍数、3と5の倍数、の順だ!
とっとと我々の仕様どおり実装し直したまえ!
君のかわりなんていくらでもいるんだからな!
※これはイメージです
ループカウンタi やめれ
j
>>198 面白くて不快でスレ違い(愚痴スレへどうぞ)
ループカウンタiって駄目なの?
>>202 別に構わないだろ
昔に比べて i という一文字変数を使う理由は減ってるから
「1文字変数にする理由がない」と言う人もいる
204 :
仕様書無しさん :2007/05/17(木) 16:42:40
実にくだらん理屈だな。 慣用的に意味が通じて簡潔に書けるんだから、別にいいじゃんと思うけどな。
すごい!これならiの代わりにぴったりだね! ↓
iがだめならj,k,l,n,mと使った火にゃあ
i2,i3,i4 ii,iii,iiii
生産性を低下させる悪名高き構造化の名の下に、 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;//一気に脱出 } }
>>208 それ、面白いつもりで書いてるの?
それだけがちょっと知りたい。
>>209 別に
結局どんな手法を採用しようにも、
イタチゴッコな問題は結局イタチゴッコにしかならないというのが言いたかっただけ。
関数オブジェクト?
クロージャ
ここに俺の亀頭落ちてなかった? 参ったな・・・昨日買い換えたばっかりなのに・・・・
ミニサイズのやつだろ? さっきぬこが咥えて持ってったけど?
わらかすなぁ
他スレでもFizzBuzzやってるとこあるけど LispとPythonの例は少し趣向が違うねぇ Rubyは書き方自体は色々出てるみたいだが 他言語の真似に落ち着いてるものが多い 一つだけ特徴的なのはあったが、あれはちと面倒臭いなw
fizzbuzzでshort codingをやった人が、 2番目に短いコードを開始2分以内に発見したとか言ってるのを聞いて非常に驚いた。 流石に現在の最短コードにたどり着くには結構時間かかったらしいけど…
>現在の最短コード これどんなコード?
そのURLのどこにコードがあるんじゃい
最短のコードだと、読む(理解する)のには時間かかりそうだ
無駄時間取り戻しポンプが切実に欲しい今日この頃
>>221 ゴルフ的には、Perlかと思ってたら、Bashが一番短いのかー。
しかし、対応言語が半端なく多くてすげえなw
Cで素数を求めるプログラムを作ってもらえばその人のセンスが結構分かるな
そんなのアルゴリズムを知ってるかどうかじゃん センスは関係なくねーか
そういう知識もあわせてセンスという事にすりゃ ポジティブシンキングっぽくていい気がする
氏ねばいいとおもうよ(AA略
まぁとりあえず書いてみりゃ分かる 素数はかなり奥が深いが付加軽減を考えると限がないのも確か
あー付加じゃなく負荷
プログラマとしての センス はわからない プログラマとしての 常識のあるなし はわかる
漏れなら最初に 素数ってなんですか? と質問する。 次に サンプルソース下さい。 と要求し、 最後に 仕様がいい加減で分かりませんでした。 と言い訳する。
こういうのって本当は慣用句感覚で使えないと駄目なんだろうな… 普通の人間においては、これらのようなちょっとした知識の積み重ねがあって 初めて新しいアルゴリズムを考えることが出来るらしいし
アルゴリズムの発明は理学部に任せます
じゃあ素数じゃなくて完全数を見つけるプログラムにしようぜ
「こんなん誰でもできるだろ( ´,_ゝ`)」と思ってコード貼ったら バグを指摘されまくって吊りたくなる問題がいいな
素数判定はアリだと思う。 試し割りだっけ?forで全ての数で割るようなアルゴリズム。 あれで作らせて100までの素数を出力しろ、って感じ。 経験者って言うならば、30分で出来なきゃお帰り願いたい。
>>239 そんなん誰でもできるだろ( ´,_ゝ`)
完全食よりターローだろ
>>237 5つ目が2時間半経っても出て来ねえw...
>>240 だが現実は30分でできない人続出www
うちの職場ならザラにいそうだな…
>243 30分以内に書ける人と丸1日(6時間として12倍)掛かる人。 給料がほとんどかわらないという現実を先に何とかして欲しいところ。
>>243 そこらの、ちょっとプログラミングかじっただけの奴ですら10分ぐらいでできると思うぞ。
マジでそんな職場あるんだな。
>>245 おいおい、そんな職場ばかりだぞ
なにせマトモに研修とか勉強でアルゴリズムとか、習ってない人が多数。
それが経験者を装って現場に投入され、経験年数だけが溜まる。
>246 じゃ日曜アマグラマやどこぞの刑務所出身の人達雇った方がマシなワケだ
経験年数が足りなくて就職できん
どっかにいろんな言語のまとめないかな? バイト数じゃなくてコードが見れるとこ
>247 コードを書くという作業だけを考えればマシかもしれんな。 問題は単純作業とかやらせると飽きる人が多いとか、勝手に仕様変えちゃうとか、そっちの問題はあるかもしれんけど。 >248 腕にある程度の自信があるならば、ハッタリかませてOK。 登録派遣とか採用する時なんて、経歴書の1行で決めやがる。 現場に入ってしまえば嘘なんてばれるんだけどな。 経験年数を2年とかにしておけば、どっかは拾ってくれる。 そこで本当に年数を稼いでしまえば、後はどうとでもなるさ。 本当に優秀と認められれば、正社員にならないかって絶対に来る。 どっちにしろ、テメエの腕次第。
アセンブラのコードがないね
そうだね
「出力」のとこが問題かなぁ。 実質Brainf*ckの類はアセンブラに近かろう。
素因数分解ってこんな感じでええんかいな? 当方ブランク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; }
pythonバージョン for x in range(2,100): for y in range(2,x): if x%y==0: break else: print x
> 254 kの意味わからん・・・ break するならばいらんのでは?
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; }
>>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 か。ミスってた。
>>256 break で抜けるのは j のループだけなんじゃないの?
勝手に最適化(最不適化)しないで最初は素直な実装を試みるって所を見てるんだよ!!
偶数を除くとか、√(被除数) までしか試さないってのを 真っ先に思いついた俺は素直じゃないですか? #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; }
>>261 確かにそうなんだけど、sqrtって計算コスト軽いの?
意外と軽いけど間の変換が無駄なんだよな
めっちゃ初心者だけど書いてみた #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"); } }
ぬるぽ!
すごいな
>>1 さんは・・・俺には1から100までの数を表示するプログラムなんて書けないよ。
ええっと、πは何億桁表示すれば許していただけますか?
整数とか自然数って書いて欲しいな。要件定義はしっかりしてもらわないと。
あ、1から100ってのが、2進数だという可能性もあるな。
>>269 そうやって屁理屈こねて、結局何のプログラムも書けないタイプか?w
>>270 いるよね、こういうのw
屁理屈こねるけどそれも間違っていることが多い。
ちなみに1から100が2進数とか言うのもツッコミどころ多すぎ。
001から100までならば2進表記の可能性もある、が正しい。
色々で直しておいで、ぼうや。
001から100までならば何進表記なんだか全然わからない が正しいのでは?
0 から (900-800) まで これでok
だからその900や800は何進法で表記されているのか?
ちょっとウンコしてくる
>274 とりあえずn進法(n>8)だけは確かだと思われ アラビア数字で書いてあるから、いろはを使う48進法でもないなw
何の指定もないんだから、10進法に決まってんだろカスが
どうしてですか
「何の指定もないんだから、10進法」が通るんだったら素直に100って書きゃいいじゃん。
何も指定ないんだから10進数に決まっている、というのは問題かもしれない。 でも、何も指定ないんだから2進数の可能性が!というのはもっと問題だと思う。
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
>>283 ふつう。
というか、出題者はこのようなシンプルで正しい解答を期待している
#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"); } } 単に自分の書き方にしただけで模範でもなんでもないんだけどね
剰余演算は各ループ2回づつじゃないと駄目だと思うの。
>>286 なんで?
283も285も1回で、必要な出力を得られるのでは?
>>285 テキトーすぎたよ カッコ閉じてないしインデント無茶苦茶w失格w
職業プログラマと情報サイエンスとでは、求める資質が違うだろ。
マの入社試験であれば、シンプルで素直なコードが正解だが、
学者になるんだったら、時間かけて練った答えも有りだと思う。
たとえ最終的な解が同じ物になるにしても、生産性の高い道具を目指すのか、
新しいパラダイムを生み出すことを目指すのかで、たどる過程は異なるものだ。
そういう意味で、
>>1 の筆者は、この問題の本質を取り違えている。
この程度の問題で情報サイエンス(笑)って本気かwww 学者になるやつのテストならば最低でもアルゴリズムだろwwwww
簡単なプログラムも書けない情報サイエンスの学者って許されるのか? 新しいパラダイムを生み出すにしても、基礎を知ってないと話にならんだろう。 何もないところから新しいものを生み出すなんてことができるのは、天才だけだ。
>>291 書くだけなら猿でも書けるだろ。
言われたとおりに正確に手っ取り早く書く、っていうのが職業プログラマのアプローチで、
コンパイラと相談しながら、最適解を追い求める、ってのがオタクのアプローチ。
情報サイエンス学科ってのはオタク養成の場でもあるんだから、専学出身の奴らとは
アプローチの仕方が異なるだろって話。
情報サイエンス学科が馬鹿の集まりだなんて、一言も言ってないよ。
293 :
291 :2007/06/19(火) 20:56:08
>>292 >情報サイエンス学科が馬鹿の集まりだなんて、一言も言ってないよ。
はて、どこをどう読んでそういう理解に至ったのやら。
俺もそんなこと一言も言ってませんが、何か。
「理論や知識は一杯知っているが、それを適用して実際に動くものは作れない
(プログラミングもできない)」ような頭でっかち秀才君が、学者になれるのかって話。
他の学問領域はともかく、情報サイエンスでは難しいと思うが。
>>292 >書くだけなら猿でも書けるだろ。
それが書けない、と何度も繰り返し書かれているわけだが。
>アプローチの仕方が異なるだろって話。
自己弁護乙。
>>292 書くことのできる猿を連れてくるか、猿以下らしい新人を書ける様に教育してくれないかな?w
Fizz-Buzz問題を目にするまでは >猿でも書けるだろ と自分も思いこんでいた。 だが経験を振り返ってみるとシンプルなプログラムを思いつくことが出来ずに 時間をかけて人が書いたプログラムの猿まねをするしか出来ない人間は 確かに多い。 >学者になるんだったら、時間かけて練った答えも有りだと思う。 単純な課題に短時間でシンプルな答えを出せない人は職業プログラマはもちろん 学者にも向いてない。 学者になるには知識以上にシンプルなプログラムを素早く思いつくことが 出来る論理的思考能力が必要なのだ。 プログラマに向いてないからといって人間の価値が否定されるわけではないのだし 猿まねしかできない人間がプログラマになろうとするのは 雇う側にとっても雇われる側にとっても不幸なことだ。
プログラムを紙に書き出すような人間には プログラムを書いてほしくないなあ
>>297 昔は紙に書くのがあたりまえだった。
マシンの使用時間が貴重だったから、あらかじめ紙の上でプログラムを組んでこれまた紙の上で
デバッグして、完成させてから打ち込まないといけなかった。
大昔のことと言わないでくれ。
コンピュータ上のエディタでちまちました編集を繰り返してプログラムをようやく完成させるのでなく、
コンピュータを使わなくても頭の中で完成に近いコードを組める力があるのは、大事なことだと思うんだ。
>>298 あんたがコボラじゃないなら、話を聞いてやる
大昔 COBOL & FORTRAN 昔 C/C++ & Java 今 VB & C# & Perl & Ruby のジジイじゃが、駄目かね?
概念図みたいなものは紙に書くし、 コードもラフスケッチ(でかくなりそうなコードの俯瞰みたいなの)は やっぱり紙に書いたりすることもあるなぁ。
脳内でコーディングを済ませて後はそれを一気に打つだけ みたいなスタイルでいけるほど慣れてないと駄目ってことですか?
>>300 Rubyを紙で、ってのがよくわからん
ブロックはどう表現するんだ?
仕事の話ならドキュメントの充実度次第
>>303 Ruby は別に紙に書いとらんのじゃが。
紙に書いとったのは大昔のことじゃな。
読み返して思ったが、お前さんがレスしようとしたのは
>>301 さんかね?
ワシも同じようなことやっとるよ。(概念図やロジックの見当をつけるためのラフなコードの書き出し)
若者と話を通じさせるのは難しいもんじゃて。ワシの頭も固くなった。ふぉふぉ。
>>302 この問題が出題されるような所は、そうでないと駄目だってことだろうね。
時間制限の中で必要なロジックを記述できることが大事だと思うので、
ある程度の誤記は免じてもらえるんじゃないかと思うけれども。
不合格の回答例を見たい。
307 :
303 :2007/06/19(火) 23:53:15
>>305 俺はエディタ上じゃなければモノを考えられんのだが、
直接コードを書かずに脳内で推敲したり紙に書いたりするメリットが
よくわからないので教えてほしい
>>303 は
>>300 ==
>>301 と誤認しただけ
頭脳内に構築した論理構造体を写像して最終的にコードにするんだろ。 構築中の論理構造体に曖昧な点があったらコードに写像できないだろ。 その曖昧さを解消するために紙と言う中間媒体を使う人が多いというだけの話だと思うが。
>>307 頭のできがちがうようじゃね。
ワシは、エディタの画面だけだとコードやロジックを追い切れんことがあるので、
紙に全体像のスケッチや巨視的なコードを書き出して整理したい性分なのじゃが。
お前さんは、エディタの画面だけで、プログラムの全体像が見えなさるのかね?
リファクタリングが必要になった時は? ワシもこれがわからんので教えて欲しい。
>>309 コード書いてるときにプログラムの全体像はみえんが、
別にそれでもこまらん気がする。なんかこまるか?
リファクタリングについては、なにがわからんのかわからん。
>>310 例えば、同じようなロジックを別々の場所で再開発していた時に困る。
使用言語やエディタによるかもしれんが。
>>311 コードの抽象化を進める過程で、全く違うことをやるための
ロジックが結果的に似てしまうってのはよくある
コードがでかくなるとエディタで追えんくなってくるね そーゆー時に紙とペン使うのは良いと思う 業務でも学問でもFizzBuzzくらいは メモ帳でも書けてくれにゃ困るが
細かい文法上の問題とかはIDEが補完してくれるからどうでもいい。 問題はforとifの構造すら思いつかない猿以下のPG
IDEの補完に頼りすぎた猿以下のPGはこれから増えるんでないかなー
IDE使おうがよく打つ人間ならそのうち頼らなくても打てるようになるさ 補完機能って大抵馬鹿だし
インデント等の補完が大嫌いだ オレは自分でやりたいんだよ・・・・なぜか。
多人数の場合、論外な書き方が出にくい利点はある。 俺はVBの自動スタイルが大嫌いだが VBマの平均レベルを考えるとあれで良いんだろう。 むしろもっとキツくして良いくらい。
>>314 禿同
>問題はforとifの構造すら思いつかない猿以下のPG
さらなる問題は携帯の開発現場などを見渡してみても
実際そのレベルのPGが圧倒的に多く派遣されているってことだ。
PGをやるから猿以下って言われるだけで他の仕事なら
能力を活かせて人並みに評価される場もあるはずだから、
PGに向いてないのに無理してPGをやりたがるなよ
と言いたい。
>>319 そうだね。ホント、携帯の周りには多いよね。
前のケータイ系サーバ開発(C言語)で
char a[10];
long l;
ってコードがあって、自称PGに
「a に文字列で数値が入るから数値に変換して l に入れてください」
って言ったら
l = (long)a;
という異次元コードをコミットして、「うまくいきません。」だってwwwwwww
どんな未来C言語だよwwwwwwww
いるだけでただのデスマーチがデスマーチVistaくらいになって大迷惑。
C言語って一度ポインタの壁超えたあと 全編に渡って「ポインタ的な理解」をしてやっと基礎終了でしょう Fizz-Buzzはそのレベルの問題ですらないんだな・・・・
>>320 キャストの使い方は見たことがあるけどデータ型について
理解してないのに自称PGですか。
そういう自称PGって生産性ゼロならまだいいけど
切羽詰まった開発現場の雰囲気をさらに殺伐とさせることを含めて
全体の生産性を下げるから困ったモンです。
以前は大学とか院までいってFizz-Buzz問題が出来ない奴
はいないだろという思いこみがあったんで
なんで、いくら教えても、知識はついているように見えるのに
PGとしての能力が向上しないのか?と何年も悩んだ経験がある。
Fizz-Buzz問題関連トピックのおかげで
そういう自称PGがたくさんいるということに気がついたから
これからはPG適性のない人たちを開発プロジェクトに投入して
お互いに消耗することはしなくて済みそうだ。
自主的に組む経験が少ないのさ フリーゲームとかつまらないのでも良いから沢山作ってる人達にはそんな人は居ないだろう
324 :
仕様書無しさん :2007/06/21(木) 16:36:10
>>320 冗談ではなく、そういうのいるぞ。
char a[10];
long l;
lにある数値を文字列化してaに入れるのが
a = (char *)l;
うまく行きませんとか答えるの。orz
char a[10]; long l; l = a.toLong(); 先輩、うまく行きません。
VBじゃねぇつーのww
まぁ、大卒と言っても文系だと、むしろ高卒以下
のことが多い。
派遣先の新人プロパーがまさに
>>320 なコードを
書いて「何かオカシイんですけど…」と言ってた。
ゆとり世代の大卒、まして文系に期待するな。
char a[10]; long l; l = boost::lexical_cast<long>(a); こうですか?わかりません
>>327 文系ならいいんだよ、こっちも適性があるかどうか見極める気になるし。
問題は工学系の大卒、院卒の奴
基礎は
>>320 レベルなのに出来そうに見せるための知識は持っていて
プライドだけが高いから基礎からやりなおそうともしない。
雇った後で気がついてもアトの祭りorz
330 :
仕様書無しさん :2007/06/22(金) 13:08:09
2分じゃ無理だなー 割り算して求めればいいやと思いつつEclipse立ち上げながら2ch見てなんとなくメインクラス作って 変数何にしようか考えて でこのあたりで2分は超える
大学でCの演習やってたら普通 atoiとかやるはずなんだけどなー。
atoiでいいのか?
常識的に考えてsnprintfだろ
これが現実
元問題の話か まぁいいや、さぁいくか。
>>328 C++ じゃなくて C。
しかも boost なんてどこで採用されてんだよwwww
ここで、Fizz-Buzz的な問題を一問。 問:3000までの親和数を求めるプログラムを書け。 # 親和数とは 異なる2つの自然数の自分自身を除いた約数の和が、互いに他方と等しくなるような数。 例えば(220, 284)は、224の約数のうち224を除いたものの和は280となり、280の約数のうち280を除いたものの和は224になる。
#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; } 強引だけどこんなもんで
何も考えずにこんなんでどよ #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; }
#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; } もうこれでいいよね
>>339 こんなのが一発で思い浮かぶようになりたいぜ…orz
#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; }
何の役にも立たないプログラムを書く奴のモチベーションがどこから来ているのかを誰か教えてくれ。
344 :
仕様書無しさん :2007/06/23(土) 00:11:30
わからない人には教えてもわからない
そこに問題があったら解きたくなるのが人情ってもんだろ。違うか?
347 :
仕様書無しさん :2007/06/23(土) 01:13:53
知恵遅れのためにCOBOLとかRPGでも書いてやれよw
検証する側から考えると改行の有無で評価が分かれそうだな
349 :
343 :2007/06/23(土) 09:01:24
>>345 解がないならね。
自分は解けると判っている問題を解くことの面倒の事を言っているんだけど
ボケ防止兼、腕試し
趣味でなにかやってる人にやる意味あるのかとか聞くのか。へぇ。
趣味プログラムは多少なりとも自分の役に立つものだろう
fiber使ってライフゲームとかそういう下らんものしか作ってないぜ…
数独やピクロスみたいなパズルって、壮大な時間の無駄だし、解くの面倒だよな。 しかもパズルとして与えられた以上解けるのはわかっているし、時間をかければ解けるのは確実だし。
大学って別にコンピュータの専門学校じゃないから 「Cの演習」なんてやらんところも多いよ。 別にPGを育てるのが大学じゃないから。
356 :
355 :2007/06/23(土) 10:34:50
ああ、もちろん「コンピュータ系の学部でも」という意味で。
受験の頃に苦戦した数学の問題をプログラムで解いて俺tueeee!するのが趣味です
高校で古文や漢文をやるのと同様に、 大学でCをやるのさ。
>>343 >>337 を見たとき、おっ面白そうじゃんと思って
ついプログラムを書いてみたくなるのがプログラマ向きの人
>何の役にも立たないプログラムを書く奴のモチベーションがどこから来ているのかを誰か教えてくれ。
反射的にそう思ってしまう人は
さんざん苦労したらこの程度の問題はとけるかもしれないが
無能プログラマと呼ばれて35歳前に力尽きてしまう人
つまんねー流れ
>>359 全く同意できないわけだが。
パズルの鮮やかな解法を見つける頭脳なんてのは大半のプログラマには全く要求されない。
趣味と仕事が一致すれば幸せかという問いにYesと答えられるほど暢気な業界でもないしな。
>>361 全く同意できないというのはよく分かる
だが、切羽詰まった開発の現場でなんとかバグをつぶしてプロジェクトを
終わらせているのはパズルの鮮やかな解法を見つける頭脳を持った
連中だという事実がある。
単なるデータ入力要員でしかない大半の人間にプログラマという
呼称を与えているのは人材派遣会社の権益確保のためとしか言いようがない。
362を読んで詭弁のガイドラインを思い出した
四の五の言わずに2分以内に解け さもなくば不採用だ
>パズルの鮮やかな解法を見つける頭脳なんてのは大半のプログラマには全く要求されない。 されてるけど気づいてないだけなんじゃないの?
>>366 実は担当者と交渉して2分を2週間に伸ばすことが出来るかどうかが真のテストだったのさ
そこを真面目に2分でやるような奴は簡単に使い潰せそうということで採用
fizz-buzzみたいな問題では無いだろうが もっと難しい問題出されてそのオチはありそうで怖いなw
そういうテストは教育の中ではやったな。 難しい課題を出して「わかりません」と言える奴は意外と少ない。 言える奴は意外と出来る奴で、出来ない奴は「わからない」と言えない。 言ったとしても何がわからないのかを言えないんだわ。
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 コンパイルとか、そういうのは時間に入れないんじゃないのかな。
基本的なアルゴリズムを思いつけるかどうか。
実際、FizzBuzz解けないような奴が周りに居るとは思えないが、
最初に思いつくアルゴリズムが最適なものである自信はプロであるオレにも無い。
>370 それなんてコバヤシマル・シナリオ?
最速の学生が、結果的に妥協だったのか否かで優秀かどうか評価が分かれる。
問題として出た以上 多少凝らなければいけないのかどうか考えたりすると思うのですけれど。 2分でハイ出来ましたじゃ通らないと考えそうだし。 大学の情報系だったら自分がやりたくて昔からやってるバリバリなの居て当然だしね
この問題を解かせる時は 「2分で解け」と予め制限時間書いておくのも良いかもね 要は基本的なことがとりあえず書けるか否かを見たいわけだから 2分で書いたテキトーコードでもスキルは出る
蒸し返すようだが 動作テスト禁止ってのが基地外
なんか、皆Fizz-Buzz問題を時間競争と思っているようだが
10分以上かけても自力でプログラムが書ける人なら
PGとして伸びる可能性があるから採用出来る。
だがサンプルソースが無くインターネットで検索できない状況で
Fizz-Buzz問題を与えたら呆然としてしまう自称プログラマが
実際にゴロゴロしてるのが現状。
そういう奴に限って
>>361 のようなことを堂々と言って
うまく立ち回る術を心得ているので誑かされてしまう
Fizz-Buzz問題は出来る奴のレベルを判定するためではなく
PGに全然向かない奴を見つけるために価値がある。
時間競争っていう意味でも充分でしょ。 スグ出来るやつがいて、そうでないやつがいる。 出来ないやつのうち、黙ってるヤツも、 何かをいうやつも、残念ながらハズレ。
数分で紙に書くのはきついかも。。 数分でエディタに打ち込むならなんとか
しかし重要な場面でこうやって試されたら 1) アヒャって性能低下(元々低いのがさらに) 2) APIリファレンス無しでは心もとない 3) いいトコ見せようとして欲張って自爆 って感じが。くわばらくわばら。
>>383 俺も。
「他人に読める字で書け」となると、5分もらわないと。
fizz-buzzはいけるだろうけど友愛数とかやられたしぼん確定
>>386 まず問題の意味を理解できない俺チュンリー
無難にフィボナッチ数列で
フィボナッチはいいね。 何も考えないでこういうコード書く奴いそうで。 int fibonacci(int n) { if (n == 1 || n == 2) return 1; return fibonacci(n - 2) + fibonacci(n - 1); }
#define fib(n) (((n)==1||(n)==2)?1:fib((n)-1)+fib((n)-2))
(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)))))
sub fib{ my ($n) = @_; return (((1+sqrt(5))/2)**$n - ((1-sqrt(5))/2)**$n)/sqrt(5); }
>>390 Cのプリプロセッサって再帰的な展開できるんだっけ?
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; }
//何も考えずにやったけどこれでいいのか? 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; }
検索しないと解けないような問題でインターネット検索ありで問題解かせるのとかどうよ? 実際探し物のテクニックって重要だと思うし
人力検索使われそうだな
def fibo(n) n <= 2 ? n : (fibo(n - 1) + fibo(n - 2)) end (1..10).each {|n| puts fibo(n)}
まったく同じ計算を平気で繰り返す奴ってなんなの?
fibonacci数列をO(N)やO(N^2)でしか書けない プログラマーはダメプログラマーだな。
O(N)で駄目、かつ条件がCの標準ライブラリだけ ってことはその場で行列演算ライブラリを作れってことか 何度もそういうの造って覚えてる人じゃないと無理っぽい
累乗がO(1)かどうかはさておき
何でこうなるかすら理解できないのは俺が専門外だからか
いや、専門だったとしても理解できるかどうかはわからない
とりあえず
>>391 や
>>392 の言語が何かだけはどうしても知りたいからマジで教えてください
>累乗がO(1)かどうかはさておき おくなよw
O(N^2)で書く方法が思いつかない俺はダメですか
391 が lisp か 392 が perl か 400 が ruby か
>>406 みたいなやつはいらん知識ばっかり持っててつかえねーんだよ
412 :
411 :2007/06/26(火) 17:53:15
スマソ
>>392 だった。釣ってくる。
うちにも数学マニアみたいなやつがいて優秀で知識も豊富なんだろうけど、
一般常識がまったくできん。こいつ誰かもらってくれ。
ググるまでフィボナッチ数列と黄金比の関係を知らなかった ('A`)
なんだよこの流れ ここはム板じゃなくてマ板だ
391 が ガリ勉委員長タイプ 392 が 変態キモオタタイプ 400 が 爽やかイケメンタイプ
Cで10000番まで試したら
>>392 のアルゴリズムの速度は
>>395 の2倍程度だった
やっぱ累乗とかのコスト関係なくかなり速いようです
やっぱ見た目からしてヤバイと思ったけどその通りだったんだなぁ
>>416 >Cで10000番まで試したら
まず n = 71 で精度が足りなくなって
次に n = 1475 でオーバーフローしますね。
関数が返す値は使ってないからオーバーフローしようが何しようが結果は変わらないよ 演算コストを計るだけだから問題ないかなと思ったんだけどそうでもないのかゐ? 70ぐらいまでだと50ぐらいのあたりで殆ど速度が同じになるのが面白い
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
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
累乗使ってるのは間違った答え出してきそう
>>419 >391考えたやつ頭いいな。
wikipedia くらい読んだら?
423 :
422 :2007/06/27(水) 09:50:01
間違えました。 もういいです。
>>1 初心者にやらせる場合
まず1-100のプリントを書かせて
後付でFizzBuzz入れるほうがいいかもな
>>424 いやいや、「ちゃんとしてないプログラマ」を教育しようって話じゃないから。
いわばFizz-Buzzのふるいだな デンジャラスな追加要員を排除するべく
# python ver def fib(n): a, b=0, 1 for x in range(n): a, b=a+b, a print a 以外と簡単な問題のほうがセンスはかれそうだな。 黄金比なんて思い付きもしねぇ。
↓コボラ登場
やっぱ整数論の本とかアルゴリズム辞典見ながら いろんな言語のいろんな作法でプログラム書いて遊んだりしとしか無理ってことなんですか?
ていうか、ひねりも無く足していくだけのフィボナッチ数列だったら 入門者用の解説とかでよく見るし、 友愛数やら素数やらfizzbuzzぐらいのアルゴリズムならすぐに思いつくっしょ。 少しプログラミングかじったらできるレベル。
俺の場合は解いた事があるから解けるだけ もしそれらの問題を解いた事無かったら恐らく解けないだろう…orz なんか解いた事の無い問題でもすらすら解ける人が羨ましい
とはいえqsortのアルゴリズムを単独で発見できる人は滅多にいない
あんなんできるか
分割統治の考え方やオーダーを落とす方法を知ってて、 既存のアルゴリズムに適用できればいいんだけどねぇ。 暗記ばっかで試験潜り抜けてるバカ学生には無理だよなぁ。
そういう基本的な問題解決に対する考え方を勉強したい 多分なんて事無い簡単な方法なんだろうけど、多分それを使いこなす事が出来る人は限られてくるだろうな ま、俺は暗記すらしないバカ学生だけど
434は自力でqsortを導き出したようです。
FFTは思い付いたけどqsortは無理だな
バカスw
>436 >434の話から、なぜqsortのアルゴリズムを自力で見つけたと帰結されるのか・・・
俺にはshell sortが精一杯だった。
バブルソートは俺にまかせとけw
俺が自力で見つけたソートはバケツソートだった
つか、qsort のアルゴリズムが何かなんて実装依存なんだが。
qsort=クイックソートなのでは?
こないだソリティア自作してたんでそこから一つ考えてみた。 2分とは言わないが、ちょっと考えれば出来るよな? トランプの4種各13枚…計52枚(ジョーカー無し)を 以下の条件にそって出力。 書式: (スート)の(数字)。 スーツ: スペード、ハート、クラブ、ダイヤ。 数字: 1…A 11…J 12…Q 13…K で、それ以外の数字はそのまま数字を出力。 例: ダイヤのQ これをシャッフルして52枚全て出力する。
>>445 新人にやらせたことあるけど、シャッフルは意外とできないぞ
スワップの繰返しで簡単にできそうなもんだが、アルゴリズムを勉強したことのないって人が意外に多い
要はカードをシャッホーすりゃいいの? 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; } }
昔強引な方法でシャッフルしたことがある。 配列に前の方から0-51のランダムな数字を詰め込む時、詰め込む配列の前に詰め込もうとする数字と同じものが無いか確認して、 そいつを52回繰り返すだけ。 最後の方はひたすら既出チェックに引っかかって失敗しているはずなのに、 トランプのシャッフル程度だと案外実用的な速度で動いていた不思議。
>>448 ついこの間、研修でそれやったわ
アルゴリズムで配列のスワップやっただろ?と講師に言われて凹んだw
むー、俺の配列シャッフルっていつもこんな感じだな def shuffle(cards) newcards = [] while c=cards.slice!(rand(cards.size)) do newcards.push(c) end return newcards end
むらが出来ないようにきっちり書くのは案外難しい。 というかその知識があるかないかってだけなんだが。
// カード配列の作成 $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"; }
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}
>>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}
いろんなアプローチがあって楽しいね。
俺もRubyは使うが、sort_by{rand} は知らんかった そんな簡単に書けたのかよ…
そういや関数型言語のリストのシャッフルってどうやるんだ? vectorにして混ぜる以外、パッと思いつかないんだが…
Rubyってすごいんだな 仕様と同じくらいの分量で実装が書けてしまうのか
それに引き換えC++は・・・
>456 のコードはまだ短くなるからゴルファーではないな
>>463 トップゴルファーだけがゴルファーではない
465 :
1/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; };
466 :
2/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; };
467 :
3/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]); } }
// 素朴に書いたつもりが、三時間かかった( ´ー`)y─┛~~ みんなならどうする?
やっぱC++はこういうこじんまりとしたプログラミングには向いてないんだろうな
この問題のおかげでRubyに興味が出てきた
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();
}
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)); } } }
>>473 つ Collections.shuffler(cards);
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
>476 Pythonからインデント抜いたら激しく解り難いぞ… 空白を&nbsp;か全角空白に置換して投稿しる
>>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
>>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個入れ替えるだけでもいいですよね」
俺「一日ください」 そして次の日提出されるのはHello,World
>>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")
>>484 おー、ついにほとんどワンライナーになりましたか。。。
自分は最近、Javaを習ったので、拡張構文をふんだんに使いました。
・enum
・拡張for文
・generic
・可変長引数
今更ながら
>>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? */
}
}
>484 Rubyの puts は引数に配列突っ込むと 要素ごとに改行するから join("\n") は要らないね 「勝手に改行されるの気持ち悪い」って意見も Rubyスレで何度か出たことあるけどw
>>487 おわー! 勉強になりました。ありがとうございます。
>>456 ,
>>460 >>456 をゴルファーとか言うやつは、ゴルフやったことないやつ。
つか、Rubyをやってれば、sort_by{rand}なんて小技の一つとして知ってるだろw
約:おれのほうがすごい、おれをほめて。
訳 だろ
492 :
仕様書無しさん :2007/07/04(水) 21:04:56
疫 だろ?
口だけの人は何を言っても聴いてもらえませんよ?
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分位かかりそう。 今時、紙に書かせている奴もどうかと思うが。
>>494 else if ((i % 15) == 0) これを最初に調べたら、
二箇所の !((i % 15) == 0)) が不要になるよね。
497 :
こんなの :2007/07/04(水) 22:20:21
まぁ、いいじゃん。
っつーか !=つかえ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))
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);
#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; } };
template<int N> struct FizzBuzzGen { typedef typename FizzBuzzGen<N-1>::F1 F0; typedef typename FizzBuzzGen<N-1>::F2 F1; typedef typename FizzBuzzGen<N-1>::F0 F2; typedef typename FizzBuzzGen<N-1>::B1 B0; typedef typename FizzBuzzGen<N-1>::B2 B1; typedef typename FizzBuzzGen<N-1>::B3 B2; typedef typename FizzBuzzGen<N-1>::B4 B3; typedef typename FizzBuzzGen<N-1>::B0 B4; static void print( ) { FizzBuzzGen<N-1>::print( ); P<F0,B0>::print( N ); } }; template<> struct FizzBuzzGen<0> { typedef Fizz F0; typedef fizz F1, F2; typedef Buzz B0; typedef buzz B1, B2, B3, B4; static void print( ) { // nothing } }; int main(){ FizzBuzzGen<100>::print( ); }
508 :
506 :2007/07/04(水) 22:53:16
3年ぶりのC++なので15分かかった。鬱。
マに憧れるプログラミング歴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?
ネタでしょw
512 :
sage :2007/07/04(水) 23:06:42
よし出来た。 #include "fizzbuzz.h" void main(){ fizzbuzz(); }
>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); } }
516 :
514 :2007/07/04(水) 23:21:31
手元にコンパイラが無いのですが合ってますか? 論理的にはこんな感じで良いような気がしますが。
517 :
仕様書無しさん :2007/07/04(水) 23:22:20
残念ながら int main()なのにreturnが無いよ
519 :
仕様書無しさん :2007/07/04(水) 23:27:01
おもいっきり違うだろ。
>>506 みたいなのとは一緒に仕事したくねーな。
わざとソースをめんどくさくするタイプ
>>518 リターンなくてもコンパイル通ったような…。
>>519 ほんとだ…肝心のところが全部逆にw
ぁぅ。 ×ほんとだ…肝心のところが全部逆にw ○==0で見ないといけない。
いや…混乱したのでもう黙りますw
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.
↑手元にコンパイラないから、テストしてないけどこんなもんかな。 コンパイルは通らないハズ。 CONSOLEの宣言とか省略してるから。 全部書くと1レスに収まらねぇだろうしな〜w
なでしことかで作ったらどんな感じになる?
>>524 エンヴァイロメントディビジョン、プロシジャーディビジョン
なつかしスwww
だれかぴゅう太BASICでタノム
@ECHO OFF REM バッチファイルでやってみる SETLOCAL FOR /L %%I IN (1,1,100) DO ( CALL :CASE ) GOTO :EOF :CASE SETLOCAL SET ARG=%1 SET /A M=%ARG%%%15 IF %M% EQU 0 GOTO :FIZZBUZZ SET /A M=%ARG%%%5 IF %M% EQU 0 GOTO :BUZZ SET /A M=%ARG%%%3 IF %M% EQU 0 GOTO :FIZZ ECHO %ARG% GOTO :EOF :FIZZBUZZ ECHO FizzBuzz GOTO :EOF :BUZZ ECHO Buzz GOTO :EOF :FIZZ ECHO Fizz
529 :
528 :2007/07/06(金) 12:07:56
ミスった、正しくは ( CALL :CASE %%I ) と %%I が入る
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"; }
ここで毛色を変えて一問。 横30行で、任意の文字を受け付け、 以下のような旗を作成するプログラムを作れ。 (ただし、入力された文字が31文字以上の場合は文字をそのまま表示。) ============ test ===============
どういうこと?全部で30文字になるように"="を調節して出力ってこと? 例だと後半の"="は15文字あるんだけど。
============ test ============ ========== fizzbuzz ========== がいいたかったっぽいね。2ch だとヅレるかもしれんが。
>>532 条件が不明確ですまん。
・入力された文字数にかかわらず、横幅は半角30文字。
(ただし入力された文字が31文字以上ならそのまま表示。)
・"="と入力された文字の間には空白
・入力された文字は必ず中央に
(ただし"="の合計が奇数になる場合は右側を多くすること。)
上の例は間違ってた。
正確には、こう
========== FizzBuzz ==========
>>518 main()のリターンなんて省略でしょ。
警告出すコンパイラがウンコ。
>>536 コード量が多かったら丁寧ってわけじゃないぞ。
よくわからんが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の人もっと短くして。
インデントしてくれ
>>537 コイツが何のことを言ってるのか誰か解り易く説明してくれや
541 :
仕様書無しさん :2007/07/06(金) 23:11:20
入力された文字数が30以上なら表示じゃなくて?28なら空白のみ、29なら右に空白って事でいいのかな?
>>541 そう。
実質的に入力された文字が30文字ならそのまま表示。
>>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("パラメータが空っぽ!"); } }
>>543 仕事のコードじゃないならいいよね。省略できるものはどんどん省略すれば。
ゴルフもその思想だし。
仕事で書いたコードでそんなこと言い張る奴が居たら速攻プロジェクトはずされるけど。
548 :
仕様書無しさん :2007/07/07(土) 00:33:08
544がよからぬ事を企んでます!
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
よし!ちょっとperlっぽいけどrubyバージョンも出来たぞ!! ruby -pe '$_ = "============ test ===============¥n" if $_.length <= 30'
551 :
ちょちょ :2007/07/07(土) 00:56:36
意外とこのすれ面白いなw
真面目にrubyでワンライナーでやるとこんな感じになるのか? だれか添削して。 つかcenterメソッドの使い方今覚えたw ruby -pe 'chomp;$_ = ((" " + $_ + "").center(30, "=") + "¥n").strip + "¥n"'
(" " + $_ + "") -> (" " + $_ + " ") だったw だみだこりゃ
>>552 centerなんて初めてしったw
よく見つけたなw
556 :
552 :2007/07/07(土) 02:25:34
28文字29文字の時がダメだったw >= 30とか比較しない方法無いかな
557 :
552 :2007/07/07(土) 02:38:14
姑息な手だけどこれでなんとかいけるか ruby -pe 'chomp;$_ = ((" " + $_ + " ").center(32, "=").slice(1..-2)).strip + "¥n"'
stripいらなかった 間抜け過ぎるorz
>>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);
}
新人面接で
1.Fizz-Buzz問題って知ってる?
2.Fizz-Buzz問題解かせる
3.
>>143 の問題(
>>243 の解法でおk)
4.3の問題でなんか変なとこなかった?
ってやると、30分程度でかなり多くのことがわかるな。
>560 for i=1 to 100〜next が PERFORM VARYING I FROM 1 BY 1 UNTIL I GREATER THAN 100 になる言語だものw
>>221 Whitespace_Rank User Size Time Date Statistics
1 Mark Byers 210 0.0003 07/04/02 18:36:01 0B / 0B / 0B
実行速度が頭抜けて速いが…w
その辺はhackじゃなくてcrackをしてるらしいw
>>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
<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>
>>547 なに原理主義かは知らないが、規格に準拠した処理系では
return なしで終わる main 関数が 0 を戻す事を
知らないわけじゃないよね?(確認)
課題は自力でやれ
573 :
仕様書無しさん :2007/07/09(月) 17:44:11
>>570 そんなの偉そうに述べてる暇で return 書け。
>>575 そもそも、mainのreturn 0はなんの役に立つの?
アナタの考えを聞きたい。
>>576 きちんとしたアプリケーションなら終了ステータスを示すのに値を返すけど..
returnを書かない場合にmain()が0を返すことを期待する
くらいならっていう前置きを抜かしていただけなんだが
その突っ込みは
>>570 による話のすり替え?
>>577 bash csh ならあります。
あ、|| とかでつかうってことか。
>>578 > きちんとしたアプリケーションなら終了ステータスを示すのに値を返すけど..
>
> returnを書かない場合にmain()が0を返すことを期待する
> くらいならっていう前置きを抜かしていただけなんだが
なんか知りませんが、どうかそう構えずに。
> その突っ込みは
>>570 による話のすり替え?
すくなくとも自分はその人とは関係がありません。
mainのreturn 0に漠然とした疑問を持ち続けていただけの人間です。
>>576 自分の作ったプログラムと他のプログラムを繋げた経験は?
常に他のモジュール、環境を意識してコード組んでるかい?
君がソフト屋だとしたら、終了ステータスも伝えず独りよがりに落ちていくソフトを使いたいと思うかい?
コーディングがオナニーの同義語になってやしないかい?
>>580 ひょっとして
>>578 さんですか?
> 自分の作ったプログラムと他のプログラムを繋げた経験は?
繋げるとは? シェルでのパイプってこと?
> 常に他のモジュール、環境を意識してコード組んでるかい?
> 君がソフト屋だとしたら、終了ステータスも伝えず独りよがりに落ちていくソフトを使いたいと思うかい?
そういう言い方じゃなくてね、アナタの考え方だけを聞きたいだけ。
> コーディングがオナニーの同義語になってやしないかい?
なんのこっちゃいな。
あのね、主張に反対してるんじゃない。聞いてるだけだよ?
嫌な流れだ、もっと穏便に、寛容にいこう。 そこで一問。 入力された文字列の順序を入れ換えたものを全て出力せよ。 ただし、同じものは二度出力しないこと。 例えば、"122"と入力されたなら"122","212","221"の3つを出力する
何となくProlog向きの気がする問題だな
これが限界。 もっといい方法あったら教えてくれ。 $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
>>583 まともなの書こうと思ったら30分以上かかんね?
ASCIIの印字文字であることを仮定していいですか
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]++; } } } }
JAVA厨死ね
何か気に障ったなら謝る
こんなん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())); }
元の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の位」云々の仕様は無くてもいいんだけど、なんとなく。)
(乱数の種を「工夫」して、Q2やQ3を楽々パスするってのは無しにして欲しいぞ)
>>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
>>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)
# スゲー雑です
>>596 Pythonのコードはスペース-> の変換やっとけ!!
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.
#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だけ 行数制限がきついっす */
601 :
600 :2007/07/10(火) 20:50:35
> if (i <= 20) puts("正解です、お見事!"); のところは (i <= 30) だった。あとgtはltにしときゃよかったな……。
#! /usr/bin/perl use Acme::FizzBuzz; exit;
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" }
sed版FizzBuzzに期待
>>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
sedで5の倍数は判定出来るが 3の倍数は無理じゃね?w
>>607 1桁の足し算さえ出来れば可能ではないかと
>>575 掲示板にちょろっと書くコードにいちいち、return 0;書けとかツッコンでるヤツこそ重箱のスミだろ。
定番の書籍なんかでもふつーに省略してあるし、書き捨てのコードだと、mainのreturnを省略してるくらいのほうがむしろ玄人っぽいくらい。
>>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 なら南無。
>>610 > 518が指摘したソース(
>>514 )みると、stdio.h の include まで書いて int main まで書いてる。
> そのうえで return 無いよって指摘しただけ。
いや、そういう論点じゃないだろ。
もしかしてint main()以外だったら、省略可って話なのか・・・?
#include <stdio.h> がmain()のreturnにどう関係してくるかも意味不明。
もういいじゃん。 return 0; と書くのすら面倒くさがり、 しかも省略するほうが玄人っぽいと思っているバカも この世には1人くらいいるんだなあ、 ってことで。
ネットとかでちょっとしたコードを書くときに、mainのreturnを省略してると、わかってるなって感じがするよな。 いちいち揚げ足とりのツッコミ入れてるヤツとかいると、どこの素人だよって感じ。
615 :
仕様書無しさん :2007/07/14(土) 00:45:14
Fizz-Buzz製品版を販売する気なのかもよw
ネットとかでちょっとしたコードを書くときに、int main()のreturnを省略してると、C++は眼中になしって感じがするよな。
>>616 プログラミング言語C++第3版の最初のコードは省略してるよ。
int main ... return 0; はマナーって言ってる人がいたっけ 要するに、時と場合で使い分ければいい void main が問題となりえる状況では、徹底的に突っ込む (C言語の)仕様に従っていないこと、ついでに仕様に従う重要性も含めて 初心者に教える場合とか、個人的なテストコードでは、めんどいから void main 最初の #include <stdio.h> を不思議な呪文として、詳細教えるの保留すること多いし どうしても気になる人は使ってるコンパイラのmainからreturnした時のコードを確認すればいい
返り値がいらないとか言ってるのは一人だけなのに 相手してやるなんてみんな優しいな。
もういいよ。スレ違いだし、スレタイも微妙だし。 ただ、 >mainのreturnを省略してると、わかってるなって感じがするよな。 馬鹿じゃねーの?そんなとこ着目する奴いねーよ
int main()で戻り値を自分で int と定義したにも関わらず return で戻り値返さないのは中途半端だと思う。 戻り値いらんなら void main() にして明示的に戻り値ナシにすればいいのでは? return省略して不定値返して、呼び出し側プロセスが異常な動作したらどうすんの?
マナーの問題。 この規模じゃ正直どっちでもいい。
>>621 void main()にしたら、決まった値が帰るような言い草だな。
void main()はreturn省略より、10倍くらいつっこまれるんじゃないか?
void main にすることで戻り値に意味無いと明示するんだろう。 return 省略コードは確かにWebでよくあるけど、実際に動いてるコードではあり得ない。 もっとためになること議論したほうがいいよ。どうせアホは1人だけだろ。
>>625 ソース見てリターン値の意味を判断するって話なら、void main()見ても意味無いよ。
なぜかは自分で考えてね。
それ以前の問題で、ソース見てvoid main()だったら、大丈夫かよって感じになるけど。
>>621 >>625 void main()にしたって、よそのプロセスが、無効な値かどうか判断できるわけないだろ。
>>625 Webだけじゃなくて、本とかでもよくあるよ。
そもそもWebの話じゃん。
ぬるぽっ!
>>628 本でもっていうか、世界中で使われてる某ソフトも、return省略してるけどな。
だから何?
別のスレで、プログラマでありがちなこと(議論しそうなこと?だっけ)、とかなんとか言うスレがなかったか? そっち向けの話題だな。 gotoでもりあがるとか、 タブの数で盛り上がるとか レスあった
いや、別に宗教論争じゃないから。 main()のreturnは省略可。 いちいち揚げ足取りのツッコミ入れるヤツのほうが素人ってだけの話。
>>633 だから、そう言い張る根拠を示してくれよ。
宗教論争じゃないんだからさ・・・
お前がそう言い張る以上は、規格書に
「main()のreturnは省略可」って一文が
ちゃんと書かれているんだろ?
争うなら別でやってくれよ…。 流れをぶった切る意味でも一問。 以下のようなプログラムを書け ・"ひらがな:漢字"というペアを受け付けた時はそれを記憶する ・ひらがなのみが入力されたとき、 記録にそのひらがなに対応する漢字があればその一覧を出力する。 (例) >かんじ:漢字 >かんじ:幹事 >かんじ 漢字,幹事
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
組込みで連想配列を持ってる言語じゃないと面倒な課題だなぁ。 正直,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
>>634 return省略した場合の動作は書いてあるよ。
よく見たら、上のほうで、自分で調べて納得してるじゃん。
main の return 省略ね。 こういうクズ議論を自転車置き場の議論っていうんだぜ。 難しい議論は、頭も悪いし勉強してないから参加できないが、 「自転車置き場をどこにするか?」 なんていう馬鹿でもわかる議論には必死に食いついてくる。 FizzBuzz が盛り上がったのも同じ理由だろ。 お題が難しければハナから諦めて、回答ソースを読むこともしないような そんな負け犬のクズどもが多いですよ、このスレは。
わかったから一回オナニーして落ち着け、な?
>>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]); }
}
>>642 > if (strcmp(keys[idx],s_buf) == 0)
を if (strncmp(keys[idx],s_buf,strlen(s_buf)) == 0)
にして
> … *res = NULL;
を res = NULL;
にしたら動いたよー
>>643 あれれ、ビルドして実行確認してあるけど、入力データの違いかなぁ?
めんどくて日本語処理を考慮してないから
strcmp() → strncmp() はそれでも問題ないと思う
*res = NULL は文字列を : の左側だけにぶった切る処理
それだと、使い終わったポインタ変数をクリアするだけで
keys[] へ検索キー文字列が正しく登録されないはず
個人的な蛇足で strchr() の引数が const char* なのに
戻り値が char* なのを、納得いかないまま利用してるんだけど
それが影響してるのかしらん?
>>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 まで比較するから、多分いけるはず
646 :
637 :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; } } } }
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]; } } }
>>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];
}
}
}
推奨NGワード: main
>>637 WindowsにPerl入れて日本語を扱えるようにするのに一時間かかってしまった…。
#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; }
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 さんのを参考にし(パクッ)たというのに、
なぜか全部で四時間くらいかかりました。フヒヒすいません。*/
日本語処理という(少なくともCとかでは)泥臭い部分って 基本ロジック部とは隔絶すべきじゃねぇか、とか余計なコト考えてしまう もちろん少数行のお試しテストで言うことじゃないけどね
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]); } }
なんて発展性のない・・・
書けない奴は絶対に入れたくないなぁ
他の言語使いにも理解できるように、誰か一般化してくれ。
>>657 文字列の配列の要素をカンマ区切りで出力しろ
>658 LLの類は大抵Joinがあるから一撃だなそれ VBScriptですら a = Array("a", "b", "c") WScript.Echo Join(a, ",") でしまいだ ってことで、「Join関数もしくはメソッドの類がある言語は、それ使っちゃダメ」縛りを入れよう
# Ruby非join版 ary = %w(a b c) exit if ary.empty? print ary.shift while item=ary.shift do print ",", item end
>>659 確かに一発w
# ruby join版
puts %w(a b c).join(",")
>>660 そこで、injectですよw
# ruby非join版
puts %w(a b c).inject(""){|r,i|r+i+","}.chop
ワンライナースレにする気かおまいら
>>664 知ってたが、スルーしてた
お題が、ワンライナーでかきにくいってだけの理由だがw
しかし、デザインなんとかならんのかな?
マイナスに働いている気がするぜ?
つか、長いコードはっつけて、崩れるってどんだけ〜
いや、でも、今見たら結構おもしろいw もちっと、UIを直してくれたらな・・・
・1~1000までの数値を出力 ・素数の時は数値の代わりに「Bizz」と出力 ・計算速度が出力する最大数(この問題の場合1000)に比例するアルゴリズムで書け
O(n) というとエなんたらのふるいしか思いつかん
・4×4の"+"を出力する。 ・(行,列)というペアを受け取り、対応する部分の+/-を切り替える。 (例) + + + + + + + + + + + + + + + + >(1,3) + + - + + + + + + + + + + + + + >(2,2) + + - + + - + + + + + + + + + +
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] = "+"; } } }
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; }
最近習ったばかりのC++で"反転"メソッドを実装したインスタンス[4][4]を生成して ・・・・・って考えたけどロジックとか無いつまらんコードになるからアウトだな・・・・
わざわざカッコとカンマが必要な入力インタフェースはいまいちだよね とか言ってみる
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 ""
>>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(" ")}
}
>>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 みじかっ!
>672 そのメソッドがロジックを実装してるんじゃないのか ってことでソース(屮゚Д゚)屮 カモーン
Cで書くならマクロ使いまくって短くしようぜ
C++で書くならgenericにして長くしようぜ
Cだと・・・+/-切り替えが クリア→再描画 にしろ 座標指定→1文字置換 にしろ 環境依存だなw
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
とうとう一行にw
行幅は80で抑えるのが俺の美学 a="+ + + +\n"*4;(y,x=scan(/\d+/);a[y.to_i*8+x.to_i*2-10]^=6)while$><<a&&gets
>683 その発想はなかった でもメンテしたくないコードだなぁw 普段からRuby使ってるのに理解するのに10分掛かった
保守性うんぬんを言い出したら、ワンライナーなんてやってられるか! ってことで。 というか、それが出来たらもはや真のプログラマの領域だな。
@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
投稿した後で気付いた…表示がループ最後になってらorz
688 :
名無しさん@そうだ選挙に行こう :2007/07/29(日) 14:44:11
■問題 "A"から"Z"までのアルファベットを出力せよ。 ただし、ABC……XYZの文字列をそんまま出力してはいけない 出力例: ABCDEFGHIJEKLMN……
perl -e 'print join("",split(//,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"));'
690 :
名無しさん@そうだ選挙に行こう :2007/07/29(日) 16:29:13
訂正: "ABCDEFGHIJKLMNOPQRSTUVWXYZ"の文字列をそのまま使ってはいけない
>>688 puts ('A'..'Z').to_a.join
692 :
名無しさん@そうだ選挙に行こう :2007/07/29(日) 17:10:36
俺なら
>>1 を見た段階で仕様を箇条書きに書き直させる。
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最短解って何文字だっけ?
698 :
名無しさん@そうだ選挙に行こう :2007/07/29(日) 18:45:30
やべ。俺
>>688 の問題は
>>693 以外に思いつかないわ。
あとはテーブル用意して、ループさせるとか?それはめんどくさいよなぁ
>>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);
}
main(c){c=65;while(c<91)putchar(c++);}
forの方が短いな
putchar() とか完全に存在を忘れてたwww
すぐにゴルファーとかワンライナーが現れるなココ
2chに自動で書込みを行うコードを記述せよ
失せろ屑
perl -e 'print join("",reverse(split(//,"ZYXWVUTSRQPONMLKJIHGFEDCBA")));'
perl -e 'foreach("A".."Z"){print;}'
perl -e 'print uc("abcdefghijklmnopqrstuvwxyz");'
ruby -e "?A.upto(?Z){|c| print c.chr};puts"
100 FOR I=65 TO 90 110 PRINT CHR$(I); 120 NEXT
>>707 perl -e "print 'A'..'Z';"
ruby -e "('A'..'Z').each{|c| print c}"
MOV AH,2 MOV DX,41 main: MOV CX,26 INT 21 INC DX LOOP main
LOOPする毎にCXの値が戻ってるような
出力の最後に改行入れないのは邪悪だと思うんだ
オレが邪悪でないとでも? 何を今更
問題にも最後に改行をつけろとか特に書いてないし > "A"から"Z"までのアルファベットを出力せよ。 ほら
715の主張は 「出力」には「最後に改行を入れる」ことが含意されるんじゃね? ということだ、と読解する力すらないんだな。
>>718 でも、下手に改行つけたら仕様を逸脱したと思われるよな
顧客満足度120% が尊ばれる時代は終わったんだよ。残念ながら。
というよりただ単に
>>688 の設問の仕方がなってないだけなのでは
Fizz-Buzzに引っかかる人種は 'A' ←数値 って時点でまず理解してなかったりするよね
722 :
688 :2007/07/30(月) 17:55:06
追記: ・最後の改行は特にあっても無くてもよい
おれはじゃ無くおれをのような
おれはじゃ無くおのれかも
C言語だと、例えば、'I' + 1 が 'J' であることは保証されていないんじゃなかったかと
EBCDICなんて見たことないもん。
0x41
perl -e "print A..Z" 括弧いらない。出せばいいだけなら、dieでもいいかもしれない。
ついに最終解まで辿り着いたか・・・
>>1 「書き出せる」ってのは「書き始めれる」って修正したほうが良いな。
2分でコーディング完了って話じゃなくて、2分もあれば構想を練り切って、コーディングに取り掛かることができるだろうって話。
下のほうでは、コーディングにかかってからコーディング終了までの時間を書いてるから話がややこしくなる。
ら抜き
>>731 > perl -e "print A..Z"
> 括弧いらない。
それを言うなら「括弧」ではなくクォーテーション(シングルクォーテーション)では?
>>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 のような誤解は起き得ないと思うのだが。
>>733 書き始めるまでに2分もかかる自分への言い訳ですか?
男ってのは自分に言い訳をいつもしてしまう生き物なのさ
女ってのはそれに付け込む生き物なのさ
あああー付け込まれてーなー
【審議中】
>>744 シングルクォートは、言語によりけりだな。
PerlやPython、Rubyは文字列だし。
Javaは文字で、数値とはある程度区別されるし。
C言語は文字だけどサイズの小さい数値でもあるし。
X-BASICでは整数型を返すっけ。
Delphiはそもそも文字列は基本シングルクォート。
あとはダブルクォートで文字配列、シングルクォートで文字列って言語もあるな。
>>746 いや、Cで sizeof('A') == sizeof(int) だぜ
('A')ヴァー
>747 実装依存。 実際sizeof('A')==1になる処理系あるし。cintとか。
('A')
('A') ←毒されてんのか、こいつが顔にしか見えない
('A') 顔じゃないよ・・・ ノ(ヘヘ
なんとか顔に見えた奴 (ヒント:鼻、口、眉(眉間)、右向き左向き、人間以外の生き物) (' ') ('#') ('!') ('&') ('(') (')') ('*') ('+') (',') ('-') ('.') ('/') ('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";'
blogでやってろ
2ちゃんはオレ専用の巨大blog。 オマエらはオレのblogにコメントつけさせてもらってるただのゲストだ。 ってことで。
('3') ←真っ先にプップクプーやボルジョアが脳裏に浮かぶ(俺、もう駄目人間かも)
759 :
ぼるじょあ ◆yBEncckFOU :2007/08/02(木) 22:24:01
(・3・)あるぅぇー? ボクが思い浮かんだ程度で駄目人間だなんて思い上がりすぎだYO! 真の2ちゃんねらたるもの、IMEにAA辞書を用意するのは基本 DA☆YO☆NE!
"ぼるじょあ"の中の人は何%くらいがFizzBuzz問題クリアできるんだろ?
('3') から推測して… 3% くらい?
顔文字はいいから問題持ってこい
1から100までの数をプリントするプログラムを書け。 ただし3の倍数以外のときは数の代わりに「Fizz」と、 5の倍数以外のときは「Buzz」とプリントし、 3と5のどちらの倍数でもない場合には「FizzBuzz」とプリントすること。
3に対する出力は?
>>765 >5の倍数以外のときは「Buzz」とプリントし、
767 :
仕様書無しさん :2007/08/03(金) 10:19:34
数字、表示できないじゃないかw
768 :
765 :2007/08/03(金) 10:34:21
ごめん。もう死ぬわ
n mod 3 n mod 5 output ≠0 ≠0 "FizzBuzz" ≠0 =0 "Fizz" =0 ≠0 "Buzz" =0 =0 n
>>769 考える余地を奪うなw
あとは、ゴルフするしかなくなるじゃないか
#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
>>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;
}
>>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;
}
>>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;
}
(・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]);
はい、次。
すげー
A AAA AAAA AAAAA AAAAAA こーいう図形を出力せよw 簡単すぎるなw30秒か
>>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;
}
perl -e 'print "A\nAAA\nAAAA\nAAAAA\nAAAAAA\n";'
#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; } なんのヒネリもないけど。
perl -e 'print "A" x $_ . "\n" foreach 1,3..6;'
786 :
仕様書無しさん :2007/08/04(土) 02:33:02
__ / / / ̄//> _ __/_ ヽ / __ _/_ /// 7" / / /\ /| 三/三 / /、_ //| / /-/_\ / / / // | ヽ//  ̄ ̄/ ̄ ̄ / \ /_,/ \_  ̄ ̄ /__/ \/ _/ / /_/ ヽ _/ ヽ_ / ̄ ̄/ // ―― ___ / ___ / ̄ ̄/ / ― // ―― / / / / ̄ ̄/ / / /  ̄ ̄ヽ / \ / ̄ ̄ヽ _フ"て_ レ \ / _/ _/ \_ \ <二/
2だけは飛ばせってのが意図したところなのかな (1..6).each{|i|i==2||puts("A"*i)}
>>779 780のような回答はいいけど、781のような回答はできない縛りはあるかな?
「ただし、6行目、7行目…n行目に、Aを任意の文字数出力するように拡張する可能性がある。
追加が何行になっても、Aが何個になっても、すぐ拡張できるようにせよ」はどうだろ。
>>788 いや、特に無いよ。
半分洒落で出した問題出し(悪いね)
「すぐ***」の件の縛りでもいいんじゃない?
※因みに俺は暇してるのでWEB上からメールアドレスを自動
収集するプログラムを作ってるよw
入力: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); }
このスレでコードを披露してる奴って、必死さが滲み出てるよな。 よっぽど>1の記事は、心の微妙な部分に触れる何かがあるんだろうね。
最近スクリプト書いてなくて欲求不満気味
795 :
仕様書無しさん :2007/08/04(土) 12:10:57
考えることを放棄し始めたら危険信号
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
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])))); }
Fizz-Buzzより簡単な 「1から100までの数をプリントするプログラムを書け。」 ができない外注が数名プロジェクトにやってきた。ちなみに正解率0% 問題はこの人たちにあるのか?雇う側にあるのか?
んなアホな
>>801 仕様があいまいだったんじゃない?
それは何進数なのか、改行は必要なのか
文字コードは何か、出力先は、言語は、などなど
>>803 言語はjavaだが紙に書かせるようにした。
素直に
public class A {
public static void main(String[] args) {
for (int i = 1; i <= 100; i++) {
System.out.println(i);
}
}
}
のようにjavaの言語仕様と単純なループ構造が書けるかどうか見たいだけ
だったのだが・・・。
あまりに単純すぎる問題なので逆に混乱させちゃったのかな?
でも、たまにコンパイルすらできない奴もいる。
マニュアルもらえなきゃコンパイルできないなぁ。 今までmake叩いてたやつがいきなりEclipse与えられて 40秒で仕度しな とか言われてもそりゃ無理だ。 せめて半日もらわないと業務レベルには辿り着かんよ
#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; }
最近IDE使いまくってなまってるから mani() から書けといわれても 調べるのに20分くらいかかりそうだ
>>807 mani() がそのへんを如実に物語っているね
>>805 それくらい想定済み。業務や環境のことを言ってるのではなく、
プログラマーとしてのスタートラインにすら辿り付いていないのが
多くないかな。hello worldすら出力できないような。
>>807 www
>>801-804 を読んで。
契約締結後に発覚しちゃったんならご愁傷さまとしか言い様がない。
その出来ない人に関しては、仕事人として「命、売ります」って表に出ては
いけないよう気がする。
・使用言語は事前情報として与えられてるべ?
・(譲歩して)他の経験した言語で解法を示せるべ?
#まぁ、ネタだよね?・・・と思いたい
俺だとBASIC、PERL、C、VB、アセンブラ、php なんかむちゃくくちゃ混ざった形で回答しそうな気がする
専門とかだとアルゴリズムとか仮想言語とやらで習うらしい 無駄な気もするけど
それをシラフで書けたり、すぐに既存言語に直せるなら価値はあるんじゃね
>>801 ネタ乙!!
下らんネタ書いてんじゃねーぞ!!
木瓜!
何の言語でもいいから書け といわれて書けないやつなら確かに死んだほうがいいな 言語指定はちょっと本来の話とずれる
プロマネのFizz-Buzz問題も面白いかも。 「プロジェクトマネージメントにおける3大要素を述べよ。」
蛋白質・脂質・無機質
脂質・糖質・カロリー
819 :
仕様書無しさん :2007/08/04(土) 23:09:37
生麦・生米・生卵
友情・努力・勝利
貧乏・大尽・大大尽
洗脳・搾取・虎の巻
愚民・教育・人のため
諸行無常・諸法無我・寂滅為楽
キャビア・フォアグラ・トリュフ
2007/08/05時点で 計 593URL 存在する様だ。
立法・行政・司法
2chの全メニューってのが何を指してるのかがわからん
ま、夏休み真っ只中ですから
>>829 左部分だよ。
あと、2chに書き込みをする際に*******を
全て取得するプログラムを作成中w
痛々しい
いや、微笑ましいw 生暖かく見守ろう
むしろ生温く
いいね、楽しそうじゃん。 wgetとsedで1行で書けるから暇つぶしにはちょうどいいかも。
ひどいw
俺なら一行も書かないでできるぜ?
>>837 それならそれが一番だろうね。
語弊を恐れずに言うなら、タイプ量が少なければ少ないほど
プログラマとして優秀といえるからね。
1行も書かないで用件を満たせるならそれが一番いい
「これやっといて♪」
君に任せる
ざけんな
一日数万行 でも実際打ってるのは数百行で残りはコード生成ツールや入力補完というのを目指してます><
>>839-840 それで出来るなら問題ないさ。
出来なかったとき、自分でケツを拭けるのが前提だけどな。
844 :
仕様書無しさん :2007/08/05(日) 23:42:43
HQ9+を拡張してFizzBuzz問題に特化したプログラミング言語を作れば、 プログラマーに向かない人でも安心してFizzBuzz問題が解けるようになる。
調べてみたらもう既にあった。 プログラマーに向かない人は、HQ9F+を使えば良い。
Fizz
>>845 HQ9F+ならFizzBuzzくらい誰でも解けると思った。
でも、メモ帳のような桁数表示の無いエディタを使ってたら、
自分は + の数を間違えてしまいかねない。
(保存してからファイルサイズ確認が楽かな?)
>>847 HQ9F+使ってFizzBuzzが解けないのは逆に凄い。
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;
>>849 動く。
ダミーの行をAで2行、Bで5行生成して
A×A×B×B (=100行) のデータの行番号を
select 〜 end で変換してる。
Subquery Factoring Clause使うぐらいならOracle限定として select level from dual connect by level <= 100 をそのまま使えばいいのにな、と思った。
852 :
851 :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 動作未確認です。
>>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>
854 :
851 :2007/08/07(火) 10:12:59
>>853 あ、mod 3とmod 5が逆だった。
でも結果は返ってきたぞ。どんな環境で実行したの?
>>854 Oracle 9i だと 1件、10g だと 100 件、8i だと ORA-1436。
856 :
851 :2007/08/07(火) 12:41:03
>>855 なるほど。実験thx。
8iは階層的クエリ(っていうのか?)には対応してないからしょうがないとして、
9iじゃ駄目なのね。
>>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);
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).
↓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).
流れが止まったところで一問。 約数FIzzBuzz。 1から順に100までの自然数を出力する。 ただし、300の約数なら"Fizz"、500の約数なら"Buzz"、 500と300の公約数なら"FizzBuzz"を出力せよ。
公約数は固定で持っちゃっていいの?
んなアホな
じゃあ仕様にそう書いておかないと・・・
300と500の約数をテーブルに入れてry
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
でも500と300の約数を先に計算してしまうアプローチもアリと思うな
このスレのどこかで書いたやつのまんま
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は使われたくないな、と思った。
ワンライナーでやるからだろw
1.upto(?d){|i|300%i<1&&v=:Fizz;puts 500%i<1?"#{v}Buzz":v||i} Rubyって読みにくいよね
golfer大活躍w
じゃあ逆に水増し大作戦だ、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)))))))))
ありそうで、ぶちきれるようなパスタソース(長いの!)を書いた人が優勝
srfi-1なんて使わずにiota自力実装すれば良かった
#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; }
#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; }
フィボナッチ
>>876 意味を読み取るのが難しくて Fizz-Buzz 問題と思えないくらいだ
ただ、ありえないと言い切れないところも怖い
流れが止まったようなので、 ・さいころを100回ふる(=1〜6の整数からランダムに100回選ぶ) ・最後に目が出た回数を以下のような表にまとめて出力する。(*ひとつでその目が1回出たことを表す) <例> 1:************************** 2:************ 3:******************* 4:************* 5:****** 6:********************
「さいころを100回振る」のはプログラムでは不可能だろ 1から6までの乱数を発生させて、と書かないとおかしくね?
何その突っ込み。
for (int i=0; i<100; ++i) { puts("さいころ「お付き合いしてください」"); puts("「ごめんなさい」"); }
883 :
147 :2007/08/23(木) 00:32:52
>>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;
}
885 :
883 :2007/08/23(木) 00:34:59
#!/usr/bin/perl -w use strict; srand; my @a; foreach((1..100)){ $a[int(rand()*6+1)]++ } foreach((1..6)){ print $_," ","*" x $a[$_],"\n"; }
>>879 r = (1..6).map{|n| "#{n}:" }
100.times{ r[rand(6)] << "*" }
puts r
m = Hash.new(0) 100.times { m[rand(6) + 1] += 1} (1..6).each {|i| puts "#{i}:#{"*" * m[i]}"}
お題出してもいい?
中はダメっ!!
エスケープシーケンスが有効な端末用 #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; }
ユーザーから正の整数を入力してもらい 足してその数になる正の整数二つの組み合わせを全て出力 例えば 4 と入力した時に 1+3 と 3+1 を一緒と扱うか別と扱うかは自由 出力順序も自由
893 :
892 :2007/09/01(土) 14:59:37
あ、1+1=2だから1を入力されるとちょっと困るな。 ユーザー入力は「2以上の整数」に訂正。
これはよい再帰の練習
再帰する必要ないような…?
for でブン回すだけだろ
>>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
num=input() for x in range(1,num): print x,"+",num-x
再帰にさせるには組み合わせ数を任意にすればよし
(1...n=gets.to_i).map{|x|puts"#{x},#{n-x}"}
こういうのはどうだろうか? ユーザーから正の偶数を入力してもらい、 足してその数になる素数2つの組合せを出力する。
追記。入力する数は4以上で、 そうなる組が存在しない場合は何も返さなくてよい。
それって結局素数を列挙する問題では
Fizz-Buzzでアウトは洒落にならないと思うが、戦力としていれるPGならば・・・
次のCVSファイルを読み込んで表示しろ
※言語の基本APIのみ使用可
※出力形式などは自分で考える事
#メールアドレス,苗字,名前
hogehoge@mail,jp,hoge,hogera
[email protected] ,foo,poo
くらいは2時間でやって欲しい所かな?
>>904 CSVって、カンマ入りの要素の扱いが面倒だから
標準APIだと結構手間だと思うぞ
メールアドレス、名字、名前のどれにもカンマなんて入らないと思うのは俺だけ?
仕様次第でそ。 入ってないだろう、で進める前に仕様確認しないと。
ああ、CVSって何言ってるのかわからなかったがCSVのことか・・・
ユーザがカンマを入れないという保証はない 入力値チェックが甘い上にその情報をエスケープもせずCSVにぶっこみ さらにそのCSVをそのままDBに突っ込んでて …つまりユーザ入力でDB破壊できる素晴らしいシステムを知ってる
>※出力形式などは自分で考える事 読み込んだままのテキストで表示する私は戦力外ですか。
ここでOO信者のワタクシがみなさまに幸せになれるアドバイスをば
まず問題文から名詞を抽出します。 CVSファイル 言語 基本API 出力形式 自分 メールアドレス 苗字 名前 次にオブジェクトになりそうな名詞を選択します。 CVSファイル 出力形式 メールアドレス 苗字 名前 ほら簡単でしょ
>913-914 …で、実装は?
>914 だからどこにcommitするのかはっきりせぇよww
>>904 ok.5秒でできた。入力はSTDINからな。
while(<>){print}
仕様が曖昧だからねー。 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
ちなみに、ライブラリは使ってよい
いい加減CVSとCSVの間違いに気付けよ
ほんとだw これはひどいw
commit云々いってたのはそれだったのかw 素で気づかなかった。
もうねアフォかと
おまいら仕事じゃないんだから仕様書を絶対視したれよ。 出題者がCVSファイルと言ったら、たとえ中身がCSV形式だとしても、それはCVSファイルなんだよ。 王様は馬鹿には見えない着物を着ているんだ。
>>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;
}
訂正 fscanf(fp, "%*[^\n]%1[\n]", tmp); ↓ fscanf(fp, "%*[^\n]); fscanf(fp, "%1[\n]", tmp);
#!ruby -naF, puts"メールアドレス:%s 名字:%s 名前:%s"%$F
BEGIN{FS=","} !/^#/{printf "メールアドレス:%s\n苗字:%s\n名前:%s\n",$1,$3,$4}
>>926-927 そういうコードは正しい入力を前提にしているとは言わない
そういうのはGJというんだ
CVSって書いた仕様書でチャイナに発注しちゃったらやっぱその通りに動くプログラムが出来ちゃうんだろうなぁ。 行間を読める日本人っていいなぁ。
>>917 どうでもいいけど、print<>で十分。
取り敢えずCVSなのかCSVなのかハッキリしてほしい
ちゃんと指摘されてるのにCVSって言い続けてるんだから 多分、CVSなんじゃね?w
CPU2GHzのWindowsME使ってる。先月PC購入して開発環境探しに行ったら見た瞬間に即決した。 カッコイイ、マジで。そして速い。IE開くとシェルが落ちる、マジで。ちょっと 感動。しかも16bitOSなのにGUIだから操作も簡単で良い。WindowsMEは安定しないと言わ れてるけど個人的には速いと思う。XPと比べればそりゃちょっとは違うかもし れないけど、そんなに大差はないって店員も言ってたし、それは間違いないと思う。 ただデータ保存中とかで止まるとちょっと怖いね。Core 2なのに画面動かないし。 安定性にかんしては多分MEもXPも変わらないでしょ。XP使ったことないから 知らないけど安定性があるかないかでそんなに変わったらアホ臭くてだれもMEな んて使わないでしょ。個人的にはMEでも十分に速い。 嘘かと思われるかも知れないけどベンチマークテストで140MHz位でマジでiMACを 抜いた。つまりはiMACですらMEには勝てないと言うわけで、それだけでも個 人的には大満足です。
936 :
919 :2007/09/05(水) 06:22:30
素で気付かなかった・・・ CSVです。
俺もよく間違えちゃうからSVN(Subversion)の方が好き。 まあ、木全体が保存されることの方がデカいが。
CSVよりTSVの方が好き
940 :
仕様書無しさん :2007/09/07(金) 10:35:54
>>938 TortoiseSVNを、CSVと一緒にあげんな
CVS -> CSVなら、 SVN -> SNV = Separated by Number Values 3 Bob 10 Programmer … chunked(ry
>>940 Tab-Separated Values
オロカモノメ
943 :
仕様書無しさん :2007/09/08(土) 19:56:39
ボケにボケを返してくれとサンクスw
標準入力から読み込み、そのまま標準出力へ吐き出すコード。 但しシェルのコマンド(cat、typeなど)に丸投げするのはナシ。 テキストモードとかバイナリモードとかは気にしなくてOK。
awk '1'
FizzBuzzのまねっこ問題。 1から100の数が対象。数に3が含まれていた場合(3,32,33など) 'San'を出力、5が含まれていた場合、'Go'を出力する。 3と5の両方が含まれていた場合(35など)には'SanGo'を出力、 3も5も含まない場合は、その数字を出力する。
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); }
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
#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; }
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 #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;
}
#!ruby -na $F.map{|x|putc x.to_i(16)}
957 :
仕様書無しさん :2007/10/02(火) 17:03:01
ワンライナー達にリファクタリングされたり
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; }
>if( i % 3 != 0 && i % 5 != 0 ) printf( "%d", i ); if(((i % 3) != 0) && ((i % 5) != 0)) printf("%d",i); このように面倒でも出来るだけ括弧を使って優先順位を 指定する癖をつけた方が良い。 最近のコンパイラは 教科書的な演算子の評価順序をあてにするな! というwarningを出すのもあるし、糞なコンパイラに移植したとき 演算子の評価順序により起きるバグは見つけるのに手間取る。
好みの問題になるかと思うが、括弧つけすぎも読みにくいよ
>>959 改良する余地はあるけど、いいんじゃない。
else ifを使うと挙動がどのように変ってどんな効果があるか考えてみよう。
>>960 >>961 アドバイスどうもです。
環境によってはキチンと括弧つけた方がいいんですね。
最初、else ifを使おうとしたのですが、かえって長くなりそうな気がしたのでやめたんです。
でも今度考えてみます。
>>960 流石にやり過ぎ。
条件が長いとか、優先順位の微妙な演算子はそれが良いが
そうでなければLispじゃあるまいし全てに括弧付ける必要はあんめぇ。
>>963 計算、比較、条件、って単位で括ってるだけだからそう酷いって程でも無いんじゃないか?
個人的には比較対象や論理演算対象は明確に単項で無い限り括りたい。
四則演算以外の優先順位を瞬間的に判断する自身が無い。
C言語だと「シフト演算子 > 比較演算子 > シフト以外のビット演算子」てなってて覚え難い。
皆ソラで言える?
(*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"); }
C#はまったく知らんのだけど、 >>x += i + " "; こういう書きかたってできるの? いや、できてもおかしくはなさそうだけど。 x%3とかあるけど、xはstringなんじゃないか、とか。 }が足りなさそうなのは、まあコピペのミスとして、"x"はなんかおかしくないか、とか。 ・・・釣り? それともC#だとこれで良いの?
「おもいどうりに動きません」っていうか、動いてないんじゃないか?
何処から突っ込めばいいのか分からないくらいだな。 やっぱ釣りか。
まずツッコむところは「田中」だな
971 :
仕様書無しさん :2007/11/07(水) 22:09:50
釣りってなあに?
972 :
仕様書無しさん :2007/11/07(水) 22:50:38
fishing.
>>967 JavaScriptなら「x += i + " "; 」って出来るけど、C#は知らん。
974 :
963 :2007/11/08(木) 11:58:54
>>964 シフトやビット演算が絡むなら流石に書くよ。
剰余と四則演算が入り交じってる場合は書くけど
どちらか片方+論理演算1種類くらいなら楚良でいける。
975 :
仕様書無しさん :2007/11/11(日) 13:43:47
x += i + " "; xがstring型ならできるけど、int型ならできまへん。
こういう問題が出された時、コードの短さと引き換えに見づらくする奴が必ずいるよな。
977 :
仕様書無しさん :2007/11/11(日) 18:07:17
>>975 何が出来ないの?
Warningは出るけどコンパイルはされるよ。
そして書いてあるとおりに動く。
#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
せいすう めいん 「 」 『 せいすう あい, ふらぐ 。 くりかえすよ 「 あい は ちょっと 。 あい ちいさいかも けっこうおおきいね 。 おっきくなったね あい 」 『 ふらぐ は なにもないね 。 もしも 「 あい あまり すくなめ いっしょかな なにもないね 」 『 かくよ 「 ふぃず 」 。 ふらぐ は ちょっと 。 』 もしも 「 あい あまり まあまあ いっしょかな なにもないね 」 『 かくよ 「 ばず 」 。 ふらぐ は ちょっと 。 』 もしも 「 ふらぐ いっしょかな なにもないね 」 かくよ 「 すうじ, あい 」 。 かくよ 「 ととのえよう 」 。 』 かえすよ なにもないね 。 』
981 :
979 :2007/12/09(日) 22:19:31
ごめん誤爆ですorz
いや、あってる
983 :
仕様書無しさん :2007/12/10(月) 20:49:12
( ^ω^)
#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
#define HELLO_WORLD int main() { printf("Hello, world!"); return 0; }