2017 年もよろしくお願いします。 m(__)m

さて、2017年1月1日は日曜日でした。ということは2017年1月はいきなり「13日の金曜日」を迎えることになります。

13日の金曜日は「不吉の象徴」のように言われていますが、ではこの「13日の金曜日」はどのくらい珍しいのでしょうか? 2017年の(コードの)書き初めの意味でプログラミングで調べてみることにしました。

調べる内容は「13日は何曜日になることが多いのか?」を調べて、その中で金曜日が平均とくらべてどの程度珍しいのか/珍しくないのかを調べてみることにします。

この計算をするには、うるう年を意識する必要があります。くわしくはウィキペディアあたりを調べていただきたいのですが、うるう年は400年周期で計算する必要があります。簡単に説明すると、こんなルールです:
 (1) 4 年に一度(西暦で 4 で割り切れる年)がうるう年である
 (2) ただし 100 でも割り切れる年は例外としてうるう年ではない
 (3) ただし 400 でも割り切れる年は例外の例外としてうるう年である

というわけで、今回は西暦 2000 年 1 月から、西暦 2399 年 12 月まで、一ヶ月毎に各 13 日が何曜日になっているのかを調べることにします。そして各曜日ごとに何回ずつ発生していたのかを最終的に出力します。こういうことはプログラミングが手っ取り早いですよね。今回は PHP を使うことにしました。以下の内容を f13.php という名前で保存します:
<?php

//. タイムゾーンを設定
date_default_timezone_set('Asia/Tokyo');

//. 配列を初期化
$w = array(7);
for( $i = 0; $i < 7; $i ++ ){
  $w[$i] = 0;
}

//. 2000年1月から2399年12月までの13日が何曜日か調べる
for( $y = 2000; $y < 2400; $y ++ ){
  for( $m = 1; $m <= 12; $m ++ ){
    $t = mktime( 0, 0, 0, $m, 13, $y );
    $n = date( 'w', $t );
    $w[$n] ++;
  }
}

//. 結果を出力
for( $i = 0; $i < 7; $i ++ ){
  echo( "w[$i] = $w[$i]\n" );
}
?>

最後に結果を出力しますが、配列の 0 番目が日曜日、 1 番目が月曜日、2 番目が火曜日、・・・という出力結果になります。つまり金曜日は 5 番目です。

また 400 年間(400 x 12 = 4800 ヶ月間)で7つの結果に振り分けられるので、仮に平坦化されているとすると、4800 / 7 = 685.71... なので、各曜日ごとに 685 回から 686 回現れることになります。

さて、実行結果はというと・・・
# php -f f13.php
w[0] = 687
w[1] = 685
w[2] = 685
w[3] = 687
w[4] = 684
w[5] = 688
w[6] = 684

400 年間の中で 688 回の 13 日の金曜日が見つかったことになります。金曜日は平均以上どころか最頻出曜日だったことがわかりました。


というわけで、「『13 日の金曜日』は滅多にない不吉な日」ではなく、「13 日といえば金曜日」といえるほど、最も頻出のパターンだったことになります。