競技プログラミング(主にTopCoder)について

競技プログラミングへ参加するための必要条件は、 for文、if文が分かる 配列が扱える 文字列が扱える 関数がどういうものか分かっている 続きを読む
5
競技プログラミング?

プログラミングコンテストの一形態です。 このコンテストの参加者は、数時間の制限時間内に、与えられた数問の問題を解くプログラムを作成することを要求されます。 ・コーディング速度・精度の向上 ・論理的思考力の向上 ・アルゴリズムの知識の増加

chokudai(高橋 直大)@AtCoder社長 @chokudai

うーん、競技プログラミングで「とにかく問題解く」は確かにありだとは思うんだけど、問題を解いた上で、上位陣のソース読んだりとか、意見を交わしたりとか、間違えたら間違えた原因を探ったりとか、そういうのが大切なんじゃないのかなぁ

2011-10-12 19:15:18
chokudai(高橋 直大)@AtCoder社長 @chokudai

例えば、Wrong Answerを出したとしたときに、「何が悪いのか」を考えて直すのは当然として、「どうしてそのバグが出てしまったのか」とか、「次から何を気を付けるべきか」とかを考えないと、成長は少ないんじゃないかなぁ、と思う 提出しなくても、書いてる最中のとかでもね

2011-10-12 19:17:19
chokudai(高橋 直大)@AtCoder社長 @chokudai

例えば、50問くらい問題を解いて、バグの原因を分析するだけで、「foreachを使うことでどれだけバグが減らせるか」みたいなのが見えてくると思うんだよね 実装上の注意以外に、発想部分も色々あると思うんだけど、ただ単純作業的に問題を解いていくだけで強くなれると思ったら間違いだと思う

2011-10-12 19:21:32
chokudai(高橋 直大)@AtCoder社長 @chokudai

競技プログラミングのがそこそこRTされてるのに、foreachたいせつに関しては全くRTされていない。超たいせつなんだぞ!おまいら添え字ミスで何回バグった!コンパイル初めてするときに添え字ミスがない確率は何割だ!

2011-10-12 19:32:05
KOIZUKA Akihiko @koizuka

@chokudai C++0xに移行すればforeach相当のfor文が

2011-10-12 20:01:02
chokudai(高橋 直大)@AtCoder社長 @chokudai

@koizuka あ、そっちだともうあるんですねー、そっちの方の仕様まだ全然把握してないです。多分そこら辺全部移行されたら相当便利なんだろうなぁ、とは思ってるんですが、移行して暫くして資料出揃ってから勉強すれば良いや、みたいなスタンスです

2011-10-12 20:03:51
KOIZUKA Akihiko @koizuka

@chokudai std::vector<int> vec; for (int& n: vec) std::cout << n; みたいなかんじだったかな。あとC++0xじゃなくてもうC++11だったw

2011-10-12 20:06:59
chokudai(高橋 直大)@AtCoder社長 @chokudai

@koizuka おー、そんな感じなんですね、それなら普通に使い勝手よさそうです

2011-10-12 20:09:34
chokudai(高橋 直大)@AtCoder社長 @chokudai

「多くの競技プログラマーがC++を使ってて、C++にforeachないから当たり前じゃん!」との意見を頂いた 確かにそりゃそうだ

2011-10-12 19:36:37
chokudai(高橋 直大)@AtCoder社長 @chokudai

まぁC++だとイテレータとか使うから似たようなことは言えるなぁ、と思ったけど、なんか色んな実装考えるとイテレータ便利だなぁ、と今更ながら思い始めたり C#だと添え字そのまま残してる場面で、C++ならイテレータで色々やり易い場面が結構ある気がする

2011-10-12 19:54:39
chokudai(高橋 直大)@AtCoder社長 @chokudai

しかしなんかなぁ、C++の人の、自分はそんな機能使わないから要らないよね的な見下した感じの反応は何なんだろう C++の話するといつもそういう反応をする誰かに食いつかれる気がして気に食わない 良い言語だと思うのに触れたくなくなる理由の1つ

