カレンダー作成問題をやってみる

ruby

インプットばかりしても何も頭に残らないということを発見!(今頃)
したので簡単なプログラムを真似てわかるまでやってみることにする。

しかし同じ課題でもいろんなアプローチがあるものだと。
一つの解答例でわからなくても大丈夫だと少し自信がついてきた。
時間がかかるけれど焦らずしばらく続けてみよう。

今日やった解答例

# dateクラスの定義
require "date"

# 配列を定義
# 要素を何度も「""」でくくるのは面倒なので、%w記法を採用
youbi = %w[Su Mo Tu We Th Fr Sa]

today = Date.today
first_day = Date.new(today.year, today.month , 1);
last_day = Date.new(today.year, today.month , -1); 

#dateクラスのstrftimeで、本日の年、月名を取得して表示する
puts today.strftime("%B %Y").center(20)
puts youbi.join(" ")

# 1日目の日付を記載するための空白を設ける
# 曜日を数値(0~6)に変換するメソッドを利用して
# 1日分の記載量 × 数値で空白を決める
space = "   " * first_day.wday
count = first_day.wday
print space

# カレンダーの日数を初日~末日まで記載するための繰り返し文を作成する
# 繰り返し時 開始数値..終了数値を記載する
range = first_day.day..last_day.day
range.each do |day|

# 右詰めで日付を1日ずつ表示
# 土曜日まで記載すると改行
    print day.to_s.rjust(2)
    print " "
    count = count + 1
    if (count % 7 == 0)
        print("\n")
    end
end

これだと最後の日にちに改行がつかないのでこれをなんとかしたい。
いろいろ考えてみた結果、単純に最後

puts ""

をつければできました。
アホみたいwww

目次

今日の積み上げ

center(width, padding = '')

指定した文字列の幅で中央揃えする

join("")

ary = [1,2,3]
p ary.join(" ")
#=> 1 2 3

文字列の間に引数で指定した文字を挿入して返す

.wday

曜日を数字で返す
日曜始まりで日曜日は”0″

putsとprintの違い

puts

引数のオブジェクトを文字列に変換して改行を加えて出力する。

print

引数のオブジェクトを文字列に変換して出力する。ただし改行しない。

おすすめテキスト

テストを書かれた伊藤さんのチェリー本で勉強しています。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

パソコンとネットの何でも屋さん兼農家見習い中
2021年に奥さんに腎移植して人生の価値観が大きく変わりました
何が起きても諦めずに生き抜く力が一番大切
時々ブログも書いてます

目次