iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 22
0
自我挑戰組

Codewars Ruby Challenge in 30 Days系列 第 22

Codewars Ruby Challenge - Day 22/30

  • 分享至 

  • xImage
  •  

學習

  1. select 上的篩選不一定是直接針對每個「||」:在不管在 map, select, each 時,過去都是直接對「||」內的值進行操作 ex. array.select { |a| a.to_i },透過今天的經驗發現可以做到 array.select { |a| array.count(a) > 1},間接操作的方式

題目:

# 計算不重複元素的總合
def non_repeat_sum(arr)
  # 實作內容
end

答案需要過以下測試:

RSpec.describe do
  it "計算不重複元素的總合" do
    expect(non_repeat_sum([4,5,7,5,4,8])).to be 15
    expect(non_repeat_sum([9, 10, 19, 13, 19, 13])).to be 19
    expect(non_repeat_sum([16, 0, 11, 4, 8, 16, 0, 11])).to be 12
    expect(non_repeat_sum([5, 17, 18, 11, 13, 18, 11, 13])).to be 22
    expect(non_repeat_sum([5, 10, 19, 13, 10, 13])).to be 24
  end
end

我的答案

def non_repeat_sum(arr)
  arr.select { |e| arr.count(e) == 1 }.sum
end

思路:

  1. 觀察到重複的不會被計算到,只計算出現過一次的總和
  2. 不太知道如何刪掉重複的語法,查了一下 stackoverflow,就不小心看到能完美計算這題解答的方式

龍哥建議的答案

def non_repeat_sum(arr)
  arr.select { |item| arr.count(item) == 1 }.sum
end

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

尚未有邦友留言

立即登入留言