読者です 読者をやめる 読者になる 読者になる

Gobble up pudding

プログラミングの記事がメインのブログです。

MENU

TopCoderはじめてみました SRM516 Div2 Easy NetworkXZeroOne

Programming C++ 競技プログラミング
スポンサードリンク

f:id:fa11enprince:20150731121025j:plain
TopCoderっていう競技プログラミング的なものがあるんですが、
僕はアルゴリズムってか考える力が少し弱いと思ったので、気が向いたら今後もやろうと思います。
競技プログラミングと聞くとすごい敷居が高いように感じられますが(もちろん上級向けの問題は難しいんでしょうが)、例えば今回ボクが解いたような入門用の問題なら簡単です。
とりあえずまずは手始めで簡単な問題を問いてみました。
たぶん一番のハードルは登録です。ちょっと面倒です(詳しいやり方は記事末のリンクを参考に)。すべて英語ですが、かなり丁寧に問題の意図を教えてくれる例題が豊富っぽいので、英語わかんなくても大丈夫だと思われます。
専用のJava上のコンソールの上でコンパイル&テスト&提出します。普段Vim使ってるからそれはそれは非常にやりにくかったです。
画面もちっちゃいしプロンプトのスタイルがやな感じだし。勝手がわからず…。でも楽しめると思います。いろいろ試して遊んでみました。
解答する言語はたしか5種類くらい選べて、Java, C#, C++, VB, pythonでした。僕はC++でやってみました。
いろいろ書いてみてstd::coutとかも書いて問題無いとわかりました。もちろんstd::cerrにも対応してました。それ専用の出力部分がありました。
メソッドとか追加で作ったりしていいのかなとかも思いましたが、とりあえずふつーの普段通りの書き方が通用するっぽいです。

問題の解答はインターフェースが決められていて、こういうクラス名でこういうパブリックメソッドにしてね!という指定が付きます。
今回説いた問題はおおまかに説明すると

問題 SRM516 Div2 Easy NetworkXZeroOne

xとoと?で構成される文字が渡されるから、それをxとoだけの文字列に直してね。
戻す文字は元の文字列と同じ長さでxとoが交互に順番に並びます。
(英語では偶数の長さの間ではoとxの個数が一致すると書いてました)
例)
    x?x? -> xoxo
    xo?? -> xoxo
    oxo?o? -> oxoxox
    x?x?? -> xoxox
クラス名: NetworkXZeroOne
メソッド: string reconstruct(string message)
にしてね!もちろんメソッドはpublic

ちょっと説明下手ですがまぁ、例を見ていただければなんとなく雰囲気は伝わると思います。

解答例

?だけではなく少なくともxかoは一個は渡されるらしいので、まぁいいやってことでエラー処理は一切なし。

というようななげやりなコードを書いてCOMPILE -> TEST -> SUBMITという流れです。
TopCoderのコンソールの操作方法が独特でそこがきついです。
なんか顔文字がたくさん見えて変な感じでした。
結局提出したら点数入りましたが、なんだかよくわかりません。途中1時間位席離れてましたし。
とりあえず最低限のテストはクリアしたものの、
どこを見てコードが正しい正しくないとでるのもちょっと良くわかってないです。
調査不足…。

TopCoderの始め方

Topcoderへの登録方法(2013年1月版) - マトリョーシカ的日常
今記事を書いてて見つけました↑素晴らしい。