{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 今年の「13日の金曜日」は何回ある？\n",
    "\n",
    "<div style=\"text-align:center;font-style:oblique;font-weight:bold;\" > --- あるいは、僕が「13日の金曜日」について知っている2、3のこと ---</div>\n",
    "<br/>\n",
    "\n",
    "## また「13日の金曜日」がやってくる。\n",
    "\n",
    "2015年のある日、次の打ち合わせの確認でカレンダーを眺めると、その日が「13日の金曜日」になることに気がついた。 \n",
    "なんだかついこの間の打ち合わせも「13日の金曜日」だったようが気がする。 \n",
    "なぜだろうと気になったので、ちょっと調べてみようとPythonのNotebookを開いてみた。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## pythonプログラムをつかって「13日」の金曜日は他の曜日に比べて多いのか少ないのか？を調べてみる。\n",
    "\n",
    "手始めに、”「13日の金曜日」が他の曜日に比べ多いとか、少ないとかいうことがあるのか？” を確かめてみることから初めてみよう。\n",
    "\n",
    "まずは、いつものおまじないと、日付データを取り扱うための`datetime`モジュールをインポートしておこう。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "#!python\n",
    "#-*- coding:utf-8 -*-\n",
    "# python2/python3の互換性のために\n",
    "from __future__ import print_function\n",
    "# 日付データを取り扱うためのモジュールをインポートしておく。\n",
    "import datetime"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "準備が出来たところでm2021年から2121年までの100年間にある毎月の13の曜日の頻度を数え上げてみればいいだろう。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "曜日 回数\n",
      "月 171\n",
      "火 172\n",
      "水 172\n",
      "木 170\n",
      "金 171\n",
      "土 172\n",
      "日 172\n"
     ]
    }
   ],
   "source": [
    "#　月曜から日曜の曜日の名前を定義しておきます。\n",
    "wdname_e=(\"mon\",\"tue\",\"wed\",\"thu\",\"fri\",\"sat\",\"sun\")\n",
    "# 日本語での名前\n",
    "wdname_j=(u\"月\",u\"火\",u\"水\",u\"木\", u\"金\", u\"土\", u\"日\")\n",
    "wdname=wdname_j\n",
    "\n",
    "wdcount={} #曜日毎の回数を覚えておくための辞書型データを用意する。\n",
    "\n",
    "ny=100 #100年分を調べてみます。\n",
    "for y in range(2021,2021+ny): #range(2021,2022)->(2021,2022,...,2120)\n",
    "    for m in range(1,13,1): #range(1,13,1) -> (1,2,...,12)\n",
    "        d=datetime.datetime(y,m,13) # y年m月13日の日付データを作成。\n",
    "        wd=d.weekday() # その日の曜日を取り出す。\n",
    "        wdcount[wd] = wdcount.get(wd,0) + 1 #wdcountのkeyがwdのデータに1を加える。\n",
    "\n",
    "print(\"曜日\",\"回数\" )\n",
    "for k in range(7): # 曜日毎の登場回数を印刷する。\n",
    "    print (wdname[k], wdcount[k])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "これらは単純な平均値 $ 171.4= 100\\times\\frac{12}{7}$ に一致している。\n",
    "当たり前だけど、特に13日は金曜日が多いとか、その逆というわけではない。こ\n",
    "の分布を曜日毎の回数を示すバーグラフにすれば、わかりやすいだろうか。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## グラフを書いてみる。\n",
    "\n",
    "グラフを描くためのモジュールはいくつかあるが、これもいつものように`matplotlib`を使うことにする。\n",
    "`matplotlib`のサブモジュール`pyplot`は簡単なグラフの作成にはピッタリだ。\n",
    "細部にまで凝るなら`matplotlib`のオブジェクトを使いこなすことになる。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.pyplot as pyplot  #matplotli.pyplot を pyplotという名前で使うことにする。\n",
    "pyplot.bar(wdcount.keys(), wdcount.values(),align=\"center\") #バーグラフを使ってグラフ化する。\n",
    "# pyplot.bar(*zip(*wdcount.items()),align=\"center\") #こういう書き方もある。\n",
    "pyplot.xticks(range(7), wdname_j, font=\"IPAexGothic\") # x軸のラベルを曜日にしておこう。\n",
    "pyplot.draw()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 毎年の「13日の金曜日」の回数を数えてみよう。\n",
    "\n",
    "このように、毎年の「13日の金曜日」は毎年 12/7=1.7回 あるわけだが、1回の年もあれば、2回の年もあるだろう。\n",
    "もう一度Python スクリプト をつかって、毎年の「13日の金曜日」の回数を数えて確かめなければならない。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "3 occurense  16 times\n",
      "1 occurense  43 times\n",
      "2 occurense  41 times\n"
     ]
    }
   ],
   "source": [
    "F13inY={} #年毎の「13日の金曜日」の回数を記録する辞書型データ`F13inY`を用意する。\n",
    "def count_F13inY(year):\n",
    "    count=0 # カウンタ countを0クリアする。\n",
    "    for m in range(1,13,1): # 毎月の\n",
    "        d=datetime.datetime(year,m,13) #13日が\n",
    "        wd=d.weekday() # 曜日が\n",
    "        if wd == 4:# 金曜日(4)だったら\n",
    "            count +=1 # カウンタを1増やす。\n",
    "    return count\n",
    "\n",
    "for y in range(2015,2115):\n",
    "    count=count_F13inY(y)\n",
    "    F13inY[count] = F13inY.get(count,0)+1 # 一年あたりの「13日の金曜日」の回数がcountとなる年数を1増やす\n",
    "\n",
    "for k, v in F13inY.items(): # 一年あたりの「13日の金曜日」の回数がkのなる年数を印刷する。\n",
    "    print (k,\"occurense \", v,\"times\")   "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "プログロラムの結果では、2015-2114の100年間で、「13日の金曜日」が1日しか無い年が43回、2日ある年が42回、 そしてなんと「年に3日の「13日の金曜日」を持つ」当たり年が16回ある。 まあ、この平均は確かに、"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "1.72"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "(43+2*42+3*15)/100. "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "となり、 平均すれば均等な確率による結果通りになってはいるんだけれど。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 年に3回の「13日の金曜日」がある年を探して。\n",
    "\n",
    "それではとこの100年のうち「13日の金曜日」が3回有るのはどの年かを調べてみたくなる。\n",
    "次のプログラムを使うと、2015-1214年の100年間には、\n",
    "\n",
    " 2015, 2026, 2037, 2040, 2043, 2054, 2065, 2068, 2071, 2082, 2093, 2096, 2099, 2105, 2108, そして 2111\n",
    "\n",
    "の16回であることがわかる。\n",
    "\n",
    "確かに今年(2015)は3回の「13日の金曜日」がある年で、「またか」と思ったのもそのためだろう。\n",
    "\n",
    "このプログラムをつかえば、次に「年に3回の『13日の金曜日』」がある次の年がわかってしまう。\n",
    "それはなんと2026年だとプログラムは教えてくれる。 当分は「えっ、また『13日の金曜日』」と感じる様な年は巡ってこないわけだ。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "year 2015 has  3 day(s) of \"Friday 13th\"\n",
      "year 2026 has  3 day(s) of \"Friday 13th\"\n",
      "year 2037 has  3 day(s) of \"Friday 13th\"\n",
      "year 2040 has  3 day(s) of \"Friday 13th\"\n",
      "year 2043 has  3 day(s) of \"Friday 13th\"\n",
      "year 2054 has  3 day(s) of \"Friday 13th\"\n",
      "year 2065 has  3 day(s) of \"Friday 13th\"\n",
      "year 2068 has  3 day(s) of \"Friday 13th\"\n",
      "year 2071 has  3 day(s) of \"Friday 13th\"\n",
      "year 2082 has  3 day(s) of \"Friday 13th\"\n",
      "year 2093 has  3 day(s) of \"Friday 13th\"\n",
      "year 2096 has  3 day(s) of \"Friday 13th\"\n",
      "year 2099 has  3 day(s) of \"Friday 13th\"\n",
      "year 2105 has  3 day(s) of \"Friday 13th\"\n",
      "year 2108 has  3 day(s) of \"Friday 13th\"\n",
      "year 2111 has  3 day(s) of \"Friday 13th\"\n",
      "16 [2015, 2026, 2037, 2040, 2043, 2054, 2065, 2068, 2071, 2082, 2093, 2096, 2099, 2105, 2108, 2111]\n"
     ]
    }
   ],
   "source": [
    "years=[]\n",
    "for y in range(2015,2115):\n",
    "    count=count_F13inY(y)\n",
    "    if count >=3:\n",
    "        print (\"year\",y, \"has \",count, \"day(s) of \\\"Friday 13th\\\"\")\n",
    "        years.append(y)\n",
    "print(len(years), years)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "プログラムを短くするためにこんな書き方もできるらしい。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "year 2015 has  more than 3 days of \"Friday 13th\"\n",
      "year 2026 has  more than 3 days of \"Friday 13th\"\n",
      "year 2037 has  more than 3 days of \"Friday 13th\"\n",
      "year 2040 has  more than 3 days of \"Friday 13th\"\n",
      "year 2043 has  more than 3 days of \"Friday 13th\"\n",
      "year 2054 has  more than 3 days of \"Friday 13th\"\n",
      "year 2065 has  more than 3 days of \"Friday 13th\"\n",
      "year 2068 has  more than 3 days of \"Friday 13th\"\n",
      "year 2071 has  more than 3 days of \"Friday 13th\"\n",
      "year 2082 has  more than 3 days of \"Friday 13th\"\n",
      "year 2093 has  more than 3 days of \"Friday 13th\"\n",
      "year 2096 has  more than 3 days of \"Friday 13th\"\n",
      "year 2099 has  more than 3 days of \"Friday 13th\"\n",
      "year 2105 has  more than 3 days of \"Friday 13th\"\n",
      "year 2108 has  more than 3 days of \"Friday 13th\"\n",
      "year 2111 has  more than 3 days of \"Friday 13th\"\n",
      "\n",
      "16 [2015, 2026, 2037, 2040, 2043, 2054, 2065, 2068, 2071, 2082, 2093, 2096, 2099, 2105, 2108, 2111]\n"
     ]
    }
   ],
   "source": [
    "years=[y for y in range(2015,2115) if count_F13inY(y)>=3 ] # 3回(以上)の 「13日の金曜日」がある年のリスト\n",
    "for y in years:\n",
    "    print (\"year\",y, \"has \",\"more than 3 days of \\\"Friday 13th\\\"\")\n",
    "print()\n",
    "print(len(years), years)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "この結果をよくみると、2015-2065までは、「13日の金曜日が年に3回ある年」は大体11年あるいは13年の間をおいて現ている。\n",
    "しかし(2065,2068,2071) および(2093,2096, 2099) は三年おきの間隔で\"「13日の金曜日が年に3回ある年\"が繰り返している。\n",
    "\n",
    "これは過去の繰り返しも調べてみる必要があるだろう。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "year 1925 has  3 day(s) of \"Friday 13th\"\n",
      "year 1928 has  3 day(s) of \"Friday 13th\"\n",
      "year 1931 has  3 day(s) of \"Friday 13th\"\n",
      "year 1942 has  3 day(s) of \"Friday 13th\"\n",
      "year 1953 has  3 day(s) of \"Friday 13th\"\n",
      "year 1956 has  3 day(s) of \"Friday 13th\"\n",
      "year 1959 has  3 day(s) of \"Friday 13th\"\n",
      "year 1970 has  3 day(s) of \"Friday 13th\"\n",
      "year 1981 has  3 day(s) of \"Friday 13th\"\n",
      "year 1984 has  3 day(s) of \"Friday 13th\"\n",
      "year 1987 has  3 day(s) of \"Friday 13th\"\n",
      "year 1998 has  3 day(s) of \"Friday 13th\"\n",
      "year 2009 has  3 day(s) of \"Friday 13th\"\n",
      "year 2012 has  3 day(s) of \"Friday 13th\"\n",
      "year 2015 has  3 day(s) of \"Friday 13th\"\n",
      "15 [1925, 1928, 1931, 1942, 1953, 1956, 1959, 1970, 1981, 1984, 1987, 1998, 2009, 2012, 2015]\n"
     ]
    }
   ],
   "source": [
    "years=[]\n",
    "for y in range(1915,2016):\n",
    "    count=count_F13inY(y)\n",
    "    if count >=3:\n",
    "        print (\"year\",y, \"has \",count, \"day(s) of \\\"Friday 13th\\\"\")\n",
    "        years.append(y)\n",
    "print(len(years), years)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "1915-2015の間では、(1925, 1928, 1931), (1953, 1956, 1959)および(2009,2012,2015)も「三年おきの間隔で「13日の金曜日が年に3回ある年が繰り返す」時期に当たっていることが判明する。 その意味でも2015年はちょっとだけ特別な年であったわけだ。\n",
    "\n",
    "次の「三年おきの間隔で「13日の金曜日が年に3回ある年が繰り返す」期間は2037年ー2043年ということになる。\n",
    "その頃にはまた、”最近13日の金曜日が多いな”と思ったりするのだろうか。\n",
    "\n",
    "（終)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## おまけ\n",
    "\n",
    "### 『1年間にある13日の金曜日の日数』の分布。\n",
    "\n",
    "グレゴリオ歴は400年でちょうど、1460972日、20870週となるので、分布のパターンは400年の周期を持つ。 もし、この日数がちょうど7で割り切れるここで考えているような曜日の繰り返しは2800年の周期をもっていただろう。\n",
    "\n",
    "この400年の周期の間に『1年間にある13日の金曜日の日数』の分布をグラフにしてみよう。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "2 occurense  170 times\n",
      "1 occurense  171 times\n",
      "3 occurense  59 times\n"
     ]
    },
    {
     "data": {
      "image/png": "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AGCUEAUAAGCUEAUAAGCUEAUAAGCUEAUAAGCUEAUAAGCUEAUAAGCUEAUAAGCUEAUAAGCUEAUAAGCUEAUAAGCUEAUAAGCUEAUAAGCUEAUAAGCUEAUAAGCUEAUAAGCUEAUAAGCUEAUAAGCUEAUAAGCUEAUAAGCUEAUAAGCUEAUAAGCUEAUAAGCUEAUAAGCUEAUAAGCUEAUAAGCUEAUAAGCUEAUAAGCUEAUAAGCUEAUAAGCUEAUAAGCUEAUAAGCUEAUAAGCUEAUAAGCUEAUAAGCUEAUAAGCUEAUAAGCUEAUAAGCUEAUAAGCUEAUAAGCUEAUAAGCUEAUAAGCUEAUAAGDUriFaVTdW1QNV9Zkdrn9OVT1UVXcuH69f/TQBAAA4Ki7ew5h3JXlrknefZczvdfeLVzIjAAAAjrRdnxHt7o8n+dLAXAAAALgArOo9os+qqk9W1e9U1VNXdJsAAAAcQXt5ae5u7kjypO7+elW9MMlvJblyu4FVdSrJqSQ5fvz4Cr41AAAAh815PyPa3V/t7q8vl29JcklVXbrD2Bu6+2R3nzx27Nj5fmsAAAAOofMO0ar60aqq5fIzltv84vneLgAAAEfTri/NrapfS/KcJJdW1b1J3pDkkiTp7nckuTbJz1fVw0n+Msl13d37NmMAAAAOtV1DtLtfssv1b83G/94FAAAAdrWqs+YCAADAnghRAAAARglRAAAARglRAAAARglRAAAARglRAAAARglRAAAARglRAAAARglRAAAARglRAAAARglRAAAARglRAAAARglRAAAARglRAAAARglRAAAARglRAAAARglRAAAARglRAAAARglRAAAARglRAAAARglRAAAARglRAAAARglRAAAARglRAAAARglRAAAARglRAAAARglRAAAARglRAAAARglRAAAARglRAAAARglRAAAARglRAAAARglRAAAARglRAAAARglRAAAARglRAAAARglRAAAARglRAAAARglRAAAARglRAAAARglRAAAARglRAAAARglRAAAARglRAAAARglRAAAARglRAAAARglRAAAARglRAAAARglRAAAARglRAAAARglRAAAARglRAAAARglRAAAARglRAAAARglRAAAARglRAAAARglRAAAARglRAAAARglRAAAARglRAAAARglRAAAARglRAAAARglRAAAARglRAAAARglRAAAARglRAAAARglRAAAARglRAAAARglRAAAARu0aolV1Y1U9UFWf2eH6qqq3VNXpqvpUVT199dMEAADgqNjLM6LvSnL1Wa5/QZIrl49TSd5+/tMCAADgqNo1RLv740m+dJYh1yR5d2/4gySPr6onrmqCAAAAHC0Xr+A2Lkvy+U3b9y777t86sKpOZeNZ0xw/fnwF33rWies/lM+98UWP2N5p3Nm2z3f8uYzbbs6fe+OLvmf/buP3Mu5c5rqq+/hobvd87uO5/uz2YtX38VzGr+rxcbbx+zX3Vd7uqo+FVf5M9jpuVT/r/ToWthu325z2OufzHX+2n8Wq7uNReZyc2edx8t19+3Ufz9zu+cz5XMc/2ts93/t4rsfOXhyFf1t3c1COhVX+7bXT103/PTr198uZsav82+swGT1ZUXff0N0nu/vksWPHJr81AAAAB8QqQvS+JFds2r582QcAAADfYxUhenOSly1nz31mkoe6+3telgsAAADJHt4jWlW/luQ5SS6tqnuTvCHJJUnS3e9IckuSFyY5neQbSX52vyYLAADA4bdriHb3S3a5vpO8cmUzAgAA4EgbPVkRAAAACFEAAABGCVEAAABGCVEAAABGCVEAAABGCVEAAABGCVEAAABGCVEAAABGCVEAAABGCVEAAABGCVEAAABGCVEAAABGCVEAAABGCVEAAABGCVEAAABGCVEAAABGCVEAAABGCVEAAABGCVEAAABGCVEAAABGCVEAAABGCVEAAABGCVEAAABGCVEAAABGCVEAAABGCVEAAABGCVEAAABGCVEAAABGCVEAAABGCVEAAABGCVEAAABGCVEAAABGCVEAAABGCVEAAABGCVEAAABGCVEAAABGCVEAAABGCVEAAABGCVEAAABGCVEAAABGCVEAAABGCVEAAABGCVEAAABGCVEAAABGCVEAAABGCVEAAABGCVEAAABGCVEAAABGCVEAAABGCVEAAABGCVEAAABGCVEAAABGCVEAAABGCVEAAABGCVEAAABGCVEAAABGCVEAAABGCVEAAABGCVEAAABGCVEAAABGCVEAAABGCVEAAABGCVEAAABGCVEAAABGCVEAAABGCVEAAABGCVEAAABGCVEAAABGCVEAAABG7SlEq+rqqvpsVZ2uquu3uf5nqurBqrpz+fi51U8VAACAo+Di3QZU1UVJ3pbk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\n",
      "text/plain": [
       "<Figure size 1152x648 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "## %%timeit # 実行時間測定のためのおまじない(cell magic)\n",
    "ymax=401\n",
    "# 478 ms ± 7.68 ms per loop (mean ± std. dev. of 7 runs, 1 loop each) on Intel Mac with ymax=9999\n",
    "# 220 ms ± 8.01 ms per loop (mean ± std. dev. of 7 runs, 1 loop each) on M1 Mac with arc -x86_64 and ymax=9999\n",
    "F13inY={}\n",
    "\n",
    "for y in range(1,ymax):\n",
    "    count=count_F13inY(y)\n",
    "    F13inY[count] = F13inY.get(count,0)+1\n",
    "    \n",
    "for k in F13inY:\n",
    "    print (k, \"occurense \", F13inY[k], \"times\") \n",
    "\n",
    "years=range(1,ymax)\n",
    "pyplot.figure(figsize=(16,9))\n",
    "pyplot.bar(years,[count_F13inY(y) for y in years])\n",
    "pyplot.draw()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "グレゴリオ歴では、4年に一回ある閏年が、100年に一回なくなってしまう。\n",
    "この効果を見るために、100年毎に区切って分布をプロットしてみよう、"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "tags": []
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 1440x360 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "ny=100\n",
    "years=range(1,1+ny)\n",
    "pyplot.figure(figsize=(20,5))\n",
    "for n in range(1,401,100):\n",
    "    pyplot.bar(years,[count_F13inY(y) for y in range(n,n+ny)])\n",
    "pyplot.draw()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "100年"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 同じ曜日を持つ月\n",
    "毎月の日数は、閏年の2月を除いては、いつも同じ。従って、1月のある日付の曜日と他の月の同じ日付の曜日は一定の関係がある。\n",
    "閏年ではない、ある年の毎月の13日の曜日を調べて見る。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[(1, '水'), (2, '土'), (3, '土'), (4, '火'), (5, '木'), (6, '日'), (7, '火'), (8, '金'), (9, '月'), (10, '水'), (11, '土'), (12, '月')]\n"
     ]
    }
   ],
   "source": [
    "y=2021;print([(i,wdname_j[datetime.date(y,i,13).weekday()]) for i in range(1,13)])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "このように、閏年でない年は  （1月、10月）, （2月, 3月, 11月）、 (4月、7月）、 (9月,12月） がそれぞれ同じ曜日になる。\n",
    "\n",
    "2月がちょうど四週間＝28日なので、2月と3月は1-28日の曜日が繰り返すのはよくわかる。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "pyplot.hist([datetime.date(y,i,13).weekday() for i in range(1,13)],bins=range(0,8));"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "では閏年にはどうなるだろうか？　2月が29日あるので、3月の曜日は2月の同じ日付から一つズレるはずだ。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[(1, '月'), (2, '木'), (3, '金'), (4, '月'), (5, '水'), (6, '土'), (7, '月'), (8, '木'), (9, '日'), (10, '火'), (11, '金'), (12, '日')]\n"
     ]
    }
   ],
   "source": [
    "y=2020;print([(i,wdname_j[datetime.date(y,i,13).weekday()]) for i in range(1,13)])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "というわけで、閏年には、(1月、4月,7月）, (2月、8月）, (3月、11月), (9月、12月) がそれぞれ同じ曜日となるこわけだ。\n",
    "\n",
    "ついでに、どの年でも 3月と11月、4月と7月、9月と12月はそれぞれ,31日を除けば、同じ日付の日は同じ曜日となる。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {
    "tags": []
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "pyplot.hist([datetime.date(y,i,13).weekday() for i in range(1,13)],bins=range(0,8));"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "最後に月の31日の曜日の関係をみてみると。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "閏年の年には、"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[(1, '金'), (3, '火'), (5, '日'), (7, '金'), (8, '月'), (10, '土'), (12, '木')]\n"
     ]
    }
   ],
   "source": [
    "y=2020;print([(i,wdname_j[datetime.date(y,i,31).weekday()]) for i in (1,3,5,7,8,10,12)])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "閏年でない年には、"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[(1, '日'), (3, '水'), (5, '月'), (7, '土'), (8, '火'), (10, '日'), (12, '金')]\n"
     ]
    }
   ],
   "source": [
    "y=2021;print([(i,wdname_j[datetime.date(y,i,31).weekday()]) for i in (1,3,5,7,8,10,12)])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "となるので、31日は、『閏年には、一月と七月、それ以外の年には一月と十月が同じ曜日となる。』ことがわかる。"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.9.4"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
