iT邦幫忙

2021 iThome 鐵人賽

DAY 3
0
自我挑戰組

從真「新」鎮出發!30天的刷題修行篇,讓寫程式成為新必殺技系列 第 3

活到老,學到老,Ruby 30 天刷題修行篇第三話

哈囉,我是 A Fei,今天是鐵人賽開賽第三天,大家連假有去哪裡走走嗎?在這邊叮嚀大家,還是要多注意防疫措施喔!

眾所皆知,軟體工程師是個要久坐、盯螢幕的職業,加上技術變化快速,要不斷自我進修,長時間累積的身心壓力可想而知,因此最好要培養一、兩種固定的嗜好,定期宣洩壓力。雖然最近比較忙,都沒時間運動、打電動,但還是要嘗試給自己時間,調劑生活。當然啦,上題庫網站解題,其實也算是一種紓壓方式(?),就像遊戲中打贏超強 BOSS 一樣,瞬間覺得自己「很勇」。

閒聊完了,讓我們進入今天的題目:
(題目來源是 Codewars,特此註明)


The Western Suburbs Croquet Club has two categories of membership, Senior and Open. They would like your help with an application form that will tell prospective members which category they will be placed.

To be a senior, a member must be at least 55 years old and have a handicap greater than 7. In this croquet club, handicaps range from -2 to +26; the better the player the lower the handicap.

Input
Input will consist of a list of lists containing two items each. Each list contains information for a single potential member. Information consists of an integer for the person's age and an integer for the person's handicap.

Note for F#: The input will be of (int list list) which is a List

Example Input

[[18, 20],[45, 2],[61, 12],[37, 6],[21, 21],[78, 9]]

Output
Output will consist of a list of string values (in Haskell: Open or Senior) stating whether the respective member is to be placed in the senior or open category.

Example Output

["Open", "Open", "Senior", "Open", "Open", "Senior"]

題目難度:7 kyu
是否有在時限內解答:有

題目假設了一個情境,要幫一家槌球俱樂部依照所輸入的資料判定一個人是「資深會員」或「公開會員」,資深會員的資格為「年齡至少(at least)有 55 歲以上」,和「差點(Handicap,點數越小代表選手越厲害)要大於(greater) 7 以上」,這些是我們要判斷的條件。

最重要點是,題目給你的一個二維陣列,也就是大腸包小腸,啊不是,是陣列裡面包含了陣列,包在裡面的元素是「年齡」、「差點」,也就是說,我們要想辦法對每個陣列的索引值 [0] 和 [1] 做判斷,並把結果轉成「Open」和「Senior」字串,依照順序丟進新陣列裡。

我的解答如下:

def open_or_senior(data)
  result = []
  data.map do |member| 
    if member[0] >= 55 && member[1] > 7
      result << "Senior"
    else
      result << "Open"
    end 
  end  
  result    
end

在這裡,我是先宣告了一個 result 空陣列,而 member[0] 和 member[1] 則取出該 member(是一個陣列)的 「年齡」和「差點」,在將判斷結果塞進 result 裡。

評分最高的解答如下:

def openOrSenior(data)
  data.map { |age, handicap| age >= 55 && handicap > 7 ? "Senior" : "Open" }
end

可以看到,對方用了 map 方法會回傳一個新陣列的特性,以及三元運算子,讓程式碼變得非常洗鍊。對方用一行,我用了九行,以題目的情境比喻,對方是差點 1 的高手,我則是差點 9 的「肉腳」,如果年紀有達標,就可以當資深會員了呢(好像哪裡怪怪的...)。不過轉念一想,我進步空間和時間還很多,如果勤加磨練,一定可以變成差點 -2 的高手!


上一篇
吾即是汝,汝即是吾,Ruby 30 天刷題修行篇第二話
下一篇
字串的動次踏次,Ruby 30 天刷題修行篇第四話
系列文
從真「新」鎮出發!30天的刷題修行篇,讓寫程式成為新必殺技16

尚未有邦友留言

立即登入留言