Ruby練習問題での備忘録
今回はrubyの問題をやってみたということでその備忘録
問題内容
任意の3つの数値の合計を出力するメソッドを作りましょう。 ただし、同じ数が含まれている場合は 合計にカウントされません。
自分が出した答え
def lone_sum([a, b, c]) if a == b == c puts 0 elsif a == b puts c elsif a == c puts b elsif b == c puts a else puts a + b + c end end
解説
なんだ簡単じゃないか!と思いつつ考えられる条件の分岐を洗い出して終わり...笑 ドヤ顔で答え見てみると、全然違うじゃん。 俺の書いたコードださってなりました。
答え
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 sum = 0 uniq_nums.each do |unique_num| sum += unique_num end puts sum end
解説
理解するのに少し時間かかりました...汗 まずはeach.doを使って配列の要素を一つずつだす作業。さらにその中にもう一度同じ作業を繰り返すことで、 配列の0番目に対して、
0番目==0番目
0番目==1番目
0番目==2番目 同じかどうかの確認しています。
でさらに同じの場合は、countに1足してあげています。
例えば、ary = [2, 1 ,2]だった場合、二回同じという結果が出るのでcount = 2になります。
そして、if count < 2
uniq_nums << num
end のところで、countが2より小さい場合つまり重複がない場合は、その値をuniq_numsに付け加えています。
あとはこれの繰り返しです。
これで重複してない数字がuniq_numsに入っています。
それをまたeach.doを使って変数sumに足していって完了!!
理解後はめちゃくちゃスマートじゃんって思いました。さらに回答のコードなら別に3つじゃなくてもできますね。
理解できてよかったです!!!