ボーナスドリンク問題をやった人のプログラムを見ながらわからないところをアップした

ruby

例によって問題はここから拝借。

give IT a try
アウトプットのネタに困ったらこれ!?Ruby初心者向けのプログラミング問題を集めてみた(全10問) - give ... はじめに:「初心者は何をアウトプットすればいいの?」問題について 以前から何度か書いているのですが、Ruby初心者の方で「Rubyの勉強を始めました!アウトプットがんば...

で、ぐぐってみたらめちゃくちゃ丁寧に開設してくれているページがありました。

yucatio@システムエンジニア
ボーナスドリンク問題の解答 - yucatio@システムエンジニア こちらの記事を見てみて、面白そうな問題がいくつかあったので、プログラミング初心者ではないですが解きました。 blog.jnito.com ボーナスドリンク問題 「ある駄菓子屋で...

yucatioさんありがとうございます。
自分が受け取っていた問題の意味と全然違っていて、最初からつまづき気味。
3本飲んだケースごとに開設してくれているので理解しやすかったです。

で、リファクタリングしたコードではまだ理解できないので、最初のコードを参考にさせていただきました。

class BonusDrink
  def self.total_count_for(amount)
    return 0 if amount.zero?

    # case amount % 2
    # when 0
    #   3 * (amount - 2) / 2 + 2 # 偶数のとき
    # when 1
    #   3 * (amount - 1) / 2 + 1 # 奇数のとき
    # end

    if amount % 2 == 0
      3 * (amount - 2) / 2 + 2 # 偶数のとき
    elsif amount % 2 == 1
      3 * (amount - 1) / 2 + 1 # 奇数のとき
    end
  end
end

puts BonusDrink.total_count_for 100
目次

今日の積み上げ

.zero?

自身がゼロのとき、trueを返す。
そうでないときはfalseを返す。

cace文

case # 対象のオブジェクトや式
when # 値1
 # 値1に一致する場合の処理
when # 値1
 # 値1に一致する場合の処理when # 値1
 # 値1に一致する場合の処理
else
 # どれにも一致しない場合の処理
end

参考にした解答はcase文だったので、if文でも書いてみた。

今日のまとめ

そもそも算数ができていない(^_^;)

おすすめテキスト

テストを書かれた伊藤さんのチェリー本で勉強しています。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

パソコンとネットの何でも屋さん兼農家見習い中
2021年に奥さんに腎移植して人生の価値観が大きく変わりました
何が起きても諦めずに生き抜く力が一番大切
時々ブログも書いてます

目次