こんにちは、阿部といいます。

Take_tk <ggb03124 / nifty.ne.jp> wrote:
>> で次のような文字列配列を返すスクリプトを考えているのですが、いろいろな方
>> 法がありそうで、なかなかエレガントな方法に思いつきません。

 エレガントではないと思いますけれども、自分の HP に載せている日記を自
動生成させるコードを使って書いてみます。
 ちょっと、引数の渡し方が違っていますけれども…。

def create_calendar ( year, month )
  nextmonth = Time.at(
    Time.local(year, month).tv_sec + 31*24*3600 )
  daycount  = Time.at(
    Time.local(nextmonth.year, nextmonth.mon).tv_sec - 1 ).mday
  
  emptystr = "    "
  lines    = [ sprintf("%12d 年 %d 月", year, month),
               "  日  月  火  水  木  金  土" ]
  line     = nil
  w = Time.local( year, month, 1 ).wday
  for d in 1..daycount do
    line ||= Array.new( 7, emptystr )
    line[w] = sprintf( "  %2d", d )
    if w == 6 then
      lines << line.join
      line = nil
    end
    w = (w+1) % 7
  end
  lines << line.join if w > 0
  
  return lines.join("\n")
end

 最初の daycount を求める辺りが汚いです。
 標準でこれらのデータを求めるメソッドがあれば便利なんですけど。(^^;

--------
Black / 阿部 茂