今日の問題はこちらでした
任意の3つの数値の合計を出力するメソッドを作りましょう。
ただし、同じ数が含まれている場合は
合計にカウントされません。
出力例:
lone_sum([1, 2, 3]) → 6
lone_sum([3, 2, 3]) → 2
lone_sum([3, 3, 3]) → 0
正直問題の意味がわかりませんでしたが例を見ると同じ数字は全てカウントされなくなると言うものでした。
確率の計算とかにもいいかもしれませんね。
答えがこちらです。
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])の場合を見てみましょう。
この場合ary.each do |num|の処理で3になります。
その後i=3,2,3となり重複するとcountが増えるようになります。
num=3の時はcount=2となるのでuniq_numsの配列に値は追加されずこれを後に二回繰り返すと、配列には2
だけが追加されます。
そして②でuniq_numsの合計を求めます。この場合は
sum = sum + 2、つまりsum = 0 + 2となります。として合計は2となります。
正直この問題は全くわかりませんでした。
そして比較演算式の知識もまだまだなと実感させられた問題でした。