LoginSignup
0
0

More than 3 years have passed since last update.

【Ruby】任意の3つの数値の合計を出力するメソッドを作成せよ。 ただし、同じ数が含まれている場合は 合計にカウントしない。

Last updated at Posted at 2021-05-09
def lone_sum(ary)
  # 配列から、重複しない要素のみ取り出す
  uniq_nums = []
  ary.each do |num|
    count = 0
    ary.each do |i|
      if num == i
        count += 1
      end
    end
    if count < 2
      uniq_nums << num
    end
  end

  # uniq_nums配列内の合計
  sum = 0
  uniq_nums.each do |unique_num|
    sum += unique_num
  end

  puts sum

end


lone_sum([3, 2, 3])   # 出力結果→2
lone_sum([3, 2, 1])   # 出力結果→6

3〜14行目で重複しない値のみ取り出す処理を、

17〜20行目で重複しない値のみになった配列内の合計を求める処理を行っている。

たとえば、lone_sum([3, 2, 3])でメソッドを呼び出した場合を考えてみて!。

この場合、4行目で最初にnum=3となる。その後6行目でi=3, 2, 3となり、

それぞれに対してnum=iとなったとき、つまり重複したときにcountが増えるようになる。

そして11行目で重複した値が1つのときだけuniq_nums配列に値を追加している。

num=3のときはcount=2となるのでuniq_nums配列に値は追加されない。

これを後2回繰り返した結果、uniq_nums配列には2だけが追加される。

そして18行目以下でuniq_nums配列内の合計を求める。

この場合、sum = sum + 2、つまりsum = 0 + 2となります。最終的に合計は2と出力される。

※↓別のやり方

def lone_sum(numbers)
  numbers
    .tally
    .filter_map { |number, count| number if count == 1 }
    .sum
end

lone_sum([3, 2, 3]) #=> 2
lone_sum([3, 2, 1]) #=> 6
0
0
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0