TopCoderやってみた

topcoderのSingleRoundMatch(SRM)という週1回、1.5時間ぐらいの小さなプログラミングコンテストに参加してみました。得点が違う3題が出され、それらにそった関数を作ることで時間に応じた得点(rating)がもらえます。賞金はあるらしいですが、多分かなり上位じゃないと無理っぽいです。

TopCoderの様子

頭の体操のために参加してみたなーと1月ぐらいから思っていました。でもC++やったことなかったので、躊躇していて、この前のg86合宿でC++本をざーっと読んだので参戦してみました。気づいた事をメモ。

  • コンテストで使える言語はC++, Java, C#, VBだけど、C++を使う人が圧倒的に多い。今回の部屋では20人中Javaが1,2人しかいなくて、あとはみんなC++だった。
  • C++はCだと思って書いてもなんとなく書ける。
  • 開催時間が固定されていない。例えば今回は日本時間の火曜夜20時だったけど、来週は木曜朝10時から。授業あるじゃん...
  • 英語が苦手でもSRM用のJavaAppletを動かしてろいろクリックしてみれば、過去問の見方とかだいたいわかる。TopCoderのウェブサイトをうろうろしてもだめ。
  • ひとつのSRMでDIV1とDIV2がある。みんな最初はDIV2からはじまってRatingが1200を超えるとDIV1問題に取り組めるらしい。*1
  • TopCoderへの参加を躊躇しているひとはとりあえずJavaAppletを動かして、先人が問題を解いたソースコードが思いのほか短いことに気づけると思う。
  • 先人の書いたファイルを参考に、#includeするやつを作っておくと便利。
  • CodeProcessor, FileEdit, TZTesterなどのエディタ支援は必須。emacsvimでできたり、ひな形が容易されるとめちゃくちゃ便利。テストコードをemacs上のgdb走らせることもできる。Gulfweedさんのエントリを読んでやったら簡単にできた。
  • Challenging Phaseという他人のコードを読んでバグを見つけるPhaseがあるけど、むずい。ミスりそうな所を決めてからいろんな人のコードを見まくるのかなぁ。
  • とあるtopcoderIRCチャットに参加してみたら、そこでの最低ratingでも1300の人でびっくりした。すっげ。
  • 当たり前だけど、英語読めないとこまる。

いろいろ教えてくれた@mootohさん、kentanjpさん、arkさんありがとうございます。
一回目のSRMに参加してRating:1096。DIV1に進めるようになりたいが、はじめのうちはRatingがころころかわるとのことなのであまり気にしないでおく。

得点

*1:僕はDIV1のほうが難しいと知らずに、DIV1問題を読んでなんでみんなこんなのを簡単に解けるのか、とびっくりしたことがある

"時差"、なくなるんじゃね?

今更ですが、情報がその地域の昼夜を問わずに24時間世界中を行き来する時代になりました。それはお金の流れとかだったり、新製品の発売とかのニュースだったり、そんなWWWを使ってやりとりされる情報のことを考えてもらえば良いです。
これまでは地球のおおよその軽度によって24時間の始まりと終わりがばらばらで、日本の4月12日午前1時とイギリスの4月1日午前1時は同時には起こっていなかった。標準時から+9:00ずれている日本が4月12日午前1時のとき、イギリスは4月11日の16時です。この時差のおかげで情報の伝達に齟齬が発生したり、プログラムの実装が面倒になったりするのをこの前iCalのデータをいじくってて感じたのです。

というわけで、いつ誰が進めるかわからないけど、時差という概念がなくなる日がくるんじゃないだろうか。
"時差"という概念をなくして、地球のどこかの地点を基準として、地球全体が一つの24時間の流れの中で時を刻む、そんな日がくるんじゃないかと思った。


...というテスト投稿。

迷惑なbotを作った。

データベースに登録してあるRSSフィードを読み込んで、登録してあるTwitterのアカウントにPostするスクリプトを書いた。


迷惑なbot

最初はRSSからTwitterBotを簡単に作れるサービスを作ろうかとおもったのだけど、テストとして使ったRSSTwitterのユーザの発言にしたことで非常にくだらないアイデアが浮かんだ。Twitterの発言RSSを取って、新たな発言がなされていたら「@suztomo がTwitした : (ここにメッセージ)」という書き込みをするbotは、次の2つの点で非常に迷惑だということだ。

1つは発言の取得はRSSなら制限できないということ。ユーザの発言の取得はRSSでデータを取得するのでblockできない。botの発言の中に自分の書いたことがあると何となくストーキングしているように見える。この状態を「ストーキング」と形容してくれたのは@yaotti。

2つ目はreply欄が埋まるということ。発言が取られてTwitterの投稿に使われて嫌なのは気分の問題として、「@」 マークを先頭に持ってくるreplyの形式のメッセージにすることによって、replyのタブがbotのメッセージで埋まってしまうことになる。実験したら*1めちゃくちゃ迷惑をかけた。

というわけで、reply発言ばかりするbotを作ると非常に迷惑ですよ、という話でした。

