SRM200-DIV2-1000

WindowManager

class WindowManager {
public:
  vector <string> screen(int height, int width, vector <string> windows) {
    vector <string> result;
    stringstream ss;
    int lx,ly,rx,ry;
    char c;
    result.clear();
    string s;
    s.clear();
    s = "";
    //    cout << width << "," << height << endl;
    for(int a=0;a<width;++a) s += " ";
    for(int b=0;b<height;++b) result.push_back(s);

    for(int i = 0;i<windows.size();++i) {
      ss.str(windows[i]);
      ss >> ly >> lx >> ry >> rx >> c;
      rx += lx -1;
      ry += ly -1;

      for(int y=0;y<height;++y) {
    for(int x=0;x<width;++x) {
      if((x==lx && y==ly) ||(x==lx && y==ry) ||(x==rx && y==ly) ||(x==rx && y==ry)) {
        result[y][x] = '+';
      }
      else if(((x == lx)||(x == rx)) && (y > ly) && (y < ry)) {
        result[y][x] = '|';
      }
      else if(((y == ly)||(y == ry)) && (x >lx) && (x < rx)) {
        result[y][x] = '-';
      }
      else if((x >lx) && (x < rx) && (y > ly) && (y < ry)){
        result[y][x] = c;
      }
        }
      }
      ss.str("");
      ss.clear();
    }
    return result;
  } 
};

SRM199-DIV2-500

三角形の数を数える

パズルみたいな問題。上向きと下向きに分けて数えていけばOK

class TriangleCount {
public:
  int count(int N) {
    int result = 0;
    for(int i = 1;i<=N;++i){
      for (int j = i;j<=N;j++){
    result += j-i+1;
    int down = j - i + 1 -i;
    if ((down) > 0) result += down; 
      }
    }
    return result;
  }
};

SRM198-DIV2-500

赤と黒のチェッカーボードの赤い部分を数える

チェッカーボードの作り方がおかしいのに気づかず、テストがこける理由が分からなかった。

class RedSquare {
public:
  int countTheEmptyReds(int maxRank, int maxFile, vector <int> rank, vector <int> file) {
    int board[50][50];
    int result = 0;
    memset(board,0,sizeof(board));
    bool black;
    for(int   i=0; i<maxRank;++i) {
      if     (i == 0) {black  = true;}
      else if(board[i-1][maxFile-1]){black = true;}
      else {black = false;}
      for(int j=maxFile-1; j>=0; --j) {
    if(black){
      black = false;    
        }
        else{
          board[i][j] = 1;
          black = true;
        }
      }
    }

    for(int k=0;k<rank.size();++k) {
      int m = rank[k]-1;
      int n = file[k]-1;
      board[m][n] = 0;
    }

    for(int x = 0;x<maxRank;++x)
      for(int y = 0;y<maxFile;++y) 
result += board[x][y];

    return result;  
}
};

iKnowのCtrl-&gt;,&lt;

この重要なショートカットキーがmacbookのfirefoxだと効かなくて、非常に使いづらかったのだけど、safariだったらOKなことにさっき気づいた。

というわけで、safariをiKnow専用ブラウザとして使い始めた。

恋するプログラム

これも相当長い間放っておいたのだけど、なんとなくRubyのコードが読めるようになってみたらさらっと読みきれた。

ProductName 恋するプログラム―Rubyでつくる人工無脳
秋山 智俊
毎日コミュニケーションズ / ¥ 2,625 ()


マルコフ連鎖モデルのとこが参考になった。

Fastladderを触っている

職場に入れたかったのでproxyに対応させる必要があった。というわけで作業メモ。

trunkにタイポがあったので二カ所ほど修正した気がする。

あと、addする際に登録できないフィードがあってなんでかな?と思ってみたら、urlが全部小文字になってた。これもrfeedfinderの仕業だった。

16行目くらいの

