>>36 Ruby

>>63
> sw = (Time.new( y, m, 1 ) - s % 7).wday
は間違いでした

require 'date'
str = '2021 7 0'
y, m, s = str.scan( /\d+/ ).map( &:to_i )
m1 = Date.new( y, m, 1 )
sw = m1.wday - s % 7
pmd = m1.prev_day.mday
a = '日月火水木金土'.chars.rotate(s)
( pmd - ((sw == 0)? 7 : sw) + 1 ).upto( pmd ){|d| a << d.to_s }
1.upto( m1.next_month.prev_day.mday ){|d| a << '%2d' % d }
(-a.size % 7).times{|d| a << '%2d' % (d+1) }
a.each_slice(7){|w| puts w * ' ' }