iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 7
0
自我挑戰組

Codewars Ruby Challenge in 30 Days系列 第 7

Codewars Ruby Challenge - Day 7/30

學習

  1. Date 需要引入:在 ruby 是屬於 std-lib(標準函式庫),與 Core 可以直接使用不一樣,前者在 .rb 檔要使用的話,我們得自行 require 才能使用。但在 terminal 中 irb 的環境,則兩者都可以直接用
  2. 如何 String 轉換成 Date 型別:使用 Date.parse,轉換後的值可以直接做相加減得到日期差異
    盡可能縮短程式碼行數:在符合可讀性高的情況下,學習如何用越少行達成需要的功能(這次龍哥只用一行 Orz)

題目:

# 31. 是不是晚來了?
# last = 上次日期,today = 今天日期,cycle_length = 週期

def is_period_late?(last, today, cycle_length)
  # 實作內容
end

答案需為:

puts is_period_late?('2016/6/13', '2016/7/16', 35) # false
puts is_period_late?('2016/6/13', '2016/7/16', 28) # true
puts is_period_late?('2016/6/13', '2016/7/16', 35) # false
puts is_period_late?('2016/6/13', '2016/6/29', 28) # false
puts is_period_late?('2016/7/12', '2016/8/9', 28)  # false
puts is_period_late?('2016/7/12', '2016/8/10', 28) # true
puts is_period_late?('2016/7/1', '2016/8/1', 30)   # true
puts is_period_late?('2016/6/1', '2016/6/30', 30)  # false
puts is_period_late?('2016/1/1', '2016/1/31', 30)  # false
puts is_period_late?('2016/1/1', '2016/2/1', 30)   # true

我的答案

require 'date'

def is_period_late?(last, today, cycle_length)
  last_day = Date.parse last
  today = Date.parse today
  (today - last_day).to_i > cycle_length
end

思路:

  1. 要先知道如何將 String 轉換成 Date 型態,日期進行相減,最後再做與 cycle_length 大小的判斷
  2. 由於完全沒做過只好再度 SOD…,查到有 Date.parse 的轉換方法,但 ruby 還是噴錯說找不到方法,想到龍哥講過有些方法 ruby 原廠有給但要自己掛(require)上去,後面就非常順利~

龍哥建議的答案

def is_period_late?(last, today, cycle_length)
  Date.parse(today) - Date.parse(last) > cycle_length
end

上一篇
Codewars Ruby Challenge - Day 6/30
下一篇
Codewars Ruby Challenge - Day 8/30
系列文
Codewars Ruby Challenge in 30 Days30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言