uri = uri.grep.sub(/^feed(.*)/,'http\1'/.downcase

のdowncaseが邪魔なので、ここを修正。

今日の作業はここまでだけど、RSSとAtomだったらAtomのほうを購読したほうがよさげな感じがしたりとかするので、そこらへんのコードも見てみながらrubyの勉強もする。

というか、rubyのシンボルでちょっと悩んでググったりとかした。

METAMORPHOSE 08

テンションをあげていくために買ってみた。

ProductName METAMORPHOSE 08
オムニバス,COBBLESTONE JAZZ,JOSH WINK,Q’HEY,MAYURI & Salmon,FUMIYA TANAKA,DJ NOBU,MATTHEW DEAR,MEZKLAH,MANUEL GOTTSCHING&ASHRA,TONY ALLEN&AFRICA 70
0510 MUSIC / ¥ 3,200 (2008-08-02)
通常24時間以内に発送

アルバム最後のThe Album Leafのチルっぷりがさいこーなので、アルバムもぽちっとした。

ProductName Into the Blue Again
The Album Leaf
Universal / ¥ 1,578 (2006-09-12)
通常24時間以内に発送

Cobblestone Jazzとかソラーにちょっと気になるアーティストが多い。

もちろんJosh Winkも気になる

CPAN::Mini::Webserver入れた

macbookにCPAN::Miniをいれて、さらにCPAN::Mini::Webserverを導入してみた。

快適!

夏の休暇のこと

僕の休暇はmetamorphoseにはじまりLL Futureでしめるという、一見なんとも豪華そうなスケジュールを設定したように見えるが、実は間の5日間は特になにもないという、あまりに雑なものだった。

台湾にいこうとか、奥飛騨にいこうとか、石垣島もいいねーとか、ここ一ヶ月以上いいね的な話はしているのだが、まだ何も決めていない。

そんなわけで、さすがに明日、明後日でスケジュールを確定させなきゃねーと話していたのであった。(先週もしてたけどな)

ProductName 高山・白川郷 (ことりっぷ)

昭文社 / ¥ 840 ()
通常24時間以内に発送

というより、僕は萩の陶器市にいってみたいのですよ。まったりと吞める酒器が欲しい。

SRM195-DIV2-500&1100

そろそろ1000点問題などもやりはじめる。

FanFailure

class FanFailure {
public:
  vector <int> getRange(vector <int> capacities, int minCooling) {
    int mfs=capacities.size();
    int mfc=capacities.size();
    vector <int> result;
    sort(capacities.rbegin(),capacities.rend());
    int rest = minCooling;
    for(int i = 0;i<capacities.size();++i) {
      rest -= capacities[i];
      mfs--;
      if (rest < 0) break;
    }

    sort(capacities.begin(),capacities.end());
    rest = minCooling;
    for(int i = 0;i<capacities.size();++i) {
      rest -= capacities[i];
      mfc--;
      if (rest < 0) break;
    }

特にこれといってはまるところはなし。

ChangePurse

class ChangePurse {
  int find_pos(vector <int> cointypes, int val){
    for(int i =0; i<cointypes.size();++i){
      if(val == cointypes[i]) return i;
    }
  }
public:
  vector <int> optimalCoins(vector <int> coinTypes, int value) {
    vector <int> cs = coinTypes;
    vector <int> mapped;
    vector <int> coins;
    vector <int> results;
    int num; 
    for(int i=0;i<coinTypes.size();++i) results.push_back(0);
    sort(cs.rbegin(),cs.rend());
    for(int k=0;k<cs.size();++k) mapped.push_back(find_pos(coinTypes,cs[k]));

    for(int j =0;j<cs.size();++j){
      if((value+1)%cs[j]==0){
    coins.push_back(value / cs[j]);
    value = cs[j]-1;
      }
      else {
    coins.push_back(0);
      }
    }
    coins.push_back(value);
    for(int z = 0;z<cs.size();++z) results[mapped[z]] = coins[z];
    return results;
  }

    result.push_back(mfs);
    result.push_back(mfc);
    return result;
  }

ベクタをソートする際にソート前のインデックスを覚えておきたい場合どうやるのがいいのかがわからん。