活到老,学到老,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 的高手!


<<:  Day18:图形搜寻-戴克斯特拉演算法(Dijkstra's algorithm)

>>:  Day6-D3 资料绑订 Data Binding: 资料状态enter、update、exit

[Day04]稽核员守则与伦理

耶!上完课、通过考试之後,是不是就可以出去稽核客户了咧? 是不是可以执行稽核活动,然後就可以稽他!稽...

LeetCode解题 Day08

848. Shifting Letters https://leetcode.com/problem...

可视化编程游戏引擎

可视化编程游戏引擎 可视化编程是指可以把程序代码视觉化 不需要写程序代码就可以编写程序逻辑,降低了...

D8-(9/8)-中华电(2412)-存股好选择

注:发文日和截图的日期不一定是同一天,所以价格计算上和当日不同,是很正常的。 声明:这一系列文章并无...

用 Python 畅玩 Line bot - 27:爬虫(二)

接续前篇,一般爬虫时抓出的资料量多还没什麽关系,但这次我们是想要让使用者在 line 上使用,一次给...