B - Back to the Future

2 secs 1024 MB
Machonium

概要


ループと条件分岐などを組み合わせて,与えられた課題を正確に実装しましょう.
少しの工夫で楽をすることもできます.

問題原案:@machoniump

解説


課題の抽象化

past, now, future をそのまま用いて,条件分岐などで行動を表すことも可能ですが,若干冗長になってしまいます.
そこで,もう少し表現の仕方を工夫してみましょう.

与えられた行動は, つの世界を左からそれぞれ のような数値に対応させると,次のように考えることができます.

  • 初めに から までの整数が一つ与えられる.(以下 とおく)
  • 文字列 を先頭から一文字ずつ見ていき,その文字が
    • B なら, から を引く.
    • G なら, を足す.
  • 以上 以下の範囲におさめる

課題をこのように捉えることで,実装を簡潔にまとめることができます.

より厳密には, 未満なら に, 既超なら にします.

実装

基本的には上記のことをそのまま実装するだけですが,if などを極力使わずに短い式で記述する方法もあります.

条件分岐

具体的には,多くの言語にある「三項演算子」を利用します.(詳細は各言語のリファレンス等を参照してください.)
実際のコードは次の「実装例」項にあります.

「おさめる」

言語によっては constrain() といった関数がある場合もありますが,ふつうは自分で用意する必要があります.
x = max(0, min(2, x)) などと書くことで簡潔に実装できます.

計算量の推定

回整数値の演算を行うだけなので,全体で です.

発展

類題

実装例


C++
Python
Java