#!/usr/bin/ruby require 'date' # >>545-546 のを改悪 require 'enumerator' class Date def to_a (Date.new(self.year,self.month,1)..Date.new(self.year,self.month,-1)).to_a end def calender(wide = true) width = wide ? 3 : 2 cal = "#{MONTHNAMES[self.month]} #{self.year if wide}".center((width+1)*7) << "\n" cal << ABBR_DAYNAMES.map{|n| n[0..width-1]}.join(' ') << "\n" cal << ' ' * (width+1) * Date.new(self.year, self.month, 1).wday self.to_a.each do |d| cal << d.day.to_s.rjust(width) << ' ' << (d.wday == 6 ? "\n" : "") end; cal end def calender_yearly cals = (1..12).map do |month| a = Date.new(self.year, month, 1).calender(false).split(/\n/) a[7] ||= ''; a end ret = "#{self.year.to_s.center(63)}\n\n" cals.each_slice(3) do |a| ret << a.transpose.map{|b|b.map{|c|c.ljust(22)}.to_s}.join("\n") << "\n" end; ret end end case ARGV.size when 0; puts Date.today.calender when 1; puts Date.new(ARGV[0].to_i, 1, 1).calender_yearly when 2; puts Date.new(ARGV[1].to_i, ARGV[0].to_i, 1).calender end