VOYAGE GROUPのCTOが出す問題に挑戦して、賞金をゲットだ!
レベルに合わせた賞金が用意されており、レベルごとに賞金を獲得できる人数が限られている。 レベル1は先着制だ。このくらいはさくっと回答してほしい。 レベル2およびレベル3はコードの質で賞金獲得者が決まるので慌てる必要はない。
- レベル1 ・・・ 500円(100名)
- レベル2 ・・・ 2,000円(25名)
- レベル3 ・・・ 10,000円(10名)
さらに回答者のうち上位5名はCTOとの豪華会食に招待しよう。
- 2017年卒業予定学生であること
- サポーターズに登録していること
※2017年卒以外も応募可能ではあるが残念ながら賞金の対象外だ。
下記フォームから提出せよ。
https://docs.google.com/forms/d/1eVnJsutkwlMfKgo5CzB12DqEqo05dCS4IqOpE3XnLbI/viewform
VOYAGE GROUPには社外の方も勉強会などで利用できる無料シェア会議室 PORTやAJITOがある。 さらに勉強会後の懇親会のときにピザや寿司を提供するピザスポンサーや寿司スポンサーなども行っており好評だ。 そうしていると割引クーポンが貯まってきて、どの組み合わせで使うのがベストかを考えるのが意外と大変だ。。。 そこで、購入する商品の合計額と手持ちの割引クーポンを渡すと利用すべき割引クーポンを教えてくれるツールを作ってほしい。
購入する商品の合計額と手持ちの割引クーポンをもとに、利用すべき割引クーポンを返す手続きを書け。
- できるだけ支払い額が少なくなるようにする。
- 支払い額 = 購入する商品の合計額 - 利用する割引クーポンの合計額
- 利用する割引クーポンの合計額は購入する商品の合計額を越えてはいけない。
- 上記を満たしたうえで、クーポン枚数が一番少ない組み合わせ。
- 割引クーポンは購入する商品の合計額が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, myCouponList) {
var selectedCoupons = [0, 0, 0];
// your code
return selectedCoupons;
}
// ケース3
selectOptimumCombination(1210, [2, 1, 3]); // [2, 1, 0]