生まれた日から今日まで、何日生きているのかを求める
概要
これは、生まれた日から今日まで、何日生きているのかを計算する Perl のサンプルコードです。一応、現代的な Perl 記述方法に沿ったコーディングとなっています。C++ のコーディングスタイルからすると小文字が多いですな・・・なんか C言語チックです。一応 Python で書こうかとも思ったのだけれど、やはりあえて Perl で 書くという誘惑にはかなわなかった。残念。当初公開したバージョンはバグがありました。すみません。このバージョンは大丈夫です。
コード
#! /usr/local/bin/perl #--------------------------------------- # Calc Lived Days. # 自分が生まれた日から現在まで何日生きているのかを求める。 # 2014 / 12 / 21 # jskny / risdy.net #--------------------------------------- use strict; use warnings; # うるう年判定, 第一引数 判定する年、うるう年ならば 1 を返す sub is_uruu { my ($p_y) = @_; if ($p_y % 400 == 0) { return (1); } elsif ($p_y % 100 == 0) { return (0); } elsif ($p_y % 4 == 0) { return (1); } return (0); } sub main { # 生まれた日 my $b_y = 2014; my $b_m = 4; my $b_d = 1; # 今日 my $n_y = 2014; my $n_m = 12; my $n_d = 21; my $countDay = 0; my @last_day = (31,28,31,30,31,30,31,31,30,31,30,31); # for の条件判定は 0 から開始で 1 から開始ではないので引く $b_m -= 1; $n_m -= 1; # 手順 # 1.まず今日までの日数をすべて足す。この際うるう年であるならば、366 を足す # 1.2 そして、誕生した年の生まれる前までの日数をすべて引く # 1.3 その後、現在のまだ経過していない日数を引く。 for (my $i = $b_y; $i <= $n_y; $i++) { $countDay += 365 + is_uruu($i); } # 1.2 for (my $i = 0; $i < $b_m; $i++) { # うるう年の 2 月 29日を処理する。 if (is_uruu($b_y) == 1 && $i == 1) { $countDay -= 29; } else { $countDay -= $last_day[$i]; } } $countDay -= $b_d; # 1.3 for (my $i = 12 - 1; $i >= $n_m; $i--) { if (is_uruu($n_y) == 1 && $i == 1) { $countDay -= 29; } else { $countDay -= $last_day[$i]; } } $countDay += $n_d; print $countDay . " days\n"; return (0); } main(); exit (0);
コンソール
264 days
感想
vim |