ドミニオンの引ききりデッキについて
ドミニオンでコインを買うと強いと覚えたのでコインを買いまくっていたら引ききりデッキにぼこぼこにされたので、村と鍛冶屋がある場合に、それぞれ何枚ずつ買うとどれくらいの確率で引ききれるのかをテストしてみた。
凡例
2 4 1710
これは村が2枚、鍛冶屋が4枚、残り10枚がコインや勝利点カードの時の引き切る確率が17.1%と読む。
出力を全部見てもいまいち面白くないので、村と鍛冶屋の枚数の合計が一定の時にどう配分するのが一番多いのかだけをピックアップ:
3 4 2030 4 4 3689 5 4 4852 6 4 5438 6 5 5997 7 5 6714 8 6 7455 9 6 7758 10 6 8045 11 6 8236 11 7 8445 12 7 8629
つまり、鍛冶屋は村の半分+1〜2枚くらいをめどに買うのがいちばん確率が高い。そして村を12枚買うなんて無茶をしても引き切る確率は86%でしかない。
貯蔵庫を混ぜると確率が上がるかなぁ??
以下ソースコード
from copy import copy from random import shuffle VILL = 1 SMITH = 2 OTHER = 0 NUM_TRIAL = 10000 def draw(hand, deck, num): hand += deck[:num] deck = deck[num:] return hand, deck def test(num_vill, num_smith, num_other=10): initial_deck = [VILL] * num_vill + [SMITH] * num_smith + [OTHER] * num_other num_success = 0 for _trial in range(NUM_TRIAL): deck = copy(initial_deck) shuffle(deck) hand, deck = draw([], deck, 5) action = 1 while action and deck: if VILL in hand: hand.remove(VILL) hand, deck = draw(hand, deck, 1) action += 1 elif SMITH in hand: hand.remove(SMITH) hand, deck = draw(hand, deck, 3) action -= 1 else: break if not deck: num_success += 1 return num_success for num_both in range(20): for num_smith in range(4, num_both + 1): num_vill = num_both - num_smith print num_vill , num_smith, test(num_vill, num_smith)