忍者ブログ

はしりがき

ガラパゴスへよおこそ。

[PR]

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

統計確率計算機のつかいかた1

これの使い方

UIを作る能力は私にはないので、c言語の知識を前提に、コードを直接いじってもらうことになります。

例1、青銅の鎧を先攻3ターン目に使用できる確率(ドローカード不使用)

【カードセット】
4x 青銅の鎧
15x 緑マナ

先攻3ターン目までに引く総手札枚数は7枚。この中に青銅の鎧と緑マナが各1枚以上あればいいわけです。
注意すべきは「緑マナ」の中に《青銅の鎧》が含まれていること。つまり《青銅の鎧》は《青銅の鎧》と「緑マナ」の両方として扱うべきカードということになります。
というわけで、カードセットは次のように訂正します。

【カードセット】
4x 青銅の鎧かつ緑マナ
11x 緑マナ

さて、調整すべき値は次の通り。
sizeof_hand
cardset[]
cardtype[]
sizeof_cardset
conditon
exception
trynum

ここではexception(例外処理)、cardtype[]は使いません。それぞれ0、{0,0,0}としておいてください。
上から順に見ていきましょう。
sizeof_handは手札枚数。ここは7枚。
cardset[]はカードの種類ごとの枚数を格納する配列。
cardset[0] = 4,  cardset[1] = 11, cardset[2] = 40としておけばOKです。ここで[0]=青銅の鎧かつ緑マナ、[1]=緑マナ、[2]=全体という割り当てをしたことに注意。
sizeof_cardsetはカードの種類。ここでは2種類ですが、それ以外の25枚のカードの場所も必要なので、それを加えてsizeof_cardset = 3。
conditon(条件)は「何を以って成功とするか」。この場合は《青銅の鎧》とそれに必要な緑マナを引き当てることですから、
□「青銅の鎧かつ緑マナ」が1枚以上 かつ 「緑マナ」が1枚以上
□「青銅の鎧かつ緑マナ」が2枚以上
のいずれかになります。
「青銅の鎧かつ緑マナ」「緑マナ」を何枚引いたかはgroupcount[sizeof_cardset]に保存されています。先ほど割り当てたように、[0]=青銅の鎧かつ緑マナ、[1]=緑マナです。
これを使って条件をc言語化すると、上の2条件はそれぞれ
□groupcount[0]>0 && groupcount[1]>0
□groupcount[0]>1
となり、これを組み合わせた
(groupcount[0]>0 && groupcount[1]>0) || groupcount[0]>1
を最上部のdefine文に叩き込めばおkです。
最後にtrynum(試行回数)。少なくとも1000回程度は欲しいところ。多ければ多いほど精度が高まりますが、データ型がintなのでオーバーフローに注意。



例2、無頼勇騎ウインドアックスを後攻5ターン目に使用できる確率(ドローカード不使用)

ここでもexception(例外処理)、cardtype[]は使いません。それぞれ0、{0,0,0,0}としておいてください。

【カードセット】
4x 無頼勇騎ウインドアックス
16x 緑マナ
12x 赤マナ

まずカードセットを書き直して

【カードセット】
4x 無頼勇騎ウインドアックスかつ緑マナかつ赤マナ
12x 緑マナ
8x 赤マナ

次に
sizeof_hand = 10
cardset[0] = 4
cardset[1] = 12
cardset[2] = 8
cardset[3] = 40
sizeof_cardset = 4
を入力。

conditionはやや複雑ですが
□groupcount[0]>2
□groupcount[0]>1 && groupcount[1]>0
□groupcount[0]>1 && groupcount[2]>0
□groupcount[0]>0 && groupcount[1]>0 && groupcount[2]>0
これを||で繋いで完了。

trynumは適当に。条件やカードの種類が多くなると処理が遅くなるので、上手く調整してください。

PR

comment

お名前
タイトル
E-MAIL
URL
コメント
パスワード

trackback

この記事にトラックバックする:

TemplateDesign by KARMA7

忍者ブログ [PR]