Translate

2008年6月30日月曜日

エラトステネスの篩

最近になってhttp://projecteuler.netの問題を少しずつ解き始めているのだけど
素因数絡みの問題が多いくて何度も書くのはめんどいのでモジュール化してみた。
(※のちのちメソッドをいろいろ追加する予定。)


package prime_factors;
use strict;
use warnings;

sub new{
my $package = shift;
my $ref = {};
bless $ref, $package;
}

sub prime_factor{
my $package = shift;
my ($number) = @_;
my $sqrt_num = int sqrt $number;
my @prime_number = (2, 3, 5);
my @prime_list;
foreach (@prime_number){
while($number % $_ == 0){
$number /= $_;
push @prime_list, $_;
}
}

my $flag = my $flag7 = my $flag11 = 1;
for(my $i=0; $flag; $i++){
while ($number % (6*$i+7) == 0){
$number /= 6 * $i + 7;
push @prime_list, 6*$i+7;
}
while ($number % (6*$i+11) == 0){
$number /= 6 * $i + 11;
push @prime_list, 6*$i+11;
}
$flag7 = 0 if($sqrt_num<=(6*$i+7) || $number == 1);
$flag11 = 0 if($sqrt_num<=(6*$i+11) || $number == 1);
$flag = 0 if(!$flag7 && !$flag11);
}
push @prime_list, $number if($number > 1);
return @prime_list;
}
1;


で、確認の為使ってみる。(タイムも計測)
use strict;
use warnings;
use prime_factors;
use Time::HiRes qw(gettimeofday tv_interval);
my %time;
$time{'start'} = [gettimeofday];

my $obj = prime_factors -> new;

my $number = 600851475143;
my @list = $obj -> prime_factor(600851475143);
print "$numberの素因数は、@list\n";

$time{'end'} = [gettimeofday];
printf "time:%.3f second\n", tv_interval $time{'start'}, $time{'end'};
__END__



結果。


※測定に使ったノートPC。
OS:Microsoft Windows XP Professional Version2002 SP2
CPU:Intel® Core™2 Duo 2GHz
メモリ:1GB RAM

PPMでImage-ExifToolを入れてみた。

ひとまず、自分のPCにImage-ExifToolを入れてみたのだけど…
レンタサーバの方には、入ってないようなんで
モジュール追加依頼をするか、手動で追加するしかないのねぇー。

Image-ExifToolとは…
Exifの情報を取得するモジュール。


じゃ、Exifってなんぞや?
Exifとは…

1994年に富士フィルムが提唱したデジタルカメラ用の画像ファイルの規格。
JEIDAによって標準化され、各社のデジタルカメラに採用されている。最新
版はExif 2.2(Exif Print)。TIFF形式で画像についての情報や撮影日時な
どの付加情報を記録できるほか、縮小画像(サムネイル)を記録することがで
きる。画像形式RGB無圧縮方式やJPEG方式など複数の形式をサポート
している。[引用元:e-word]


ことの発端は、デジカメの日付とかの情報を知るにはどうしたらよいのかなぁー
と思って調べたら行き着いたモジュールってわけなんですけどねぇ。
こんな感じで使うそうですよ。
Image-ExifTool:Perl で Exif 情報を取得

で、どんな情報を吐き出すのか気になったので、
ひとまずリンク先のコードを元に動かしてみた。
test.pl
┗ pic ━a.jpg
というファイル構成で何も考えずに以下を動かしてみる。
use strict;
use warnings;
use Image::ExifTool;

my $file = "./pic/a.jpg";
my $exifTool = new Image::ExifTool;
my $exifInfo = $exifTool->ImageInfo($file);

for(sort keys %$exifInfo){
print("$_ : $exifInfo->{$_}\n");


で得られた結果がこんな感じ。


後で、もう少しいじってみますか。
http://search.cpan.org/~exiftool/Image-ExifTool-7.30/lib/Image/ExifTool.pod

2008年6月29日日曜日

情報収集の仕方

ふと思った。
どうやったら、Perlな方々が書くblogに行き着けるのだろうかと。

で、結論。
perl-mongers.orgに投稿する人や
Shibuya Perl Mongersで発表するような
人達をチェックリストに入れておけばOKとか?

初心者な自分には、大部分がさっぱりですが
昔の記事に遡れば、誰しもが通ってたりする部分もあるので
情報を調べる候補地として最適だったりするわけでほげほげ。

単なるメモ。

世間では、Mooooooooooooooooooooooooooooooooooooooooooooooooose!
と騒いでいるので、何だろねってことでふらついてた時に見つけたぺーじ。
Perl初心者の自分にゃ、まだまだ理解する日が通そうだけど
ひとまず。メモってことで…汗
http://www.slideshare.net/hakobe/moose

PPMについて調べてみる。

Perl Package Manager
ActivePerlに付属しているもので、CPANからモジュールをインストールするのに使うもの。

PPMが設定されているリポジトリに行き、モジュールを探して、コンパイル済みの
バイナリを取得して保存します。この時関連するモジュールも無ければダウンロード
してくれます。

リポジトリ・・・容器、貯蔵庫、倉庫、集積所などの意味を持つ英単語。何らかのデータや情報、プログラムなどが体系だてて保管されている場所。アプリケーションやシステムの設定情報がまとめて記録されているファイルやフォルダのことや、複数の開発者が参加するプログラミング環境においてソースコードや仕様に関する情報をまとめて保管してくれるシステムなどを指すことが多い。[引用元:e-Words]

リポジトリのURLは、Perlのバージョンによって違うことに注意。

こちらの説明がすばらしくわかりやすかったです!
Perlメモ/モジュールのインストール(PPM)

2008年6月28日土曜日

test

てすと投稿。