ベルク創業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