上記の問題を、次のように拡張する。
- セルフレジの導入。
- セルフレジは、レジの処理能力値を持たない。
- 客は、セルフレジで会計することを好む客と、そうでない客がいる。
- セルフレジで会計することを好む客は、レジ処理熟練度を持つ。熟練度(数値)は大きいほど処理が早く、具体的には、熟練度が10であれば、この問題の処理単位時間の10分の1の時間で会計を終えられる。
- X客は、セルフレジでも絶望的に時間がかかる。
- キャッシュレス払い対応
- レジには、キャッシュレス払いに対応したレジとそうでないレジがある。
- 客には、キャッシュレス払い可能な客(現金も可能)と、キャッシュレスでしか払わない客と、現金でしか支払えない客がいる。
- キャッシュレス払い可能な客(現金も可能)は、どのレジにも並ぶことができるが、キャッシュレス対応レジを優先する。
- キャッシュレスでしか払わない客は、キャッシュレス対応レジにしか並べない。
- 現金でしか支払えない客は、どのレジにも並ぶことができる。
- この拡張に対応させるようコードを記述する。テストなどは自分で用意すること。
- ヒント: 一度に考えるのが難しければ、まず1に対応し、次に2に対応する、というように段階的に拡張していく
- バリエーションとして扱う部分を意図的にする
- ヒント: どのようなバリエーションを見出し、それをどのようなパターンを用いてコードに落とし込んでいるか。バリエーションの要素が増えた場合に、コードでどのように対応するのか。
- ヒント2: gotoのSOLIDの原則のスライド参照
- 2のバリエーションの扱い方のコード表現は、複数考えられる。異なるパターンを使った記述も試す。