本当はこれ、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
にしても関数型言語ってなんか夢を感じます。なんとなく。
ってのを今回の結論とさせていただき、今回は終わりたいと思います。なんだそれ。
わたくし、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
にしても関数型言語ってなんか夢を感じます。なんとなく。
ってのを今回の結論とさせていただき、今回は終わりたいと思います。なんだそれ。
- 次の記事: W-ZERO3[es] USB祭
- 前の記事: 手軽な連絡網システム
コメント:0
トラックバック:0
- トラックバック用URL
- http://peta.okechan.net/blog/archives/19/trackback
- リンク元
- 生まれてから何日経ったか ← 日曜研究室 [技術的な日常:あなたの幸せはここにある]