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

おはようございます。

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

# ドリンク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をかけ、そこに最後に飲んだ本数を足して合計数を返す。

こちらは小学三年生の問題がベースらしいのですが、それすらも難しくコードに落とし込むのに手間取りました笑