A Perfect Night For Bananafish

だがそれを語るには人生は短すぎる

824年に一度

824年の一度のチャンス!? ←デマです - Togetter

土曜日、日曜日、月曜日が5回ある824年に一回しかない金袋という年で...

そういえば最近
5のつく水曜日を数える - A Perfect Night For Bananafish
で似たような計算してたし、センパイのBlogみたら何やら検証してた
No hack, No chance: 824年に一度
ので真似してみた。タイトルも考えるの面倒なのでパクった。
要は1日が土曜日で31日ある月がいわゆる「金袋」に相当する。

moneybag.rb

#!/bin/ruby
require 'date'
# 指定年の金袋の月を数える
def count_moneybag(year)
satisfied=0
(1..12).each { |month|
  day=Date::new(year,month,1)
  # wday = 6 : 土曜日
  # (day >> 1)-1 で来月1日の前日。つまり今月の日数がわかる。
  if day.wday==6 && ((day >> 1)-1).day==31 then
    satisfied+=1
  end
}
return satisfied
end

to = (Time.now).year
from = to-400+1
moneybag_years=0
moneybag_months=0
(from..to).each { |year|
  if((c=count_moneybag(year))>0)
    moneybag_years+=1
    moneybag_months+=c
  end
}
$\="\n"

print "from ",from," to ",to
print "years: ",moneybag_years
print "months: ",moneybag_months
print "month avg: ",(100.0*moneybag_months)/((to-from)*12),"%"

実行結果

$ ruby moneybag.rb
from 1614 to 2013
years: 343
months: 399
month avg: 8.33333333333333%

グレオリオ歴は400年で一周するというので1614~2013の400年間で計算。
400年のうち343年が金袋に該当。月にして399月が該当。期間と該当月数がだいたい一致するのだね。
全体の月数の8.3%が金袋ということになる。

31日の月(1月,3月,5月,7月,8月,10月,12月)である確率7/12
土曜日である確率1/7
をかけて7/84=0.08333... という計算と実際の値の計算はぴったり合った。
よかったですね!(別によくない)


めったになくて珍しいからありがたいというのであれば今年2013年は、2002年以来実に10年ぶりに、土日月が5日間ある月がない年なのでありがたいのかもしれないね。