【雑記】モジュロ計算プログラム作ってみた【サマーウォーズ】

スポンサーリンク
sw 雑記
スポンサーリンク

はじめに

昨日のサマーウォーズの再放送を見て、やってみよ〜と思ったので、モジュロ計算による曜日当てをプログラムで再現してみました。

アルゴリズムはwikipediaを参照しました。

簡単に言えばmod使って計算すると上手く曜日を出せるよってことらしいです。

ソースコード

#include <iostream>

int main(){
	
	//初期化
	int year = 0, month = 0, day = 0;
	
	//入力方法表示
	std::cout << "Year Month Day" << std::endl;
	
	//標準入力からデータ取得
	std::cin >> year >> month >> day;
	
	if(year < 0){
		
		year++;
	}
	
	if(month == 1 || month == 2){
		
		month += 12;
		year--;
	}
	
	//公式に利用する数値の格納
	const int C = year/100;
	const int Y = year%100;
	
	//暦で変わる変数
	int T = 0;
	
	if(year > 1582){
		
		T = -2*C + C/4;
	}else{
		
		T = -C + 5;
	}
	
	//曜日を格納する変数
	int h = (day + 26*(month+1)/10 + Y + Y/4 + T)%7;
	
	//表示
	switch(h){
		case 0:
			std::cout << "土曜日" << std::endl;
			break;
		case 1:
			std::cout << "日曜日" << std::endl;
			break;
		case 2:
			std::cout << "月曜日" << std::endl;
			break;
		case 3:
			std::cout << "火曜日" << std::endl;
			break;
		case 4:
			std::cout << "水曜日" << std::endl;
			break;
		case 5:
			std::cout << "木曜日" << std::endl;
			break;
		case 6:
			std::cout << "金曜日" << std::endl;
			break;
		default:
			break;
	}
	
	return 0;
}

実行してみた

昨日は2019年7月19日で金曜ロードショウで再放送されていたので、金曜日で合ってますし、今年の私の誕生日は日曜日だったので確かです。

./modulo 
Year Month Day
2019 7 19
金曜日
./modulo 
Year Month Day
2019 1 13
日曜日

最後に

公式通りに作ったら簡単すぎました。

暗算できるレベルではないですけどね〜。

コメント

タイトルとURLをコピーしました