*1:id:skylab13、@hayamizu, @sotarok, @syou6162 ごめんね!

MacBookを買って気づいたこと

4月のはじめにMacBookを手に入れてから半月がたちました。僕の周りにまだWindowsを買おうとしている人がちらほらいるようなのでMacの良いところを書き連ねてみます。

Macよいとこ

コマンドラインが強い

Linuxを使っているのと同じように各種コマンドが使える。Windowsでもcygwinというものを入れればコマンドは増やせるけど、最初からさまざまなコマンドを使えるというのは素敵。

プログラミングできる

Mac付属のXcodeというものをインストールすればgccが使えてCプログラミングができる。

キーボードショートカットが意外に使える

カーソルキーまで手を持っていくのが面倒。Cocoaアプリというものならばemacs風なキーバインドがデフォルトで使える。SafariでCmd+Lでアドレスバーにフォーカスを持っていって、「mail.go」を入れると候補が並ぶのでCtrl+N(emacsの↓)やCtrl+P(emacsでの↑)で選択してアクセスできる。ページ遷移をキーボードだけでやるのは便利。Safariで開いているページのtextarea中でならCtrl+F/B/N/Pで移動できるし、Cmd+Shift+<なども使える。

Macを使う前はWindowsにはmayu*1があるからWindows離れられないかな、と思っていたけど、意外といける。

portコマンド

新しいコマンドのインストールをコマンドラインから簡単に行うことができる。portで入れられるコマンドならば、「ソフト名をぐぐって、ダウンロードして、解凍しようと思ったら解凍に必要なソフトがなくて...」ということを避けられる。

画面がきれい。

この要因が一番大きい。チャットでスクリーンショットサービスのgyazoを使うときがあるけど、まだWindowsの文字がぎざぎざしているのがよくわかる。

安い

MacBookの一番安いやつを買ったので学割で12万円。iPodとあわせて買えば1万7千円分キャッシュバックされる。この前iPod touchを買うときに一緒に買っておくべきだった。

スペックは一番安いやつでも十分。画像や動画を処理するようなことはせずに、ネットとチャットとプログラミングしかしないので、非常に快適に動く。最近のコンピュータはこのぐらいの値段でも性能がいい。

iPod touchとの連携

iTunesWindowsと使い勝手は同じ。ただMacについているiCalというソフトを使えばウェブ上のGoogleCalendarとiPod touchのカレンダーの同期が簡単にできる。

iPod touchのほうでAFPdを動かせばあたかもハードディスクであるかのようにファイルを書き込みできるしね。

Spaces便利

Leopardから導入された仮想デスクトップ環境のSpacesというのが便利。あたかも4つ〜9つのディスプレイを使って作業しているぐらい快適にウィンドウを管理できる。WindowsにはSpacesのように画面の遷移が直感的でわかりやすい仮想デスクトップのソフトは多分ない。*2


Macのわるいところ

Office(笑)

Microsoftの製品なので完全互換性ではない。まぁ使わないけどね。レポートはtex*3でやってしまえばいいし、NeoOfficeなどのフリーソフトはちゃんとある。Gmailに送られてきた場合はHTML形式で内容をざっと見ることもできる。これらは一部で互換性がいまいちだけど。

ちなみにプレゼンテーションはブラウザ上で動くGoogleDocsがシンプルでおすすめ。

重い

動作は快適だけど、重量が重い。これは改善してほしい。MacBookAirはLet's Noteぐらい高いし。

右クリック

Ctrl+クリックは面倒。

追記: 設定すればトラックパッドを触ったままクリックすると右クリックにすることができる。コメント欄参照。

つまりは

いくつかの欠点はあるけれど、かなりおすすめです、Mac。でも、中には上の文章を読んで「これWindowsでもあのソフト使えばできるよ」と考えることもあるでしょう*4。ターミナルエミュレータCygwinや、仮想デスクトップソフトのVirtualWin、Outlook+Plaxoなどを使えばWindowsで「似たようなこと」はできますが、わざわざWindowsでやらなくても、ねえ(笑)

これまでWindowsを使ってきた人は、次の1台をMacにすることを強くおすすめします。

*1:Windowsキーバインド設定ソフト

*2:Linuxではほぼ同じことができるソフトがある

*3:まだ使ってない

*4:Linuxを使っている人はすばらしい選択肢を選んだと思う。僕にはLinuxを安定させて使うのはむづかしい><

IRCチャット

いつもg86の汚物チャットになれてしまっているから新しいチャットに入ると緊張する。今回はtopcoderと学科のチャットにあたらしいメンバーとして入ってみたのだけど、学科の先輩とかいたりするとくだらない画像のURLを貼ったりできないなー。

というわけで

テスト3件目。実はRSSを読み取ってTwitterに投稿するスクリプトを作っている。それにしても研究室周りはどこにいくことになるのだろう。わくわくてかてかしているところだが、一応希望を出した研究室ならばどこにいっても楽しそうなことはできそうな気がする。