【訂正】ホワイトデーの組み合わせ

ホワイトデーも終わり、そろそろカヌレ堂も落ち着くかと思いきや、春休みということで連日賑わっているようだ。

前回「ホワイトデー4個セットの組み合わせを洗い出す」に間違いがあることが分かった。

カヌレ堂では、毎月フレーバーの変わる 1ヶ月限定のカヌレが存在する。

4個セットには必ず限定カヌレのどちらか 1つが入っていたらしい。*1

4個セットの組み合わせは以下のように訂正する。

seasons = %w[ベリーベリー ばなナッツ]

combinations = menu.keys.combination(4).to_a
set4p = combinations.select{|caneles| caneles.map{|c| menu[c]}.sum == price}
  .select{|caneles| seasons.any?{|season| caneles.include?(season)}}
  .reject{|caneles| seasons.all?{|season| caneles.include?(season)}}

set4p.size                      # => 8
combinations.size               # => 70

set4p
# => [["しろ", "くろ", "千葉落花生", "ばなナッツ"],
#     ["しろ", "ほうじ茶キャラメル", "千葉落花生", "ばなナッツ"],
#     ["しろ", "きなこ五穀", "千葉落花生", "ベリーベリー"],
#     ["しろ", "抹茶ピスタチオ", "千葉落花生", "ベリーベリー"],
#     ["くろ", "ほうじ茶キャラメル", "きなこ五穀", "ばなナッツ"],
#     ["くろ", "ほうじ茶キャラメル", "抹茶ピスタチオ", "ばなナッツ"],
#     ["くろ", "きなこ五穀", "抹茶ピスタチオ", "ベリーベリー"],
#     ["ほうじ茶キャラメル", "きなこ五穀", "抹茶ピスタチオ", "ベリーベリー"]]

カヌレ 4個の合計が 600円になる組み合わせは 8通りに減った。

caneles = set4p.flatten.sort
caneles.uniq.size    # => 8

puts menu.keys.map{|c| "%4d %s" % [caneles.count(c), c]}
# >>    4 しろ
# >>    4 くろ
# >>    4 ほうじ茶キャラメル
# >>    4 きなこ五穀
# >>    4 抹茶ピスタチオ
# >>    4 千葉落花生
# >>    4 ベリーベリー
# >>    4 ばなナッツ

しかし、全8種が使われており、使用頻度も均等であった。

*1:両方入ることはないだろう。