誕生日の曜日を知る方法
生まれた日は覚えていても、生まれた曜日は忘れてしまうものです。記念日だって曜日までは覚えていませんよね。そんな時、日付から曜日を計算するプログラムがあったら便利です。親しい彼氏・彼女の誕生曜日を覚えておくと、ちょっとした話のきっかけになるかも知れません。
年月日から曜日を算出する計算式は、rpn入門(初級編)のガウス記号にあります。
曜日を求めるweekdayプログラム
そこで、誕生日を指定するだけで、曜日を計算するrpnプログラムを紹介します。使い方は以下のように簡単です。DOSプロンプトを起動してからrpn式を入力してください。
0
"19690720"は日付です。8桁で表現します。頭の4桁が西暦年、次の2桁が月、最後の2桁が日です。この例では、1969年7月20日ですね。次のweekdayがobjファイルになっているrpnプログラムになります。
weekdayの計算結果は数値で出てきますが、以下のようにそれぞれの曜日に対応しています。
今回は0だったので日曜ですね。
対話型プログラムってなに
対話型プログラムと言われるものがあります。事前に全部の条件を設定してからプログラムを走らせるのではなく、必要になった時点で人間からの入力を待つプログラムです。人間とコンピュータが対話しているようなので、対話型プログラムといいます。
ちなみに、上記のrpnプログラムのweekdayは非対話型プログラムです。プログラムに渡す数値(年月日)を設定した後は、プログラムの終了まで一切人間の入力はありませんでしたよね。どちらのプログラムスタイルがいいのかは用途によるのですが、分かりやすさは対話型プログラムに軍配が上がります。
実はこのweekdayプログラムですが、指定された日付がなければ、日付の入力を促すプロンプトが出てくるようになっているのです。プロンプトで指示された年、月、日を入力すれば、最後に曜日が表示されるようになっています。例で示しましょう。
rpn [年月日] -c weekday <stdin
年=
先に空ファイルを渡してもらいます(空ファイルに関してはpackage入門(カレンダー・システム編)の空ファイルを参照ください)。すると、プロンプトとして"年"が表示されましたね。"="に続いて、1969とキーを打って最後にエンターキーを押してください。
rpn [年月日] -c weekday <stdin
年=1969
月=
次のプロンプトは"月"です。同様に7を入力します。
rpn [年月日] -c weekday <stdin
年=1969
月=7
日=
最後のプロンプトの"日"には20を入力です。
rpn [年月日] -c weekday <stdin
年=1969
月=7
日=20
日曜日
今度は"日曜日"と表示されましたね。計算結果が数字だと何だか分かりづらいし、変換表を覚える必要があったのですが、曜日で表示されれば便利ですね。ちなみに、この1969年7月20日は人類が初めて月に降り立った日です。
自分や恋人、身内の人の誕生曜日を計算してみてください。そして、節目となった人生の記念日が何曜日だったのか。思いを馳せてみるのもいいかもしれませんね。
対話型 vs 非対話型
対話型と非対話型のどちらのプログラム形式がよいのでしょうか。分かりやすさは対話型プログラムですが、非対話型プログラムを重宝するときもあります。決まり決まった入力パターンや大量のデータを計算するときには、人間の入力があると面倒なこともあるのです。
例えば、大量の日付(8桁)が格納されているファイルがあるとして、それらの曜日を計算したいとき一つ一つweekdayプログラムを起動させて、答えを出していては日が暮れてしまいます。
そんな時に非対話型形式に対応したプログラムであれば、以下のように一発で答えが求まります。
date.txtファイルに日付が1000件入っていても、一瞬でweekday.txtに曜日変換された数値コードが格納されるわけです。
AKB48初期メンバーの誕生曜日を求める
ファイルを使って一気に日付から曜日に変換する例として、2010年くらいにブレークし始めたアイドルグループAKB48の初期メンバーの誕生曜日を求めてみましょう。
akb48.txtファイルに誕生日が格納されているとします。格納順は名前の前の番号順です。
===============================================================
1 板野友美 1991年7月3日 6 折井あゆみ 1985年7月20日
2 宇佐美友紀 1984年12月6日 7 川崎希 1987年8月23日
3 浦野一美 1985年10月23日 8 小嶋陽菜 1988年4月19日
4 大江朝美 1989年6月15日 9 駒谷仁美 1988年12月16日
5 大島麻衣 1987年9月11日 10 佐藤由加理 1988年11月22日
11 高橋みなみ 1991年4月8日 16 星野みちる 1985年11月19日
12 戸島花 1988年7月11日 17 前田敦子 1991年7月10日
13 中西里菜 1988年6月26日 18 増山加弥乃 1994年2月10日
14 成田梨紗 1991年3月1日 19 峰岸みなみ 1992年11月15日
15 平嶋夏海 1992年5月28日 20 渡邊志穂 1987年10月25日
akb48.txtファイルの内容は8桁の西暦データです。
19910703
19841206
19851023
:
(中略)
:
19940210
19921115
19871025
一気に曜日に変換します。
3
4
3
:
(中略)
:
4
0
0
数値を曜日に変換するとAKB48初期メンバーの誕生曜日が分かります。表にまとめておきます。
================================================
1 板野友美 水曜日 6 折井あゆみ 土曜日
2 宇佐美友紀 木曜日 7 川崎希 日曜日
3 浦野一美 水曜日 8 小嶋陽菜 火曜日
4 大江朝美 木曜日 9 駒谷仁美 金曜日
5 大島麻衣 金曜日 10 佐藤由加理 火曜日
11 高橋みなみ 月曜日 16 星野みちる 火曜日
12 戸島花 月曜日 17 前田敦子 水曜日
13 中西里菜 日曜日 18 増山加弥乃 木曜日
14 成田梨紗 金曜日 19 峰岸みなみ 日曜日
15 平嶋夏海 木曜日 20 渡邊志穂 日曜日
週末に生まれている人は5人なので20%の確率。土日に生まれる理論値の28%より低めです。やはり、生まれる曜日には偏りがあるのでしょうか。
実践コーナーの統計アラカルトでは、週末に生まれる人は少ないという都市伝説を生まれる曜日は神様次第で検証しています。そこでは、非対話型weekdayをふんだんに使っています。
rpnプログラムを実行するには、rpn試用版かrpn標準版が必要です(バージョンの違いはこちら)。
weekday, nullはカレンダー・システムパッケージに同梱されています。詳しくはプロダクトを参照ください。