月月火水木金金があるのなら日日日日日日日があってもいいんじゃない?


そう思わない?

昔々日本では月月火水木金金という休みを返上して働くといういわゆるブラック企業的な悪習がありました。
もしその時に消されてしまった日曜日(土曜は知らん)が全部戻ってくるとしたら…私たちは何連休になるでしょうか?

そもそも月月火水木金金って何?

もとは大日本帝国海軍で用いられたのが始まりで日露戦争勝利後も、「勝って兜の緒を締めよ」とばかりに休日返上で猛訓練を行っていました。1908年(明治41年)に津留雄三(当時海軍大尉、のち海軍大佐)が、「これでは、まるで月月火水木金金じゃないか」とふと同僚に漏らした言葉が、やがて海軍中に広まったものとされています。また戦時中には、勤務礼賛の意味で国民の間で広く使われたようです。これを元にした軍歌もあるようです。

(Wikipedia参照)

早速調べてみるか

(閏年を考えないver)

ってことでn年月月火水木金金をやっていたら日日日日日日日がm回来るかを調べてみましょう。

sample.c
#include<stdio.h>
int main(){
    int year;
    scanf("%d",&year);
    int sunday=year*365/7;
    printf("日日日日日日日が%d回あります",sunday/7);
    return 0;
}

では実行してみましょう。

$ gcc -o ./a sample.c
$ ./a

1
>>日日日日日日日が7回あります
7
>>日日日日日日日が52回あります
15
>>日日日日日日日が111回あります

一年間のうち一週間(七日間)がいくつかあるかを調べれば無くなった日曜日の数を知ることが出来ます。その日曜日を七個づつ集めてその塊を数えれば日日日日日日日の数を知ることが出来ます。

(閏年を考えるver)

今度は閏年も考えてやってみましょう。閏年というのは四年に一回来る2/29があるめんどくさい年です。

sample.c
#include<stdio.h>
int main(){
    int year,start,a[2]={0,0},i=0;
    scanf("%d%d",&year,&start);

    while(i<year){
        if((start+i)%4==0){
            a[1]++;
        }
        else{
            a[0]++;
        }
        i++;
    }
    double sunday=(double)a[0]*365/7+(double)a[1]*366/7;
    printf("日日日日日日日が%dあります",(int)sunday/7);
    return 0;
}

閏年とそうでない年に分けてそれぞれの都市の日数で計算しています。
さて、結果を表示してみましょう。

$gcc -o ./a sample.c
$./a

1 2011
>>日日日日日日日が7回あります
1 2012
>>日日日日日日日が7回あります
7 2011
>>日日日日日日日が52回あります
7 2012
>>日日日日日日日が52回あります
15 2012
>>日日日日日日日が111回あります
15 2013
>>日日日日日日日が111回あります

閏年を考慮した場合でも短い期間ではほとんど違いはないことが分かりました。(ちなみに小数点以下はちょっと違う値になります。)

まとめ

今回は月月火水木金金を何年やると日日日日日日日が何回来るかを調べました。
実際に調べてみると思ったほど多くはなくてちょっとがっくりしました…
いつから始めたかをもうちょっと詳しくしてみたり、閏秒を入れてみたりしてみてもいいですね。