ベルク創業60周年記念キャンペーン をプログラミングの力で解決してSwitchをゲットしたい
うちの近所にベルクというスーパーマーケットがある。
創業60年ということで、ベルク創業60周年記念キャンペーンというのをやっている。
https://www.belc.jp/event/60anniversary
B賞のニンテンドーSwitchが欲しい。
ルール
レシート有効期間
2019年4月13日(土)~5月13日(月)閉店まで
応募締切日
2019年5月14日(火)閉店まで
期間中のお買上げ金額3,000円(税込)以上の. レシート(合算可)を専用応募用紙に貼付して、ご希望賞品、必要事項を記入し応募箱に投函
ということで組み合わせを生成するのにコンピュータの力を借りてみます
pythonで書いてみる
合計金額を改行ごとに入れる
receipts.txt
1590 1692 2476 2652 2064 3709 1936
generate.py
# レシートのデータを取得 receipts = open("receipts.txt", "r") _lines = receipts.readlines() lines = list(map(int, _lines)) results = [] result = [] while len(lines): # 最大値を取得して結果に挿入 max_value = max(lines) result.append(max_value) max_key = lines.index(max_value) lines.pop(max_key) num = max_value # 最大値が3000以上の場合は離脱 if num >= 3000: result = map(str, result) results.append(' & '.join(result)) result = [] continue # 3000以上になるまで最小値を足す while len(lines): min_value = min(lines) result.append(min_value) min_key = lines.index(min_value) lines.pop(min_key) num += min_value # 3000 以上になったら結果に入れて初期化して離脱 if num >= 3000: result = map(str, result) results.append(' & '.join(result)) result = [] num = 0 break # 出力 for i, comb in enumerate(results, 1): print('組み合わせ{0}:{1}'.format(i, comb)) receipts.close()
$ python generate.py 組み合わせ1:3709 組み合わせ2:2652 & 1590 組み合わせ3:2476 & 1692 組み合わせ4:2064 & 1936
全部で4口応募できるみたいね
結論
ちなみに自分の手と目でやったら5秒で出来ました。
この程度の組み合わせならツールを作る必要はないですね。
Switch欲しい
ソースをgithubに公開したです
https://github.com/nobita0311/belc-60th-campaign-receipt-comb