4月に入ってから、午後7、8時に帰れるようになってきたので、
ここらで何かするチャンスと思い、今までやれたらなーとぼんやり考えてきた事を実行してます。
といっても、
・英語の勉強
・家でコードの練習問題を書く
・マイコンをいじる
といったものなんですが。
このうち、家でコードを書くことについて、練習問題がたくさんのってる本を探したのですが、
問題がつまらないものしか本屋にない。
フリーソフト開発でも代わりにするかなぁと考えたりもしましたが、
ふと、「オフシェア時代のサバイバルガイド」を読んでいるときに、
Top Coderというサイトを知りました。
基本はプログラムのコンテストなのですが、練習用として過去の問題が載っていて
まさに探していたものにぴったりだったので、登録して、SunのJavaをイントールし、アリーナへ入るとアプリが立ち上がりました。
適当に過去問を選択し、英語に四苦八苦しながら問題を読んでみると、結構シンプルで一安心。
「スペースをトークンとする文(英語)の平均単語長を出す。ただし何を単語とするかは条件があり、
数字混じりは単語ではない。また、単語の最後のピリオドは単語長には入れない、単語の途中にピリオドがあると単語ではない」
大体こんな感じでした。
選択できる言語C++、Java、C#、VB.netのうちC++を選択し、
時間をかけまくりつつアルゴリズムの250点問題を解き、どきどきしながらSubmit。
そのあと、他の人のソースをみて自分のコードが如何に汚いのかにへこんだりしました。
C言語ばっかりやっているので、Javaのsplitとかmachesメソッドをつかったコードのシンプルさに驚きました。
おもしろいのが、Challengeという制度。人のコードを見て、まちがってそうなら、Challenge。
そして、バグのデータを突っ込んで判定すると、バグっていればそのコードを撃沈でき、
問題なければ、自分の得点が減ってしまいます。
ソースの中には、わざと変に書いてChallengeを誘ってるだろ!といいたくなるようなものがあったり。
たとえばif(( a <= x && x < z ) || ( A <= x && x <=z ))
みたいな。
不等号やら、範囲のめちゃくちゃな文だったので、
試しにchallengeで「[」をいれてみたんですが、入力できないとしてChallenge失敗。あわわ。
しばらく人のソースを読んだあと、2問め500点問題に挑戦。
こんどは、STLですっきり書けそうだったので、プログラミング言語C++を読みつつ、
またまた時間をかけてコーディング。今度は自身を持ってSubmit。
(まあ、いまごろ撃沈してるかもしれない。)
言語が英語なので、とても疲れますが、
勉強しつつ、他の人の回答や、他の言語での回答がみれるという、かなりよい体験ができました。
できればLinuxで!と思い、SunのJavaをインストールしたりしていたのですが、
どーにもうまく入れられなかったり。今日はこれでつぶれてしまいました。
つーか、Fedora掲示板に書いているとおりにしてもアプレットが動かねー。