Skip to main content

card shuffle method scorer.

Project description

使い方

from tcgshuffle import evaluate
evaluate(評価したいシャッフル関数, デッキ枚数)

出力

  • position_prob_map: 元々i番目にあったカードが、シャッフル後デッキ内のどこに移動した頻度
  • neighbor_prob_map: 元々i番目にあったカードとj番目にあったカードについて、シャッフル後にそれらが隣り合っていた頻度
  • position_badness: position_prob_mapの頻度が、理想頻度(1 / デッキ枚数)とどの程度乖離しているか
  • neighbor_badness: neighbor_prob_map、理想頻度(1 / (デッキ枚数 - 1))とどの程度乖離しているか
  • total_position_badness: 総合評価として、理想頻度を1とした場合にposition_badnessの偏りがどの程度大きいかを示す(もっとも悪い数字をデッキ枚数分取り出し平均したもの)
  • total_neighbor_badness: 総合評価として、理想頻度を1とした場合にneighbor_badnessの偏りがどの程度大きいかを示す(もっとも悪い数字をデッキ枚数分取り出し平均したもの)

シャッフル関数定義方法

説明準備中...

basic example 1

  1. ディールシャッフル(6つの束)
  2. ファローシャッフル(5回連続)
  3. ヒンドゥーシャッフル(4回シャカシャカする作業を1回)
  4. ファローシャッフル(5回連続)
  5. ヒンドゥーシャッフル(4回シャカシャカする作業を1回)
  6. カット(3分割)
from tcgshuffle import Deck, Shuffler, evaluate
def shuffle(d: Deck, s: Shuffler) -> Deck:
    s.deal(d, [6])
    s.fallow(d, 5, 0.1, 0.1)
    s.over_hand(d, [4], 0.1)
    s.fallow(d, 5, 0.1, 0.1)
    s.over_hand(d, [4], 0.1)
    s.cut(d, 3, 0.1)
    return d

position_prob_map, neighbor_prob_map, position_badness, neighbor_badness, total_position_badness, total_neighbor_badness\
    = evaluate(shuffle, 60)

total_position_badness = 0.21536666666666665 total_neighbor_badness = 0.21140000000000003

basic example 2

  1. ヒンドゥーシャッフル(5回シャカシャカ、4回シャカシャカ、3回シャカシャカ、・・・と21回行う)
from tcgshuffle import Deck, Shuffler, evaluate
def shuffle(d: Deck, s: Shuffler):
    s.hindu(d, [5, 4, 3, 4, 5, 4, 3, 4, 5, 4, 3, 4, 5, 4, 3, 4, 5, 4, 3, 4, 5], 0.4)
    return d
position_prob_map, neighbor_prob_map, position_badness, neighbor_badness, total_position_badness, total_neighbor_badness\
    = evaluate(shuffle, 60)

total_position_badness = 0.4182666666666666 total_neighbor_badness = 13.671499999999998

advanced example 1

  1. 2束に分ける
  2. それぞれの束をファローシャッフル(8回連続)
  3. 2束を合わせる(上に載せるだけ)
from tcgshuffle import Deck, Shuffler, evaluate
def shuffle(d: Deck, s: Shuffler):
    ds = s.split(d, 2, 0.1)
    s.super_fallow(ds, 8, 0.1, 0.1)
    d = s.merge(ds)
    return d
position_prob_map, neighbor_prob_map, position_badness, neighbor_badness, total_position_badness, total_neighbor_badness\
    = evaluate(shuffle, 60)

total_position_badness = 1.2804000000000002 total_neighbor_badness = 1.3671999999999995

advanced example 2

  1. ディールシャッフル(6つの束)
  2. 以下を3回繰り返す
    1. 束を2つに分ける(元の束 -> [A, B])
    2. 各束をさらに3つに分ける(A -> [A1, A2, A3], B -> [B1, B2, B3])
    3. A1とB1、A2とB2、A3とB3をそれぞれ合わせる
    4. A1+B1、A2+B2、A3+B3にそれぞれ、ファローシャッフル(3回連続)
    5. A1+B1、A2+B2、A3+B3を合わせる
    6. ヒンドゥーシャッフル(4回シャカシャカする作業を3回実施)
from tcgshuffle import Deck, Shuffler, evaluate
def shuffle(d: Deck, s: Shuffler):
    s.deal(d, [6])
    for i in range(3):
        sp2 = s.split(d, 2)
        sp6 = s.super_split(sp2, 3)
        pile1 = s.merge([sp6[0], sp6[3]])
        pile2 = s.merge([sp6[1], sp6[4]])
        pile3 = s.merge([sp6[2], sp6[5]])
        s.fallow(pile1, 3, 0.1, 0.1)
        s.fallow(pile2, 3, 0.1, 0.1)
        s.fallow(pile3, 3, 0.1, 0.1)
        d = s.merge([pile1, pile2, pile3])
        s.hindu(d, [4, 4, 4], 0.1)
    return d
position_prob_map, neighbor_prob_map, position_badness, neighbor_badness, total_position_badness, total_neighbor_badness\
    = evaluate(shuffle, 60)

total_position_badness = 0.23553333333333332 total_neighbor_badness = 0.2083

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

tcgshuffle-0.1.0.tar.gz (2.8 kB view hashes)

Uploaded Source

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page