蛾
かばんにくっついて入ってきたのか、家の中に元気な大きな蛾がいる(涙)
今日覚えたこと
勉強しないつもりだったけどTopCoderが近づいてくるとついつい勉強してしまう、プログラマの三大美徳の一つ、自尊心の強さ。
- boost::optional
- HaskellのMaybeみたいなのがC++にもあった!
- これを使えばだいぶ楽になる!
- http://www.kmonos.net/alang/boost/classes/optional.html
- boost::tokenizer
- これは便利、、、なはずだが型がすごいことになっているな
- 与えられた文字列を2文字ずつ取り出して、、、ってのが簡単にできる、はず。
- http://www.kmonos.net/alang/boost/classes/tokenizer.html
- 多分mapを使いこなせるようになっておく必要があるかと思う。
-
-
-
- -
-
-
template<class T, size_t N> size_t len(T (&)[N]){ return N; };
これがありなのだから
template<typename T1, typename T2, size_t N> map<T1, T2> mapzip(T1(&)[N] keys, T2(&)[N] values){ map<T1, T2> m; for(size_t i=0; i<N; i++){ m[keys[i]] = values[i]; } return m; };
これもできることを期待したのだけどそうは問屋がおろさなかった。typenameとか(&)[N]とかをきちんと理解しないといけないようだ。
-
-
-
- -
-
-
template<class T1, class T2> map<T1, T2> mapzip(T1 keys[], T2 values[], size_t N){ map<T1, T2> m; for(size_t i=0; i<N; i++){ m[keys[i]] = values[i]; } return m; }; int main() { int xs[] = {1, 2, 3}, ys[] = {10, 20, 30}; map<int, int> m = mapzip(xs, ys, 3); print_map(m.begin(), m.end()); }
妥協した。
print_map(m)って呼べるやつを作ろうと思ったけどうまく動かない。
-
-
-
- -
-
-
print_mapできた。
template<typename K, typename V> void print_map2(map<K, V> m){ cout << "{"; for(typename map<K, V>::iterator it=m.begin(); it != m.end(); ++it){ if(it != m.begin()) cout << ", "; cout << (*it).first << ":" << (*it).second; } cout << "}" << endl; }
「for(typename」が重要。
-
-
-
- -
-
-
mapzipもできた。
template<class T1, class T2, size_t N> map<T1, T2> mapzip(const T1(&keys)[N], const T2(&values)[N]){ map<T1, T2> m; for(size_t i=0; i<len(keys); i++){ m[keys[i]] = values[i]; } return m; }; int main() { int xs[] = {1, 2, 3}, ys[] = {10, 20, 30}; map<int, int> m = mapzip(xs, ys); print_map2(m); }
変数名が入るのは&の後ということだった。
明日20:00からSRM400
あんまり勉強してない。250点問題を確実に解くことに集中しようかな。知るべきライブラリを知らなかったらその場で調べる方針で。
あと「TopCoderは海外のイベントだから時間帯が深夜とかでつらい」なんて言ってる人は「TopCoderやる気が全然ないので次のイベントがいつあるのかすらチェックしていない」と自覚すべきだ。自分一人がやる気ないだけならまだ実害ないが、間違った情報を流して他人のやる気までそぐのなら有害だ。
そんなこんなで次回は夜の8時からという「晩ご飯を食べ過ぎて眠くならないように注意しなきゃ」って時間帯の開催。
http://www.topcoder.com/tc?module=MatchDetails&rd=12172
Total Prize Purse of $5,000 !!!
(snip)
The first and second place competitors in each division two room will receive 60% and 40% of the room award, respectively.
おおおっ?!
解説しよう。次回のSRM400にはブリティッシュテレコムから5000ドルの賞金が出る。今まで「どうせ自分には関係のない話だ」と思っていたが実は違ったようだ。今回始める人やまだレーティングが1400に達していない人はDIV 2っていう「二軍」でプレイすることになるのだけど、その二軍に賞金総額の30%が割り当てられるそうな。そしてプレイヤーはランダムに20人ずつ部屋に割り当てられるのだけど、この部屋ごとに1位と2位が賞金をもらえるらしい。ランダムだとしても10%の確率で賞金をもらえるw
もちろん賞金総額がそんなに大きいわけではないので、DIV2の部屋内1位程度では1000~1500円程度になりそうな気がするけど、金額はさておき賞金をもらうのってかっこいいよね(ぉ
献本
とりあえず著者に送られてきた6冊のJython本は1冊がラボの本棚経由で、残り5冊がお金のない学生さんへと郵送された。僕の手元に1冊もない。まぁそのうちラボの本棚に戻ってくるだろうけど。というわけで第3弾の献本はもうしばらく先になりそう。在庫がなくてはどうしようもない。
一応、今のところの考えを整理しておくと、下の2つの条件を両方みたす人には献本が送られるかもしれません。みたさない人にも送られるかもしれません。あくまで「送られるかもしれません」で。
- 学生もしくは未成年
- 年収が300万円未満
欲しい人は僕のメールアドレスに住所・氏名・郵便番号などをメールしてください。まぁでも次の在庫がいつ入るのかわからないので、早く手に入れたいならAmazonで買う方がいいかと。主に「読みたいけど3000円は高い…」という学生向けだと思っていただければ。
併行して図書館とかにも寄贈した方がいいのかな?