--Apple-Mail-1-149917106
Content-Transfer-Encoding: quoted-printable
Content-Type: text/plain;
	charsetF-8;
	formatðïwed

Just for fun, a little over-engineered maybe...


-- 

Mike Stok <mike / stok.ca>
http://www.stok.ca/~mike/

The "`Stok' disclaimers" apply.





--Apple-Mail-1-149917106
Content-Type: multipart/mixed;
	boundary ¨Âìå­Íáéì­²­±´¹¹±·±°

--Apple-Mail-2-149917106
Content-Transfer-Encoding: 7bit
Content-Type: text/html;
	charset-ASCII

<HTML><BODY styleord-wrap: break-word; -khtml-nbsp-mode: space; -khtml-line-break: after-white-space; ">Just for fun, a little over-engineered maybe...<DIV><BR classhtml-block-placeholder"></DIV><DIV><SPAN></SPAN></DIV></BODY></HTML>
--Apple-Mail-2-149917106
Content-Transfer-Encoding: 7bit
Content-Type: text/x-ruby-script;
	x-unix-mode44;
	nameÓÚrange.rb
Content-Disposition: attachment;
	filename¥ìyrange.rb

class DayRange
  
  # Class for translating between day names and numbers
  class DayTranslator
    require 'abbrev'
    VALID_DAY_NUMBERS   .. 7
    
    def initialize(day_names{ Monday Tuesday Wednesday Thursday Friday Saturday Sunday })
      day_names.size 7 or raise ArgumentError, "must have a 7 element array"
      # are there 7 different names?
      @day_names  ay_names
      @name_map  bbrev::abbrev(day_names)
      @number_map  }
      day_names.each_with_index do |name, i|
        @number_map[name]   + 1
      end
    end
    
    # Convert a string (day name or abbreviation) or a number to a day number and
    # return it.
    #
    # If we get invalid input then raise an ArgumentError
    def make_number(number_or_string)
      number  ase number_or_string
        when String
          @number_map[@name_map[number_or_string]]
        when Numeric
          number_or_string.to_i
        else 
          raise ArgumentError
        end
      valid_day_number?(number) or raise ArgumentError
      number  
    end
    
    # Turn a day number into a string whose length may be specified
    def make_string(number, length0
      valid_day_number?(number) or raise ArgumentError
      name  day_names[number - 1]
      name[0 ... [name.length, length].min]
    end
        
    def valid_day_number?(num)
      VALID_DAY_NUMBERS.include?(num)
    end
  end
  
  MIN_RANGE_SIZE    # Ranges smaller than this are output as individual items
  
  def initialize(*day_list)
    @translator  ayRange::DayTranslator.new
    @day_ranges  ake_ranges(day_list.collect { |day| @translator.make_number(day) })
  end
  
  # 
  def to_s
    @day_ranges.collect { |range|
      if range.size < MIN_RANGE_SIZE
        range.collect { |day_num| @translator.make_string(day_num) }
      else 
        "#{@translator.make_string(range.first)}-#{@translator.make_string(range.last)}"
      end
    }.flatten.join(', ')
  end
  
  # Turn a list of day numbers into a list of "ranges."
  # 
  # Each range is stored as an array because it's easier to add elements to an
  # array, and we are only dealing with 7 days at most here.
  def make_ranges(day_list)
    day_list.sort.inject([]) { |ranges, day_num|
      if ranges.empty? or day_num ! anges.last.last.succ
        ranges << [day_num]
      else
        ranges.last << day_num
      end
      ranges
    }
  end
end
--Apple-Mail-2-149917106
Content-Transfer-Encoding: 7bit
Content-Type: text/html;
	charset-ASCII

<HTML><BODY styleord-wrap: break-word; -khtml-nbsp-mode: space; -khtml-line-break: after-white-space; "><DIV><SPAN></SPAN><SPAN></SPAN></DIV></BODY></HTML>
--Apple-Mail-2-149917106
Content-Transfer-Encoding: 7bit
Content-Type: application/octet-stream;
	x-unix-mode55;
	name¥å
¥Æ¥å¥È¥³ ¥µ
	¥å

¡×¡£¥Ã¥Ã¥Ã 

 ¥¡¥Ã¥¡
 ¥¡¥¡

 ¥ä¥Æ¡¬¥à¥ä ¥· ¥ä¥³¥³¥æ¥³¥³¥ä¥Æ
  ¡× ¥ä         
   ¡¬
    ¡¬¥£¥¡¥Ø¥å¥â¥¡¥ã ¥È¥á¥ç¥£¥¢¥ã¥¤¥ã¥¦¥ã¥¨¥ã¥ª¥ã¥«¥ã¥­¥¥¥ç¡¬¥¥
    ¡¬¥£¥¡¥Ø¥å¥é¥ã ¥â¥ã ¥â¥¡¥ã ¥È¥á¥ç¥£¥¢¥ã¥¤¥ã¥¦¥ã¥«¥ã¥­¥¥¥ç¡¬¥¥
    ¡¬¥£¥¡¥Ø¥ã ¥é¥å¥â¥¡¥ã ¥È¥á¥ç¥£¥¢¥ã¥¦¥ã¥¨¥ã¥ª¥ã¥«¥¥¥ç¡¬¥¥
    ¡¬¥£¥¡¥ä¥å¥ä¥ã ¥â¥ã ¥â¥¡¥ã ¥È¥á¥ç¥£¥¤¥ã¥¦¥ã¥¨¥ã¥«¥ã¥­¥¥¥ç¡¬¥¥
    ¡¬¥£¥¡¥Ø¥ã ¥é¥ã ¥ä¥ã ¥â¥ã ¥â¥¡¥ã ¥È¥á¥ç¥£¥¢¥ã¥¦¥ã¥¨¥ã¥«¥ã¥­¥¥¥ç¡¬¥¥
    ¡¬¥£¥¡¥â¥¡¥ã ¥È¥á¥ç¥£¥­¥¥¥ç¡¬¥¥
    ¡¬¥£¥¡¥Ø¥ã ¥â¥¡¥ã ¥È¥á¥ç¥£¥¢¥ã¥­¥¥¥ç¡¬¥¥
    ¡¬¥£¥Á¥Ê¥¥  ¥È¥á¥ç¥£¥¢¥ã¥¯¥¥ 
  
  
   ¡¬¡¬
      ¥á¥³¥³¥È¥ä¥ç
    ¡¬¥£¥¢¥ã ¥ç¡¬¥£¥¡¥Ø¥¡¥¥¥¥
    ¡¬¥£¥¢¥ã ¥ç¡¬¥£¥¡¥Ø¥¡¥¥¥¥
    ¡¬¥£¥¡¥Ø¥¡¥ã ¥ç¡¬¥£¥¢¥¥¥¥
    ¡¬¥£¥¡¥Ø¥¡¥ã ¥ç¡¬¥£¥¢¥ã ¥¢¥¥¥¥
  

¥å¥å¥Á¥å¥Ø¥å¥¤¥å¥¢¥¨¥±¥±¥¢¥­¥¢¡¼¥«
¥Æ¥å¥ä¥å¥Ê¥³ ¥å
¥Æ¥å¥ä¥³ ¥Ã¥µ
	¥Þ¥å¥¯¥¯¥ª¥±¥å¥¢

¥·¥Í¥ä¥Ø¥Õ¥»¥·¥Ä¥Þ¥È¥ë ¥¹¡Ö¥å¥³ ¥å¥µ ¥å¥å¥å¥³ ¥µ ¥å¥å¥å¥³ ¥å¥å¥µ ¡Ö¥»¥·¥È¥Î¥è¥»¥·¥â¥ß¥Á¥Û¥»¥·¥Ã¥â¥ß¥Á¥Û¥»¥·¥Ä¥á¥»¥·¥È¥Î¥è¥» ¥·¥â¥ß¥Á¥Û ¥¹¡Ö¥Á¥å¥å¡Ö ¥¹¡Ö¥å¥³ ¥µ ¥å¥³ ¡¼ ¡¼¥µ ¥³ ¥£¡¼¥ã ¡¼¥ã ¡¼¥¥¥µ ¥å¥³ ¥Í¥µ ¥å¥³ ¥¢¥¤¥µ ¥å¥³ ¥µ ¥å¥³ ¥µ ¥å¥³ ¥µ ¥å¥³ ¥µ ¥å¥³ ¥µ ¥å¥³ ¥µ ¥å¥å¥å¥å¥å¥³ ¥µ ¥å¥³ ¡¼¥µ ¥å¥å¥å¥å¥³ ¥µ ¥å¥³ ¥µ ¥³ ¥¤¥µ ¥å¥³ ¥µ ¥³ ¥¤¥µ ¥å¥³ ¡¼¥µ ¡Ö¥»¥·¥È¥Î¥è ¥¹¡Ö¥å¥³ ¡¼¥µ ¥å¥³ ¡¼¥µ ¥å¥³ ¡¼¥µ ¥å¥³ ¡¼¥µ ¡Ö¥»¥å¥å¥Ã¥È¥Î¥è¥»¥·¥È¥Î¥è ¥¹¡Ö¥å¥³ ¡¼¥µ ¥å¥³ ¡¼¥µ ¥å¥³ ¡¼¥µ ¥å¥³ ¡¼¥µ ¡Ö¥»¥·¥Ä¥á ¥¹¡Ö¥å¥å¡Ö¥»¥·¥Ã¥È¥Î¥è¥»¥·¥È¥Î¥è ¥¹¡Ö¥å¥³ ¡¼¥µ ¥å¥³ ¡¼¥µ ¥å¥³ ¡¼¥µ ¥å¥³ ¡¼¥µ ¡Ö¥»¥Ø ¥â ¥ò¥µ¥·¥Á ¥¹¡Ö¥³¥¿¥ç¡Ö¥»¥¿¥ç¥·¥Ã¥Á¥»¥ò¥µ¥·¥Ã¥È¥Î¥è¥»¥·¥È¥Î¥è ¥¹¡Ö¥å¥³ ¡¼¥µ ¥å¥³ ¡¼¥µ ¥å¥³ ¡¼¥µ ¥å¥³ ¡¼¥µ ¡Ö¥»¥·¥Á ¥¹¡Ö¥³¥Ã¥Ã¥ç¥ç¥Ã¥Ã¡Ö¥»¥³¥Ã¥Ã¥ç¥ç¥Ã¥Ã¥·¥Ã¥Á¥»¥·¥Ã¥È¥Î¥è¥»¥·¥È¥Î¥è¥¹¡Ö¥å¥³ ¡¼¥µ ¥å¥³ ¡¼¥µ ¥å¥³ ¡¼¥µ ¥å¥³ ¡¼¥µ ¡Ö¥»¥·¥Ä¥á ¥¹¡Ö¥å¥å¡Ö¥»¥·¥Ã¥È¥Î¥è¥»¥·¥È¥Î¥è ¥¹¡Ö¥å¥³ ¡¼¥µ ¥å¥³ ¡¼¥µ ¥å¥³ ¡¼¥µ ¥å¥³ ¡¼¥µ ¡Ö¥»¥ä ¡Ö¥â¥¡ ¡Ö ¥ç¥·¥Ã¥È¥Î¥è¥»¥·¥È¥Î¥è¥»¥·¥Ä¥á ¥¹¡Ö¥å¥å¡Ö¥»¥·¥Ã¥È¥Î¥è¥»¥·¥È¥Î¥è¥»¥·¥Ä¥á ¥¹¡Ö¥å¥å¡Ö¥»¥·¥Ã¥È¥Î¥è¥»¥·¥Ä¥á ¥¹¡Ö¥Á¥å¥å¡Ö¥»¥·¥Ã¥â¥ß¥Á¥Û¥» ¥·¥Ã¥È¥Î¥è¥»¥·¥Ä¥á¥»¥·¥Ã¥È¥Î¥è¥»¥·¥Ã¥Ä¥Þ¥È¥ë¥»¥·¥Ã¥Í¥ä¥Ø¥Õ¥»¥å¥Á¥å¥Ø¥å¥¤¥å¥¢¥¨¥±¥±¥¢¥­¥¢¡¼¥«¥å¥å

¥å¥å¥Á¥å¥Ø¥å¥¢¥å¥¢¥¨¥±¥±¥¢¥­¥¢¡¼¥«¥å¥å