>>36 Ruby
お題の仕様を拡張してみた
前後の月の日付も週単位で表示
・前月日付は週はじめから最小1日から最大7日
・翌月日付は週末まで最小0日から最大6日

require 'date'
str = '2021 7 0'
y, m ,s = str.scan( /\d+/ ).map( &:to_i )
a = '日月火水木金土'.chars.rotate(s)
sw = (Time.new( y, m, 1 ) - s % 7).wday
( (sw == 0)? 7 : sw ).downto(1){|d| a << Date.new( y, m, 1 ).prev_day( d ).mday.to_s }
1.upto( Date.new( y, m, 1 ).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 * ' ' }