生まれた日から今日まで、何日生きているのかを求める
概要
これは、生まれた日から今日まで、何日生きているのかを計算する 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 |
