Skip to content

Instantly share code, notes, and snippets.

@hidenorigoto
Last active May 9, 2020 06:03
Show Gist options
  • Save hidenorigoto/308bf76fbbae90b067d8bf819ceffeb2 to your computer and use it in GitHub Desktop.
Save hidenorigoto/308bf76fbbae90b067d8bf819ceffeb2 to your computer and use it in GitHub Desktop.
レジ問題アドバンスト

フォークじゃない 〜 横へな 2014.2.1 問題

上記の問題を、次のように拡張する。

  1. セルフレジの導入。
    • セルフレジは、レジの処理能力値を持たない。
    • 客は、セルフレジで会計することを好む客と、そうでない客がいる。
    • セルフレジで会計することを好む客は、レジ処理熟練度を持つ。熟練度(数値)は大きいほど処理が早く、具体的には、熟練度が10であれば、この問題の処理単位時間の10分の1の時間で会計を終えられる。
    • X客は、セルフレジでも絶望的に時間がかかる。
  2. キャッシュレス払い対応
    • レジには、キャッシュレス払いに対応したレジとそうでないレジがある。
    • 客には、キャッシュレス払い可能な客(現金も可能)と、キャッシュレスでしか払わない客と、現金でしか支払えない客がいる。
    • キャッシュレス払い可能な客(現金も可能)は、どのレジにも並ぶことができるが、キャッシュレス対応レジを優先する。
    • キャッシュレスでしか払わない客は、キャッシュレス対応レジにしか並べない。
    • 現金でしか支払えない客は、どのレジにも並ぶことができる。

課題内容

  1. この拡張に対応させるようコードを記述する。テストなどは自分で用意すること。
    • ヒント: 一度に考えるのが難しければ、まず1に対応し、次に2に対応する、というように段階的に拡張していく
  2. バリエーションとして扱う部分を意図的にする
    • ヒント: どのようなバリエーションを見出し、それをどのようなパターンを用いてコードに落とし込んでいるか。バリエーションの要素が増えた場合に、コードでどのように対応するのか。
    • ヒント2: gotoのSOLIDの原則のスライド参照
  3. 2のバリエーションの扱い方のコード表現は、複数考えられる。異なるパターンを使った記述も試す。

参考

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment