このページについて
このページは、paiza ラーニング内に開設されているコンテンツ「レベルアップ問題集」で取り扱われているプログラミング課題について、独自の見解を述べたものです。
見解については、paizaラーニングの規約に基づき、許可されている範囲でのみ公開していますが、その内容については paiza とは一切関係なく、また paiza の立場を反映したものではありませんのでご注意ください。
挑戦する課題
レベルアップ問題集の日付セットから「最長の連休2019 (paizaランク D 相当)」を取り上げます。
以下は、問題公開 Web ページからの引用です。
問題
西暦2019年の最長となる連休の日数を求めてください。
日本の現実のカレンダーに即して計算してください。
連休とは、連続する休業日のことです。
休業日とは、土曜日、日曜日、または、内閣府の定める国民の祝日・休日のことです。
ただし、上記の条件を満たさない日は、休業日ではありません。例えば、官公庁や一般企業が休みとなる1月2日, 1月3日, 12月31日は休業日ではないものとします。
参考: 内閣府 「国民の祝日」について
上記リンクからは、直接「2019年の国民の祝日」に関するデータは取得できませんので、下記のデータを利用してください。
- 1月
- 1日 元旦
- 14日 成人の日
- 2月
- 11日 建国記念の日
- 3月
- 21日 春分の日
- 4月
- 29日 昭和の日
- 30日 休日
- 5月
- 1日 休日(祝日扱い)
- 2日 休日
- 3日 憲法記念日
- 4日 みどりの日
- 5日 こどもの日
- 6日 休日
- 7月
- 15日 海の日
- 8月
- 11日 山の日
- 12日 休日
- 9月
- 16日 敬老の日
- 23日 秋分の日
- 10月
- 14日 体育の日(スポーツの日)
- 22日 休日(祝日扱い)
- 11月
- 3日 文化の日
- 4日 休日
- 23日 勤労感謝の日
入力される値
なし
期待する出力
以下のような形式で、答えを出力してください。
1 |
d |
- dは答えの日数です。
考え方
ツェラーの公式を使って、365日の曜日を計算し、そこから連続する休日を数えればよいのですが、実はそのような複雑な計算をする必要は一切ありません。
先の参考資料をよく読むと、次のような説明が記載されています。
- 国民の祝日に関する法律第3条第2項に規定する休日(例)
いわゆる「振替休日」と呼ばれる休日です。
「国民の祝日」が日曜日に当たるとき、その日の後の最も近い平日を休日とするものです。
5月 | |
---|---|
日 | 月 |
5 | 6 |
こどもの日 | 休日 |
上記の表から、「5月5日は日曜日である」ということがわかります。
すると、4月末からの連休に曜日を当てはめていくと
- 4月
- 29日 (月)昭和の日
- 30日 (火)休日
- 5月
- 1日 (水)休日(祝日扱い)
- 2日 (木)休日
- 3日 (金)憲法記念日
- 4日 (土)みどりの日
- 5日 (日)こどもの日
- 6日 (月)休日
ということがわかります。しかも、4月に着目すれば、昭和の日の前は
- 4月
- 27日 (土)土曜日
- 28日 (日)日曜日
- 29日 (月)昭和の日
- 30日 (火)休日
とさらに2日休日が存在することになります。
この結果から、4月27日から5月6日までの間には「10日間の休日」が存在することが、計算するまでもなく求まるわけです。
解答例
いままで一番短い解答例でしょう。計算すらおこなっていません。
これが、複雑にみえるものの、「Dランク」である問題たる由縁かもしれません。
1 |
print("10") |