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

のんびり読書日記

日々の記録をつらつらと

初チャレンジ

TopCoder(http://www.topcoder.com)をちょこっと試してみた。
TopCoderについては下のITmediaの記事が詳しいかも。
http://www.itmedia.co.jp/enterprise/articles/0703/01/news013.html

まだ他の人と戦う自信はないので、とりあえずAlgorithmの練習問題の中から2つだけ。問題では作るプログラムの内容と、クラス名・メソッドの形式が指定されている。まだそんなに難しくないね。ただC++は慣れてないので、変な書き方になってるかも。

SRM144 Div2 200
与えられた秒を"H:M:S"形式の文字列にして返す。

#include <string>
#include <sstream>

using namespace std;

class Time {
public:
  string whatTime(int seconds) {
    int hour = seconds / 3600;
    int second = seconds - 3600 * hour;
    int minute = second / 60;
    second -= 60 * minute;
    ostringstream oss;
    oss << hour << ":" << minute << ":" << second;
    return oss.str();
  }
};

SRM145 Div2 250
文字の出現回数を調べる("AB", { "ABC", "CDE", "ABA" } -> 5)

#include <vector>
#include <string>

using namespace std;

class ImageDithering {
public:
  int count(string dithered, vector<string> screen) {
    int sum = 0;
    for (int i = 0; i < screen.size(); i++) {
      for (int j = 0; j < dithered.length(); j++) {
        for (int k = 0; k < screen[i].length(); k++) {
          if (dithered.at(j) == screen[i].at(k)) sum++;
        }
      }
    }
    return sum;
  }
};

プログラムはTopCoderツール(java製)上で書いて、そのままコンパイル・テストができる。すごいなー。でもツール上のエディタはちょっと使いづらいな…。プラグインを入れて、自分の好きなエディタを選択できるっぽいので、今度試してみよう。

こういうクイズっぽいのは好きだなぁ。昔、Python Challengeをやってたことがあったけど、あれもかなり面白かった。PILで画像をいじったりしないと先に進めないんだよね。TopCoderではそういう問題はなさそうな気がするけど、難易度はこっちの方がずっと高いんだろうなぁ。計算機科学の勉強にもなりそうだし、毎日少しずつ解いていこう!

あとせっかくなので、積ん読だったアルゴリズムC++も毎日少しずつ読んでいくぞ!