週休2日、週休3日で1ヶ月(4週間)の間に連休がある確率【メモ】
今回は週休2日、週休3日で1ヶ月(4週間)の間に連休がある確率をPythonコードで求めてみた結果についてご紹介いたします。
備忘録の意味合いが強いので、参考になる方は限られているかもしれません。
週休2日、週休3日で1ヶ月(4週間)の間に連休がある確率【メモ】
まず、週休3日の場合を考えてみます。
週休3日は1週間(7日間)の中で3日を選びますから、1週間単位で考えると全部で7C3通りあります。
そのうち、連休がない(休日が隣り合わない)パターンは次の10通りです。
日 | 月 | 火 | 水 | 木 | 金 | 土 | |
---|---|---|---|---|---|---|---|
パターン1 | 休 | 休 | 休 | ||||
パターン2 | 休 | 休 | 休 | ||||
パターン3 | 休 | 休 | 休 | ||||
パターン4 | 休 | 休 | 休 | ||||
パターン5 | 休 | 休 | 休 | ||||
パターン6 | 休 | 休 | 休 | ||||
パターン7 | 休 | 休 | 休 | ||||
パターン8 | 休 | 休 | 休 | ||||
パターン9 | 休 | 休 | 休 | ||||
パターン10 | 休 | 休 | 休 |
このうち、連休を考えるとパターン1,2,4,7が来た時は次に来るパターンとしてはパターン1~10のすべて、パターン3,5,6,8,9,10が来た時は次に来るパターンとしてはパターン7,8,9,10があります。(例えば、パターン3が来た後にまたパターン3が来てしまうと、パターン3では最後の土曜日が休日ですから、パターン3の最初の休日である日曜日と合わさって連休になってしまいます)
これについて、1週間をひとかたまりのブロックと考えて、4つブロックが組み合わさった時(4週間分)を計算したとき、考えられるパターンの組み合わせの数は、次のPythonのソースコードを使うと2332通りとなり、分母は7C3通り(=35)の4乗ですから、計算すると0.15540191586838817%となります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
>>> patterns = { ... 1: [1,2,3,4,5,6,7,8,9,10], ... 2: [1,2,3,4,5,6,7,8,9,10], ... 3: [7,8,9,10], ... 4: [1,2,3,4,5,6,7,8,9,10], ... 5: [7,8,9,10], ... 6: [7,8,9,10], ... 7: [1,2,3,4,5,6,7,8,9,10], ... 8: [7,8,9,10], ... 9: [7,8,9,10], ... 10: [7,8,9,10] ... } >>> ct = 0 >>> for week2 in patterns.values(): ... for w2 in week2: # 2週間を考える ... week3 = patterns[w2] ... for w3 in week3: # 3週間を考える ... week4 = patterns[w3] ... for w4 in week4: # 4週間を考える ... ct += 1 ... >>> print(ct) # 分子の数 2332 >>> print(ct / (35 * 35 * 35 * 35) * 100, '%') # (全パターンの4乗分が分母) 0.15540191586838817 % |
同様に、週休2の場合も同じ考え方をすると、1週間(7日間)を考えたときに全部で7C2通りあり、連休がない(休日が隣り合わない)パターンは次の15通りとなります。
日 | 月 | 火 | 水 | 木 | 金 | 土 | |
---|---|---|---|---|---|---|---|
パターン1 | 休 | 休 | |||||
パターン2 | 休 | 休 | |||||
パターン3 | 休 | 休 | |||||
パターン4 | 休 | 休 | |||||
パターン5 | 休 | 休 | |||||
パターン6 | 休 | 休 | |||||
パターン7 | 休 | 休 | |||||
パターン8 | 休 | 休 | |||||
パターン9 | 休 | 休 | |||||
パターン10 | 休 | 休 | |||||
パターン11 | 休 | 休 | |||||
パターン12 | 休 | 休 | |||||
パターン13 | 休 | 休 | |||||
パターン14 | 休 | 休 | |||||
パターン15 | 休 | 休 |
週休3日と同様の考え方とすると、パターン1,2,3,4,6,7,8,10,11,13が来たときは次に来るパターンとしてパターン1,2,3,4,5,6,7,8,9,10,11,12,13,14,15があり、パターン5,9,12,14,15が来たときは次に来るパターンとしてパターン6,7,8,9,10,11,12,13,14,15があります。
これについても同様に1週間をひとかたまりのブロックと考えて、4つブロックが組み合わさった時(4週間分)を計算したとき、考えられるパターンの組み合わせの数は、次のPythonのソースコードを使うと35100通りとなり、分母は7C2通り(=21)の4乗ですから、計算すると18.048035540746913%となります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
>>> patterns = { ... 1: [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15], ... 2: [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15], ... 3: [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15], ... 4: [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15], ... 5: [6,7,8,9,10,11,12,13,14,15], ... 6: [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15], ... 7: [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15], ... 8: [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15], ... 9: [6,7,8,9,10,11,12,13,14,15], ... 10: [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15], ... 11: [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15], ... 12: [6,7,8,9,10,11,12,13,14,15], ... 13: [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15], ... 14: [6,7,8,9,10,11,12,13,14,15], ... 15: [6,7,8,9,10,11,12,13,14,15] ... } >>> ct = 0 >>> for week2 in patterns.values(): ... for w2 in week2: # 2週間を考える ... week3 = patterns[w2] ... for w3 in week3: # 3週間を考える ... week4 = patterns[w3] ... for w4 in week4: # 4週間を考える ... ct += 1 ... >>> print(ct) # 分子の数 35100 >>> print(ct / (21 * 21 * 21 * 21) * 100, '%') # (全パターンの4乗分が分母) 18.048035540746913 % |
終わりに
今回は週休2日、週休3日で1ヶ月(4週間)の間に連休がある確率をPythonコードで求めてみた結果についてご紹介いたしました。
ディスカッション
コメント一覧
まだ、コメントがありません