LoginSignup
0

More than 3 years have passed since last update.

rubyでボーナスドリンクシステムを作ってみた

Posted at

おはようございます。

本日はこちらのページの問題を解いてみました。

# ドリンク3本買うごとに1本貰えるシステムです。
# 例 3本購入→4本,11本購入→16本,100本購入→149本

class BonusDrink
 def initialize(buy_number)
    @buy_number = buy_number
  end

  def get_drink
    sum_number = [@buy_number]
    while sum_number[-1] > 2
      sum_number << sum_number[-1] / 3
      sum_number << sum_number[-2].divmod(3).sum
    end

    sum = 0
    sum_number.select.with_index { |drink, i| i.odd? }
              .each { |n| sum += n }
    sum * 3 + sum_number[-1]
  end
end

振り返り
処理の流れとしては以下のようにしました。
1.while文
→3で割り、今回貰える本数と2巡目で飲む本数を配列に格納する。
2.selectメソッド
→配列には貰った本数と次に飲む本数が入っているので貰った本数のみにする。
3.eachメソッド
→合計何本貰ったかを返す。
ドリンクは3本につき1本貰えるので貰った本数に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