2013年2月10日日曜日

824年に一度

ご無沙汰しております。ツイッター等で既にご存知かもしれませんが、出張からは無事帰ってきました。体調的にはかなり悪くて楽しめたとはいえない出張でしたけどね・・・。出張で土日つぶしてるのに代休とかも取れないとか労 (ry

そんなわけで(?)あまり遊ぶ時間もなく書くネタもなかったのですが、少しだけ。今日ツイッターでこんなツイートが回ってきました。(以下の内容のため一応元は伏せます。)
今月は土曜日、日曜日、月曜日が5日ずつある、824年に一度しかない風水で言う金袋という椿事で・・・(以下略)
ほほう、そんなめでたい月なのですか、と1秒ぐらい思いましたが、今月って2月ですよね。週の連続した3つの曜日が5日ずつあるためには、少なくとも31日ある月じゃないと成り立たない。 しかも土、日、月であるためには当然1日は土曜日である必要がある。今月は1日は金曜日だし、2月なので31日なわけもなく、どちらも満たしてないでしょうよ。

と思って基本スルーなのですが、そもそも感覚的に「1日が土曜日で始まる31日まである月」が824年に一度なわけないのでは?と思いますよね。長い期間で計測したとして、ざっと1日が土曜になる確率は1/7として、そのうち31日である月は1,3,5,7,8,10,12月で7月あるので7/12です。掛け合わせると7/84になり、月のうち実に8.3%の確率で起きます。年単位に直すならば12を掛けて100%、つまりほぼ毎年起きます!?(実際には1/7のとことかがぶれるので起きない年もあるはずです。)

なのでベタに今年から100年前まで数えてみました。もちろん手・・・ではなくコンピューターでw
import java.util.Calendar;


public class CalendarTest {
 public static void main(String[] args) {
  Calendar cal = Calendar.getInstance();
  cal.set(Calendar.MONTH, Calendar.DECEMBER);
  cal.set(Calendar.DATE, 1);
  final int end = cal.get(Calendar.YEAR)-100;
  int count = 0, satisfied = 0;
  int year;
  while ((year = cal.get(Calendar.YEAR)) > end) {
   count++;
   do {
    if (cal.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY &&
      cal.getActualMaximum(Calendar.DAY_OF_MONTH) == 31) {
     satisfied++;
     cal.set(Calendar.MONTH, Calendar.JANUARY);
    }
    cal.add(Calendar.MONTH, -1);
   } while (year == cal.get(Calendar.YEAR));
  } 
  System.out.println(satisfied + " years satisfied in " + count + " years");
 }
}
答えは
86 years satisfied in 100 years
という感じでした。つまりそんな月が起きない年は100年中14年、むしろない年のほうがはるかに珍しいですね、といいつつ14%じゃそれほど珍しくもないw

しかし何をどうすると824年なる数字が出てくるんですかね。むしろその数字の原因を探したかったんですが、特にそんなヒントは得られず。適当に選ばれたのかな。

0 件のコメント:

コメントを投稿