goo blog サービス終了のお知らせ 

役立たずのプログラマーブログ

自分の得た知識や経験をブログに書くことで整理し、考えをまとめることが目標

2変数でのswap

2007-10-05 23:03:09 | プログラム
この間、「C言語によるアルゴリズム辞典」を買ったら、
最初の辺りで、2変数でのswapの仕方が載っていた。

今まで、やってたやり方
tmp=a;
a=b;
b=tmp;

載っていたやり方
a^=b;
b^=a;
a^=b;

最初は何でか分からず、しばらく考えてようやく理解できた。
うまいこと考える人いるんだな。

PerlのError.pm

2007-09-11 17:36:28 | プログラム
何だかよく分からないが、PerlのError.pmでエラーを吐いて
昨日までうごいていた、automakeとかがエラーに。
Fedora6からupgradeしたせいなのか、はたまたシェルからCpanでアップデートしてたせいなのか、
なんだかよくわからないが、Error.pmが二つ存在していた。

[root@localhost MatArith]# autoscan
Errno architecture (i386-linux-thread-multi-2.6.19-1.2895.fc6xen) does not match executable architecture (i386-linux-thread-multi-2.6.20-1.2962.fc6xen) at /usr/lib/perl5/site_perl/5.8.8/Errno.pm line 11.
Compilation failed in require at /usr/share/autoconf/Autom4te/XFile.pm line 90.
BEGIN failed--compilation aborted at /usr/share/autoconf/Autom4te/XFile.pm line 90.
Compilation failed in require at /usr/bin/autoscan line 45.
BEGIN failed--compilation aborted at /usr/bin/autoscan line 45.

/usr/lib/perl5/site_perl/5.8.8/Errno.pmは$VERSION = "1.09_01";
どうやら古いらしいので、削除(←いいのかな?)
/usr/lib/perl5/5.8.8/i386-linux-thread-multi/Errno.pm
は$VERSION = "1.10";なのでそのままに。

不安なので、一応、記録として残しておく。
とりあえず、$autoscanは復活した。

C++の勉強中

2007-05-22 23:45:15 | プログラム
top coderの1000点問題を4日かけてといた。
問題は、文字列配列であるルールに従ってソートするだけの問題だった
んだけど、STLの使い方がさっぱりなためにえらく時間がかかった。
indludes()の引数Vectorをソートしてなかったのがどうしても気が付かなかった。
ほんと、もぐりの役立たずプログラマーだなと実感した。

一応、C++の仕事はしたことがあったんだけど、VC6での開発だったので、
STLのようなC++らしい側面にまったく触れたことがなく、
また、本を読んでも使い方がいまひとつピンとこなかった。
最近ようやく「とても便利」であることがわかるようになってきた。
で、勉強を少し始めたんだけども、なんかねー、
読むべき本が多すぎる割に処理能力が低くて困ってます。
またやらなきゃいけないことが増えてしまって憂鬱だわ。

Top Coder

2007-05-03 18:24:31 | プログラム
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掲示板に書いているとおりにしてもアプレットが動かねー。