スキップしてメイン コンテンツに移動

生まれた日から今日まで、何日生きているのかを求める

生まれた日から今日まで、何日生きているのかを求める

 概要

  これは、生まれた日から今日まで、何日生きているのかを計算する 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
vim
小さいコードを書こうと思ったら Perl 結構楽でよし。

このブログの人気の投稿

記述試験の書き方(仮)

記述試験の書き方(仮) 1,まえがき   法学部の試験では記述式の試験が出てくる。   その試験では、あるテーマについて自由に論ぜよとされている。 しかし、論ぜよと言われても、どのように論じればいいのか、すなわち、記述の仕方について教わったことがない(よくよく考えると、法的文章力を習得させる事だけが目的の授業はないと思われる)。   本稿では、私自身が法学畜になり、見聞きし、実際に活用している論述方法についてまとめている、はずである。その要点は、①条文、判例、学説を使う。②単なる事実と法的事実を区別する。③文章内に一貫性を持たせる。である。 法律と、プログラミング

本サイトの今後について

告知 本サイトは今後更新されることは、おそらくありません。 過去記事等はこのまま放置するつもりです。内容の陳腐化並びにその正確性等については保証はできません。自己責任で活用いただければと思います。 This site won't update in future. And Thank's everyone. new site -> sysrigar

node.js で SQLite3 を使用するコードを書くときの予備録

node.js で SQLite3 を使用するコードを書くとき、予備録 まず、非同期処理。 C言語や Perl のように上から下に処理が続くと決して思ってはいけない。 SQLite3 の each は SQL 文実行完了時に呼び出す関数を指定できる SQLite をインストールします、 npm install sqlite3 [test.js] var sqlite3 = require('sqlite3').verbose(); var db = new sqlite3.Database(':memory:'); db.serialize(function() { db.run("CREATE TABLE lorem (info TEXT)"); var stmt = db.prepare("INSERT INTO lorem VALUES (?)"); for (var i = 0; i < 10; i++) { stmt.run("Ipsum " + i); } stmt.finalize(); var listInfo = new Array(); db.each("SELECT rowid AS id, info FROM lorem", function(err, row) { var tmp = new Object(); tmp.id = row.id; tmp.info = row.info; console.log("[ROW]\t" + row.id + ": " + row.info); listInfo.push(tmp); }, function() { // Each 完了時に呼び出される for (var i = 0; i < listInfo.length; i++) { console.log("[BUF]\t" + listInfo[i].id + ": " + listInfo[i].info); } console.lo