« 2007年05月 | メイン | 2007年07月 »

2007年06月 アーカイブ

2007年06月03日

レイトン教授と水汲み問題とブルートフォースなねぎぽ

母親に以前脳トレとDSを買い与えたのだが、すっかりはまったのか、自分で大量にソフトを購入するようになった。その中に"レイトン教授と不思議な町"と言うものがある。一見逆転裁判のような推理系のようだが、推理を要する部分など全く無く、全面、これパズルとなぞなぞである。
で、今日。
もの凄く暇だった僕は手に取って始めてしまった訳だ、レイトン教授を。んでホイホイと今5時間で80程謎を解いた所なのだけれど、もうさっきから20分ぐらいある問題で詰まっている。曰く「16リットル、9リットル、7リットルの瓶があり、16リットルの瓶にはいっぱいに水が入っている。これを16リットルと9リットルの瓶に8リットルずつに分けて欲しい」と言った内容だ。

残念ながら僕はこの手の問題がもの凄く苦手である。はっきり言って諦めた。
諦めたので力技で解いてやろうと思っていそいそとPowerBookを取り出した。

my $a = {
0 => {
max => 16,
now => 16
},
1 => {
max => 9,
now => 0
},
2 => {
max => 7,
now => 0
}
};

my $i = 1;
while($a->{0}->{now} != 8 or $a->{1}->{now} != 8 ){
my $x = int rand 3;
my $y = int rand 3;
while($a->{$x}->{now} == 0){
$x = int rand 3;
}
while($y == $x or $a->{$y}->{now} == $a->{$y}->{max}){
$y = int rand 3;
}

my $move = ($a->{$y}->{max} - $a->{$y}->{now} > $a->{$x}->{now}) ?
$a->{$x}->{now} :
$a->{$y}->{max} - $a->{$y}->{now};

$a->{$x}->{now} -= $move;
$a->{$y}->{now} += $move;
print $i++, " : $a->{$x}->{max} => $a->{$y}->{max}\n";
}


もう完璧なまでの力技。再帰とか書かない書かない。エレガントさのかけらも無し。
もーこれでいいだろと思って実行した。

...全然答えが返って来ない。

続きを読む "レイトン教授と水汲み問題とブルートフォースなねぎぽ" »

2007年06月11日

Ruby Kaigi 2007

業務歴3ヶ月のぺーぺープログラマねぎぽです。土日はフルで日本 Ruby会議2007に参加してました。参加費は会社持ち!社長いつもありがとうございます :D


結論から言うと、今回のRuby Kaigiのテーマは"愛"。
会場にいると"俺はRubyを愛しているぜ"って言う参加者の熱気がもの凄かった。実際の所、僕はプログラミング系のでかいカンファレンスに参加した経験は今まで無かったのだけれど、YAPC::Asia 2007のビデオとかを見る限り、少なくともPerlに比してRubyコミュニティのプログラミング言語に対する愛は勝っている様に思う。Rubyを愛していないと、Rubyでバイナリいじって変態的プレゼンソフトなんて作れないだろうしゴールデンゲートブリッジを見て「Ruby色ですねえ」なんて感想は出て来ない
そして当然だけれど、Ruby愛は宗教じゃない。Dave Thomasさんが述べているように、みんながRubyを愛するのは、Rubyが自分を愛することを求めるのであれば、Rubyを愛することが必要だからである。そこには宗教的な無償の愛や熱狂ではなく、Rubyを愛することによって創出される筈の、より良いプロダクトに対する期待があるのだ。
Ruby愛以外に何か付け加えるものがあるとするならば、あとは、覚悟


僕はまだペーペーで、RubyじゃFizzBuzzもかけないプログラマだ(剰余ってどうやるんだっけ、%? ワンライナーを行う為のオプションは?)。だけど今回のカンファレンスでは、良いプロダクトを生産する為に何が必要なのか、と言う事を、魂に刻みこまれたように思う。プレゼンの上手さとか、プロダクトの凄さとかにも感動したけれど、それより重要なことを学んだ。社内ノウハウがないからなんだ。俺はやってやるぜ(たぶん)。


