はじめに
2回目の問題だったのに解けなかったので、学習の復習のために投稿します。
回りくどくなるかもしれませんが、できるだけ自分の言葉で説明できるようにするつもりです。
環境
ruby 2.6.5
問題
3つの数字が格納された配列が与えられています。
この配列に格納された数字の合計値を出したいのですが、条件として、配列内で重複している数字に関しては除くことが求められています。
def lone_sum(ary)
# 処理を記述
end
# 呼び出し例
lone_sum([1, 2, 3])
考え方
以下の手順で考える
- 配列内で重複する数字があるかを確認する
- 重複数字を除いたユニークな配列を作る
- ユニークな配列に格納された数字を合計する
1. 配列内で重複する数字があるかを確認する
配列に格納された数字をa, b, cとします。
まずはaの数字に対して、それぞれの配列内の数字を比較して同じかどうかを確かめます。
同じ場合にはカウントが上がるようにします。
例えば、aとa、aとb、aとcの数字を比較してカウントが上がるので、
カウントが2以上であれば重複する数字があるということになります。
def lone_sum(ary)
ary.each do |num|
count = 0
ary.each do |n|
if num == n
count += 1
end
end
end
end
2. 重複数字を除いたユニークな配列を作る
まず、ユニークな配列を格納する変数を定義します。
uniq_ary = []
上記で確認した重複しない数字をこのユニークな配列に格納します。
uniq_ary << num
ここまでをまとめると、
def lone_sum(ary)
uniq_ary = []
ary.each do |num|
count = 0
ary.each do |n|
if num == n
count += 1
end
end
if count < 2
uniq_ary << num
end
end
end
3. ユニークな配列に格納された数字を合計する
あとはuniq_aryの中身を合計するだけです。
sum = 0
uniq_ary.each do |uniq_num|
sum += uniq_num
end
解答コード
def lone_sum(ary)
uniq_ary = []
ary.each do |num|
count = 0
ary.each do |n|
if num == n
count += 1
end
end
if count < 2
uniq_ary << num
end
end
sum = 0
uniq_ary.each do |uniq_num|
sum += uniq_num
end
puts sum
end
終わりに
自己代入演算子の+=を=+と表記すると計算結果が変わりました。
なぜなのか現段階ではわからないので引き続き調べていきたいと思います。
追記(2022.7.20)
コメントでtallyメソッドやsumメソッドを使用するコードをご教授いただきました。
配列内の数字の合計(同じ数字を除く)再考察
こちらにもまとめてみました。
また、自己代入演算子の件についてもコメントいただいたので、そちらご参照ください!
ありがとうございます!!