2011-10-12 19:59:14
chokudai(高橋 直大)@AtCoder社長 @chokudai

TopCoderやってて良くないのの1つに、コンパイラが古い、ってのはまず間違いなくあるんだよなぁ 明らかに最新技術を勉強する意欲を阻害されちゃう C#とかいつまで2.0なんだよと、var使えないとか致命的過ぎるから!

2011-10-12 20:05:32
chokudai(高橋 直大)@AtCoder社長 @chokudai

ん、for(int n: vec)じゃなくて、for(int& n: vec)なのか nの書き換えとか出来るのかな いやポインタはちゃんと考えないとわかんない人だからちゃんと考えずに発言すると総突っ込み受けそうだけどw

2011-10-12 20:11:07
cos @cos65535

@chokudai C++のforeachはマクロで作ってます。無いと不便すぎる気が。

2011-10-12 20:09:47
chokudai(高橋 直大)@AtCoder社長 @chokudai

@cos65535 あれcosさんforeachマクロ使ってましたっけ、記憶にない>< けど作ってる人多いですよねー

2011-10-12 20:11:39
chokudai(高橋 直大)@AtCoder社長 @chokudai

C++11の話を聞いた感じ、競技プログラマ視点でもC++11は相当便利そうに感じる 今でもC++1強状態なのに、これだとC++勢さらに増えるじゃないかw

2011-10-12 20:16:12
chokudai(高橋 直大)@AtCoder社長 @chokudai

最近、上位競技プログラマの話を聞いてて思うのは、「この条件を省いた時に、この問題の最低オーダーはO(なんとか)」みたいなのを知ってて、そこで思考の枝刈りが出来てるなぁ、ということ 考えずとも、「これが解けない」ってのが判ってるのは凄く強力

2011-10-12 20:18:45
chokudai(高橋 直大)@AtCoder社長 @chokudai

ぷよAIが人間Topをすぐ超える、はさすがに有り得ないなぁ ある程度の強さ、くらいで良ければ多分かなり簡単に行くけど、人間Topが色々と洗練され過ぎている 前々からちょっとずつ考えてるから、少しずつ勝ち目は見えて来てるけど(といいつつまだ何も組んでない)

2011-10-12 20:51:10
chokudai(高橋 直大)@AtCoder社長 @chokudai

あ、「自分程度のアルゴリズマーには」と、一応前提を付けておきますw 自分より遥かに凄い人とかだともっと余裕で作れる可能性はあるし、そこら辺はわからん><

2011-10-12 20:54:35
chokudai(高橋 直大)@AtCoder社長 @chokudai

「シアン」とか「マゼンタ」とかわかりにくいから、「あお」とか「あか」とかにしてくれるといいとおもう

2011-10-12 21:43:56
TokusiN @toku51n

@chokudai シアン、マゼンタを青、赤と訳すと、00FFFFと0000FF、FF00FFとFF0000の区別がつかないので困ります。

2011-10-12 21:46:11
chokudai(高橋 直大)@AtCoder社長 @chokudai

シアンとマゼンタって00FFFFとFF00FFだったのか・・・ それならそうと先にそういうべき!「シアン」とか「マゼンタ」とか言うより、00FFFFとかFF00FFって呼んだ方がずっとわかりやすいじゃないか!

2011-10-12 21:50:02
chokudai(高橋 直大)@AtCoder社長 @chokudai

なんか最近、競技プログラマーの地位向上!的なのを掲げてよく発言してる気がするけど、上位層が色々心配してるのは大体ただの杞憂だよねw 明らかに自分が何かしらする必要がない人ばっかり どちらかというと、おもろいからみんなやろーよ!に、やると能力的にも良いの身に付くよ!を足した感じ

2011-10-12 22:08:31
chokudai(高橋 直大)@AtCoder社長 @chokudai

これは明言しておかないと色々アレな気がするから念の為 RedCoderとかでも就活こわい的な人よく見るけど、どうにでもなるんじゃないんだろうか いや就活したことないからわからんけど

2011-10-12 22:13:23