(余談)
"RubyじゃFizzBuzzもかけないプログラマ"のままじゃヤバいのでwとりあえず書いた

ruby -e '(1..100).each{|i| puts i%3==0 ? i%5==0 ? "FizzBuzz" : "Fizz" : i%5==0 ? "Buzz" : i }'

あれ、こんなに長かったっけ。とりあえずrubyじゃ0はtrueなことは学んだ。

2007年06月17日

Perltidy入れてみた

hyukiさんotsuneさんあたりの間で話題に上っていたので触ってみた。Perlソースコード整形ツール。


Perltidy


OS Xにインストールするには、officialのsourceforgeからUnix向けパッケージを持って来て

$ perl Makefile.PL && make && sudo make install

で普通に入る。
それではなぜかホームディレクトリにあったくそてきとうなソースを放り込んでみよう。
$ perltidy hoge.pl -o tidy.pl

hoge.pl :
$str = do $ARGV[0];

for(0..$ARGV[1]){
my $line = &MakeASentence($str);
print $line;
print "\n" if($line =~ /¥.$/);
}

sub MakeASentence{
my $str=shift;
my @hash_array = @{$str->{hash}};
my $data = $str->{data};
my $sentence_seed = $hash_array[int rand($#hash_array)];
# print $sentence_seed , "\n";

my @sentence = split /_/, $sentence_seed;
my $ret_sentence = undef;
for my $hinshi (@sentence){
my $seed = rand();
my $ratesum = 0;
for my $a (keys %{$data->{$hinshi}}){
$ratesum += $data->{$hinshi}->{$a}->{rate};
if($ratesum > $seed){
$ret_sentence .= $a;
last;
}
}
}
return $ret_sentence;
}


tidy.pl :
$str = do $ARGV[0];

for ( 0 .. $ARGV[1] ) {
my $line = &MakeASentence($str);
print $line;
print "\n" if ( $line =~ /¥.$/ );
}

sub MakeASentence {
my $str = shift;
my @hash_array = @{ $str->{hash} };
my $data = $str->{data};
my $sentence_seed = $hash_array[ int rand($#hash_array) ];

# print $sentence_seed , "\n";

my @sentence = split /_/, $sentence_seed;
my $ret_sentence = undef;
for my $hinshi (@sentence) {
my $seed = rand();
my $ratesum = 0;
for my $a ( keys %{ $data->{$hinshi} } ) {
$ratesum += $data->{$hinshi}->{$a}->{rate};
if ( $ratesum > $seed ) {
$ret_sentence .= $a;
last;
}
}
}
return $ret_sentence;
}


目diffすると差が歴然。良い。

2007年06月24日

HHK Professional2

職場では入社以来ずっとHHK Lite2を使っていたのだが、今日たまたま行った後輩の家にProfessional刻印モデルが置いてあって、しばし触る->その場で無刻印モデルをネット購入。
かっこよすぎ
まあ間違いなく稼働率が5%は上がるよ。導入2週間は生産性が50%ぐらいになるかもしれないけど :D


弘法筆を選ばずとは言うが、今の僕のテーマは"いかに楽しく仕事をするか"なので、このような自己満足なガジェットの存在は中期的スループットの観点から言って非常に有効だと思う。頑張れ、オレ。負けるな。

2007年06月30日

フィボナッチ数列(Perlにおける&&とand)

今日の夕飯は彼女と地元で。テーブルに案内されるとテーブルクロスの代わりに紙がしいてあり、何故か置いてあったクレヨンを掴んだウェイトレスが「本日このテーブルを担当させて頂きます○○と申します」などと言って自分の名前をテーブルに書くのだ。これはなかなかインパクトが強くておお、と思った。
しかし紙とクレヨンがあると、人間何か描いてしまうものである。あんぱんまんやらオバQやらを二人で落書きするのに飽きると、そこはやっぱりコードを書く事に。彼女曰く「1..100のフィボナッチ数列をプリントするコードを書け」

続きを読む "フィボナッチ数列(Perlにおける&&とand)" »

Powered by
Movable Type 3.34