アルゴリズム事典から「曜日」の項目をrubyで書き直してみた、
この本ではZellerの公式を用いて曜日を計算する方法が紹介されている。 Zellerの公式は以下の式を解くことで、曜日を数値として求めることができる。(y: 年、m:月、d:日)
このとき、1, 2月は前年の13, 14月と読み替える必要がある。また、グレゴリオ暦かユリウス暦かによって公式が変化する(上記はグレゴリオ暦用)ので、詳しくはWikipediaなどを参照されると良い。
本文中ではC言語で実装されているが、これをrubyで書き直してみた。
#! /usr/bin/env ruby name = %w(Sunday Monday Tuesday Wednesday Thursday Friday Saturday) print "Year ? "; year = gets.chomp.to_i print "Month? "; month = gets.chomp.to_i print "Day ? "; day = gets.chomp.to_i if month < 3 year -= 1 month += 12 end dayofweek = (year + year / 4 - year / 100 + year / 400 + (13 * month + 8) / 5 + day) % 7 puts "It's #{name[dayofweek]}"
特に難しいことはなく、年月日を標準入力として渡すようにし、公式から結果を計算する。
曜日への翻訳は、0 -> Sunday, 1 -> Monday, ...
となっている配列を使い書き換えている。
参考
リンク
[改訂新版]C言語による標準アルゴリズム事典 (Software Technology)
posted with amazlet at 18.05.30