uycep2ed’s blog

IT関連のニュースで思ったこと感じたこと、プログラミングの勉強の備忘録を書いていきたいと思います。

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つじゃなくてもできますね。

理解できてよかったです!!!