Skip to content

Instantly share code, notes, and snippets.

@makoga
Last active August 29, 2015 14:22
Show Gist options
  • Save makoga/3253f69c544b540eab00 to your computer and use it in GitHub Desktop.
Save makoga/3253f69c544b540eab00 to your computer and use it in GitHub Desktop.
L3 - 2015 - Challenge CTO

Level.3 - CTOからの挑戦状 of VOYAGE GROUP 2015

概要

VOYAGE GROUPのCTOが出す問題に挑戦して、賞金をゲットだ!

賞金

レベルに合わせた賞金が用意されており、レベルごとに賞金を獲得できる人数が限られている。

  • レベルごとの賞金額と人数
    • レベル1 ・・・ 500円(100名)
    • レベル2 ・・・ 2,000円(25名)
    • レベル3 ・・・ 10,000円(10名)
    • さらに回答者のうち上位5名はCTOとの豪華会食に招待しよう。

レベル1は先着制だったが、レベル2およびレベル3はコードの質で賞金獲得者が決まる。

  • コードの質とは?
    • テストの容易さ
      • UTのコードが用意されており、1ステップで実行できると高評価
    • 変更の容易さ
    • コードの読みやすさ

参加資格

※2017年卒以外も応募可能ではあるが残念ながら賞金の対象外だ。

回答の提出方法

下記フォームから提出せよ。

https://docs.google.com/forms/d/15XaoFaakGodNv6VGM4nqhjwWx6vdq64quKCrxO7EYmk/viewform

問題

VOYAGE GROUPには社外の方も勉強会などで利用できる無料シェア会議室 PORTAJITOがある。 さらに勉強会後の懇親会のときにピザや寿司を提供するピザスポンサーや寿司スポンサーなども行っており好評だ。 そうしていると割引クーポンが貯まってきて、どの組み合わせで使うのがベストかを考えるのが意外と大変だ。。。 そこで、購入する商品リストと手持ちの割引クーポンを渡すと利用すべき割引クーポンを教えてくれるツールを作ってほしい。

Level.3

購入する商品リストと手持ちの割引クーポンをもとに、割引クーポン利用とセットメニューはどちらがお得かも考慮し、利用すべき割引クーポンを返す手続きを書け。 提出するコードは実在する処理系で動作する言語の中から自由に選択してくれ。 また、テストコードも提出せよ。テストコードがない場合は、手続きが正しく動作することをどのようにテストしたかを提出せよ。

利用すべき割引クーポンの最適な組み合わせとは?

  • できるだけ支払い額が少なくなるようにする。
    • 支払い額 = 購入する商品の合計額 - 利用する割引クーポンの合計額
  • 利用する割引クーポンの合計額は購入する商品の合計額を越えてはいけない。
  • 上記を満たしたうえで、クーポン枚数が一番少ない組み合わせ。

商品の種類

  • ピザメニュー
    • ジェノベーゼ
      • M 1000円
      • L 1500円
    • マルゲリータ
      • M 1300円
      • L 1800円
  • サイドメニュー
    • ポテトフライ 400円
    • グリーンサラダ 500円
    • シーザーサラダ 600円
  • セットメニュー
    • ピザ2セット
      • ピザどれか2枚とポテトフライをセットで頼むとポテトフライが無料
    • ピザL2セット
      • ピザLサイズ2枚とサイドメニューをセットで頼むとサイドメニューがどれか1品無料

割引クーポンの種類

  • 割引クーポンは購入する商品の合計額が1000円を越えるときのみ利用可能
  • セットメニューを注文した場合は割引クーポンは利用できない
  • 500円割引
    • 購入する商品の合計額から500円割引
    • 1回の支払いで2枚まで利用可能
  • 200円割引
    • 購入する商品の合計額から200円割引
    • 1回の支払いで2枚まで利用可能
  • 100円割引
    • 購入する商品の合計額から100円割引
    • 1回の支払いで3枚まで利用可能
  • ピザメニュー購入で300円割引
    • 購入する商品の合計額から300円割引
    • 購入する商品リストにピザメニューのいずれかが含まれていれば利用可能
    • 1回の支払いで1枚まで利用可能

テストケース

まずは下記テストケースをもとにテストを行い、正しく動作するか確認するんだ。 ただし、下記ケースは最低限である。必要に応じてケースを追加してほしい。

  • ケース1
    • 購入する商品リスト
      • ジェノベーゼM x1
      • マルゲリータM x1
      • ポテトフライ x1
    • 手持ちのクーポン
      • 500円割引 x1
    • 使うべきクーポン
      • 500円割引 x1
  • ケース2
    • 購入する商品リスト
      • ジェノベーゼL x1
      • マルゲリータL x1
      • シーザーサラダ x1
    • 手持ちのクーポン
      • 500円割引 x1
    • 使うべきクーポン
      • なし
        • ピザL2セットのほうがお得
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment