Skip to content

Instantly share code, notes, and snippets.

@makoga
Created September 8, 2016 02:47
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save makoga/bf9f2c7a5cf2704db709c44830a89afb to your computer and use it in GitHub Desktop.
Save makoga/bf9f2c7a5cf2704db709c44830a89afb to your computer and use it in GitHub Desktop.
Level.1 - 2016 2nd - Challenge CTO of VOYAGE GROUP

Level.1 - CTOからの挑戦状 of VOYAGE GROUP 2016 2nd

概要

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

賞金

レベルに合わせた賞金が用意されており、レベルごとに賞金を獲得できる人数が限られている。
レベル1は先着制だ。このくらいはさくっと回答してほしい。
レベル2およびレベル3はコードの質で賞金獲得者が決まるので慌てる必要はない。

  • レベル1 ・・・ 500円(100名)
  • レベル2 ・・・ 2,000円(30名)
  • レベル3 ・・・ 10,000円(10名)

さらに回答者のうち上位入賞者は10/28(金)に開催されるCTOとの豪華ミートアップイベントに招待しよう。

参加資格

※2018年卒以外も応募可能ではあるが残念ながら賞金の対象外だ。
前回の挑戦状に参加した人も応募可能ではあるが残念ながら賞金の対象外だ。

回答の提出方法

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

https://goo.gl/forms/ygBN2csu2GvqwD683

注意点

  • Gistで提出する場合は、ファイル名に適切な拡張子(.rb, .py, etc)を付けること。
  • 実行ファイルを作成する必要がある言語の場合は、作成手順も提出せよ。
    • 例えばCならMakefileもあわせて提出するなど。
    • 実行ファイルを作成できなかった場合は、賞金の対象外になることもある。

問題

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

Level.1

購入する商品の合計額と手持ちの割引クーポンをもとに、利用すべき割引クーポンを返す手続きを書け。

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

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

割引クーポンの種類

  • 割引クーポンは購入する商品の合計額が1000円を越えるときのみ利用可能
  • 500円割引
  • 200円割引
  • 100円割引

テストケース

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

ケース 購入する商品の合計額 500円割引手持ち枚数 200円割引手持ち枚数 100円割引手持ち枚数 利用すべき割引クーポン
1 1000 2 1 3 500円割引x0、200円割引x0、100円割引x0
2 1210 0 0 0 500円割引x0、200円割引x0、100円割引x0
3 1210 2 1 3 500円割引x2、200円割引x1、100円割引x0
4 1530 2 1 3 500円割引x2、200円割引x1、100円割引x3

サンプルコード

このコードはあくまでサンプルだ。手続き名、変数名など、この形式にこだわる必要はない。自分が最適だと思う形式で書け。
また、サンプルコードは疑似コードだ。提出するコードは実在する処理系で動作する言語の中から自由に選択してくれ。

// 手続き
function selectOptimumCombination(amount, myCoupons) {
  var selectedCoupons = [0, 0, 0];

  // your code

  return selectedCoupons;
}

// ケース3
selectOptimumCombination(1210, [2, 1, 3]); // [2, 1, 0]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment