トップページ > 技術 | 日記 > 生まれてから何日経ったか

生まれてから何日経ったか

本当はこれ、20日に書かなきゃいけなかったことなんですが、

わたくし、8月20日に誕生日を迎えまして、26歳になってしまいました。

26歳なんておっさんじゃないですか。
会社の人はみんな10歳以上年上なので、まだ若者のつもりでいたのですが、
今、新卒が入ってきたら4歳も年上じゃないですか。
おっさんですよ紛れもなく。
そして肝臓からはγ-GTP垂れ流し。

でまぁ、誕生日だと言っても、友達一人からちょっとしたプレゼントもらったり(感謝!)
好きな人に耳元で「お誕生日おめでとう」と囁かれた以外は、
休日出勤で普通に仕事でした。

ええ、実は今回は実験とか研究とかと言えるものは何もしてないのです。
仕事も忙しいし。
って割には会社のおっさん3人でエアガンを使った射的大会を事務所内でやってましたが。

しかし、ネタは作るもの。
生まれてから26歳の誕生日まで何日経ったか計算してみます。

ただ、普通に手計算してもマンドイだけなので、プログラム組んで計算してみます。

使用言語はなんと・・・Concurrent Clean!!!

関数型言語ですよ。
http://sky.zero.ad.jp/~zaa54437/programming/clean/
ここを参考にしながら(パクリながら)作ってみました。
いきなり以下ソースです。

module testproj

import StdEnv, StdDebug

//***** 生まれて何日経ったか *****
Start =dateDiff 1980 8 20 2006 8 20

//閏年か否か
isLeap year = (year rem 4 == 0) && ((not (year rem 100 == 0)) || (year rem 400 == 0))

//年の日数を返す
daysOfYear year
|isLeap year = 366
|otherwise = 365

//月の日数を返す
daysOfMonth year month
|month == 1 = 31
|(month == 2) && (isLeap year) = 29
|(month == 2) && (not (isLeap year)) = 28
|month == 3 = 31
|month == 4 = 30
|month == 5 = 31
|month == 6 = 30
|month == 7 = 31
|month == 8 = 31
|month == 9 = 30
|month == 10 = 31
|month == 11 = 30
|month == 12 = 31

//0年1年1日からの経過日数を返す
dateSerial year month day
= sum (map (\x->daysOfYear (trace (toString x +++ “\t”) x)) [0..year - 1])
+ sum (map (\x->daysOfMonth year x) [1..month - 1])
+ day

//2つの日付の差を日数で返す
dateDiff sYear sMonth sDate dYear dMonth dDate
= (dateSerial dYear dMonth dDate) - (dateSerial sYear sMonth sDate)

以上ソース終わり。

デバッグ用のコードが紛れ込んでるのでこのままでは実行結果が汚いですが、
一応、26歳の誕生日で9496日経ったと結果が出ました。
合ってるかどうかは分かりませんが、たぶんそのくらいでしょうw
9496を365で割ったら26.~ってなったのでたぶんあってると思いますw

にしても関数型言語ってなんか夢を感じます。なんとなく。
ってのを今回の結論とさせていただき、今回は終わりたいと思います。なんだそれ。

コメント:0

コメント記入欄
入力した情報をブラウザに記憶させる

Spam protection by WP Captcha-Free

トラックバック:0

トラックバック用URL
http://peta.okechan.net/blog/archives/19/trackback
リンク元
生まれてから何日経ったか日曜研究室 [技術的な日常:あなたの幸せはここにある]

トップページ > 技術 | 日記 > 生まれてから何日経ったか

検索
フィード
メタ

ページの最初に戻る