このブログ内を検索可能

2021年9月29日水曜日

FREE3個時PO率解析修正

FREE3個の場合で最適解を変更しなければならないかもしれないパターンは一体どれなのか考える。{2,4,3,6,8,11,13,15,18,20,23}{5,17,3,6,8,11,13,15,18,20,23}{9,21,3,6,8,11,13,15,18,20,23}{22,24,3,6,8,11,13,15,18,20,23}のいずれかの集合に、8球分のパターン「+」3回分のFREEが一致していればよい。

なお上にあげた4パターンは、田の字型の3個ライン6つに、あとは可能な残り1ラインが4パターンあるので、4つの集合となっている。

最初の{2,4,3,6,8,11,13,15,18,20,23}で考えてみる。FREE3個を任意に配置できる、という条件より、この11個の要素の中から5個の要素が2nd終了までに入れば、一応可能性としては、残り6個の要素にシンキングでFREEを3つかぶせて、その後確率1/1140で残り3つを当てることができる。このわずか少しの変化でも最適解が変わる可能性がある。

さて、11C5=462通りであり、これが4パターンあるのでおよそ1800通りとなるが、その中にはかぶりがある。2つ目の集合の場合{3,6,8,11,13}などはすでに1つ目の集合で計算されている。よって、2~4つ目の集合において、各集合の部分集合であるという条件に加え、{3,6,8,11,13,15,18,20,23}の部分集合であってはならないという制約が課される。

ここで議論していても実感がわかないと思うので、実際にプログラムを組んでみたほうが良いだろう。

If内は先ほどの通り、修正される可能性のあるiを特定している。プログラムの簡略化上、上記制約条件と少々異なるものにしておいた。

for(j部分)は、普通に全フリーパターンを探索している。
一応工夫として、例えばFREE3個の時、もし8球分とFREEの配置したマスの和集合をとって10個の要素になれば、かぶりはないものとしてオッズアップはない。しかし9個になれば、どこかで1マスかぶっておりこれが虹バルーンとなっている。よって最終オッズに2を掛ける必要がある。またこの和集合の長さはFREE配置個数に依存するため、上記プログラムでもkosuuという変数によってその乗算具合がちがうのがみてとれる。
例えばFREE4個で和集合が8ならば、本来は12個分あるはず、ということで3個のかぶり、すなわち5倍のオッズアップ。プログラムを見てみると、Lengthが9の場合、kosuu+1となっており、ちゃんと5倍と扱われているのがわかる。
なおすでに各8,9,10,11,12マス配置の場合の基本配当データはすでに先に計算させてある、記憶によるとこれだけでも1000万個のデータを持つ。

余談だが、実際に修正すべきパターンがいくつあるかを計算すると…。
上のプログラムで、if内にcount+=1を投入して直ちに1470通りとわかった。
なお実はこれ、中学や高校でよくある問題としても帰着できる。
各4つの集合において、11C5=462パターン存在するが、その中で固定9個から5個を選ぶというパターンは全部において共通である。これは9C5=126。
つまり、各要素においてこの9個から5個を選ぶもの以外という独自の要素が、462-126=336通りあることになる。よって全体としては、和集合をとるわけなので、
4つの集合に共通の1個(=126)と、残り336通りが4つで、126+336*4=1470となり、
プログラムの計算に一致する。

とりあえずこれで53130通りが1470通りに抑えられるので楽。
なお回転移動などで一致する奴は、今回はややこしくなるのでなしにしている。


2021年9月28日火曜日

3個ライン7個成立に関する修正点

 以前我はアニマロッタの掲示板にて、3個ラインが成立したときの倍率について、1個→0倍、2個→1倍、3個→2.5倍、4個→7倍、5個→15倍、6個→30倍までは確定しており、いまだ誰も出したことが投じなかった7個については、50倍と仮定してビンゴバルーン解析を進めた。

しかし1年くらい前になって、3個ライン7個成立が45倍であることが判明した。

だがいまだに4個ライン4個成立については謎である。

なぜなら…。

まずFREEを4個置ける場合にしか成立しない。そして、計算があっているかはわからないが、おそらく4C2×4C2=36通りしかない。その中でシンキング後、12マスのうち(16マスではない。交差する形にしないと個数が足りない)5マスに入っていなければならない。これは12C5/25C5なので1.5%。ここでFREE4個を4個ライン4つのためだけに配置し、ここから1/1140を引き当てる。つまり0.0013%である。

これが意味すること。

FREE4個配置可能というほぼありえない場合に、他の7個ラインなどの高配当を捨てて、4個ライン4つ成立のためだけにバルーンを配置したという条件の下で、この配当を達成できる確率は0.0013%ということになる。およそ1/70000である。

FREE4個配置をするためには、きわめてまれな初期+FREE3個がなければならないし、そこから最初の5球でそれらすべてにHITし、かつそのHITした番号が4個ライン4個の成立に関わる16マスの中(かつ、さらに可能パターンは限られる)に入っていなければならず、そこで7個ラインなどを捨てるという鉄の意志をもってして初めて1/70000を当てるスタート地点にたてるというわけである。

そういうわけであるから、これの達成者がでないことなどもはやわかりきっていることである。

しかし我の解析においては、このパターン計算をしている場面がFREE4個におけるオッズの計算53130*12650*1140=766187730000通り(約7700億回)の中でいくつかあるということである。

なので4個ライン4個が数倍程度オッズに誤りがあったところで、期待値的には(1~10くらい)×(1/1140)で0.1%から1%程度しか変動がない。なお4個ライン4個は、無理やり狙っているためその場合の期待値は低くなる。それより明らかに4個ライン2個オッズアップ2つや7個ラインなどの期待値の方が圧倒的に高い。その圧倒的に高い「最適解」に1%程度「4個ライン4個狙い配置」の期待値が上昇したところで、もはや雀の涙である。


以上の考察により(あっているかは知らないが)、4個ライン4個はもはや問題ない、という結論に至る。


3個ライン7個については、もう一度念のためにそれが可能になりうるパターンを検証しようかと思っている。これに関しては、FREE4個の場合、田の字型の3個ライン6個を最適解と出来得るので最適解のPO率が変化する可能性が高い。

なお3個ライン7個は、田の字型が必要条件であるので、これだけでパターンはある程度決まる。このあたりもまた考えていく。

ビンゴバルーン最適解を計算

 だいぶん昔にやったので、{1,2,3,4,5}⇔1,{21,22,23,24,25}⇔53130などの対応をする関数を以前作ったのだが←方向の変換が消えていたので別プログラムで急遽作った。

ビンゴファームを作った時の流用なので緑カードという意味のgreenlistとなっているが気にしない。これはとりあえず1~25を重複アリでもよいのでこの中からとってきた要素を5つ持つ集合のリストを生成。これは25^5個の集合である。なおこれはおよそ1000万個の集合である。
ここから、各要素が等しい場合を除き(例えば{1,2,3,3,4}は3番目と4番目が等しいので除去、{1,2,3,3,3}は3,4,5番目が等しいが、||は「または」を意味するので3番目と4番目が等しいという条件にすでにひっかかり除去。)加えて昇順である条件を付けると、簡単に{1,2,3,4,5}をはじめとして{21,22,23,24,25}を最後とする25C5=53130通りのデータが出来上がる。
これをシンキングタイムにまでに入ったマスの位置とする。
スマホアプリにおいては外部からの画像判定を使う予定である。
できるかわからんが…。

そしてすでに手元にある、CPUをフルで稼働させて1か月くらいかかった超貴重なデータをmathematicaに入力し、残り3球の1140通りに対し厳密な確率を計算する。
おそらく有用なデータとしては、配当獲得率、等倍以上、3倍以上、5倍以上、10倍以上、30倍以上、50倍以上、7個ライン成立率、☆獲得効率、平均PO率(各FREE配置可能個数別)と、配置すべきバルーンの位置を示した直感的な画像だろう。

アプリで逐一これを計算させると時間がかかってシンキング中に答えを出せないようではごみアプリなのでここはあらかじめ計算させたデータで一瞬で表示できるようにしたい。
次の記事では実際に上記事項をプログラミングし、それらがデータとして得られることを示す。

アニマロッタのアプリを作るかもしれない

1年以上前に解析したビンゴバルーンのデータを使って、スマホのアプリを作成しようかとふと思いついた。

ちなみに当方、まったくアプリ作成をやったことがない。

しかしなんかいろいろやっているうちにできるかもしれない。

もしくは難しくて結局諦めるかもしれないが、

そろそろアニマも永遠に決別して無駄な浪費をおさえたことであるし、

このあたりで実りのあることでもやろうではないかということになった。

最近このブログに広告が出現しだしたのも、それが原因である。

この広告に関する収入などについても、おそらく知りたい人がいると思うのでどういう感じかいずれは述べていきたい。

ビンゴバルーンアプリの詳細はまたのちほど。

以下なんとなく、「あ~ん」までで最初に出た予測候補を並べる。特に意味はない

ある

以下

ウェア

永遠

思うので

kabe

キター

来る

決別

候補

最初に

詳細は

する

セガ

それが

たい

ちなみに

ついても、

提出

特に

並べる

抜ける

ので

発送連絡が

人が

ふと

へ。

までで

実りの

無駄

も、

やろうではないかということになった

許さん

予測

ラッシュ

理工

ルイージ

連絡

浪費

を作成

んじゃない


2021年9月24日金曜日

各店舗のアニマロッタ

 タイトルの通り、アニマロッタをやめたのだが(eパスを廃棄し、konamiIDを完全に削除して手元にあるeパスの番号を想起させるメモもことごとく粉々にした。今や手元に記憶も含めて一つとして復活できるきっかけとなるものを持っていない状態にした。称号は240個、アニマレベルは15、アクセサリーは軽く100個を超えていて最高WINは100万越えであるが、それらをすべて手放して別れを告げた)、せっかくなのでもう関係ない話だが、今後アニマロッタを追い求める者に各種店舗の説明をしておく。

意外にメダル料金や運営方法などは行ってプレイしてみないと分からないものである。まあそれも今や完全に過去の産物となったが…。

以下は各店舗のメリット・デメリットとメダル料金を自身の記憶に基づいて記述する。

記事は現在2021年9月24日時点のものなのでいろいろ変わる可能性がある。

①ヤングプラザドットコム

概要:アニマ、カラコ、デュエルドリームが最新作でおいている。連動ボーナスはたった20%と、これ目当ての攻略法は望めない。なおこの3ゲームは常に2クレである。

イベントの日には3クレになったり、メダルが戻ってくるイベント(会員必須)があったりする。

料金:公式サイトに載っている。30000円で40000枚+サービスチケットなど。

例えば30000円では金リンゴレベル5を15個、1日10個までの制限で利用可能。また次回メダル貸し出し時に10%くらい枚数がアップする券もつく。

有利なイベントに参加するときは会員である必要があり、会員となる要件は3挙げ対内に20万円を支払うことである。これにより、ゴールド会員となることができ、20万円でのメダル購入180万枚の権利を得られる。結局のところ計40万払わなければいけないのである。また数年前は設定が良かったりしたが、特に今年の春に入ってからはかなり設定が悪く、まず勝てることはなかった。

1,2ステーションは常時エキスパートモード設定である。

②ベネクス平塚・大和・川崎

概要:平塚は平塚駅からバスで少々、大和は鶴間駅から結構徒歩で遠い。川崎はアクセスが悪い。平塚では常時3クレであり、10000円で6000~12000枚くらいだった記憶がある。

10000円で金リンゴMAX3個サービスをしており、期限は発行から1か月。JPCに発展すれば外れてもスターダストだと15000枚程度の返りが期待できる。なお20000円などになるとMAXりんごは7個にしてもらえる。当日使用も確か可能。上記ヤンプラもそうである。

ベネクス大和では10万円貸し出しでヤンプラと同じようなメダルが元通りイベントを行っているが、いかんせん値段が高すぎる。限定フリープレイ券と呼ばれているが、これは自身のメダルバンクの枚数を超えて使うことはできないという意味であり、10万円20万枚であるから、サービスクレジット制度(1万円で1ポイント、10ポイントたまればメダル10万枚なので実質30万枚)があるので30万枚であるとはいえ、これで1日MAXBETで遊ぶのはこころもとない。ちょっとイメージしづらいのでスケールを避けると、300枚のメダルで30BETをし続けて1日中遊べるか、という話である。

大和でツナガロッタ1メダル6クレの時期があった(あるいは、ある)が、あれは転送する機器のスピードが遅いので、ぴぴぴぴ、といいながら徐々にメダルが転送される形式。ある程度の低額で遊ぶならBETが転送スピードを上回らないので良いが、MAX30000BETとかをすると時間が足りず、全然プレイできないというデメリットがあるが、そうそうMAXBETなどはないのでお得といえばお得。

またこれとは別におかしやスナックのサービスも行っている。ただなんか…健康に悪いよなおかしばっかりな気がするのは気のせいだろうか

ベネクス川崎は特におかしサービスやイベントは弱めの印象である。

なおベネクス大和に行くほぼ道中にイミグランデ大和があるのでそれも記述。

③イミグランデ大和

カラコは初代、アニマは最新作のものがある。メダルは1万円で5万枚、2万円で20万枚、3万円で40万枚、5万円で80万枚、10万円で200万枚と全国一の破格の値段。ただし当たりやすいかと言われれば、そうでもないときの方が多い。小田急電鉄大和駅から比較的近いので、行きやすい。なお現在では拡張ステーションはなく、6ステまでしかないので注意。席が空いていないということも休みの日ならたまに起こりうる。

ただここではイベントはやっておらず、またマルチクレジットでもなく、エキスパート設定などはない。

④サードプラネット多摩

1回訪れたことはあるが、常連などの囲い込みがなんとなく強そうな雰囲気であり、プレイしなかった。メダルのレートはそこまで安くはないが、いろいろなイベントが充実していると聞く。ただしその多くは抽選や会員制など、一般のプレイヤーにはもはや縁のない感じなので、金を持っていないとかなり敷居の高い場所となる。ただ現時点ではここがおそらくもっともアニマ界において強力な店舗であることは間違いない。掲示板などの話によるとJPCの手入れなどもポイント制によって公認で行われていると聞く。ただしものすごいBET量が必要なのでおすすめしない。

⑤YAZ寝屋川

ここも有名な店である。一時期は1万円で金リンゴMAXの個数をさいころで決める、とか2つあるアニマのうちいずれかが設定MAX、などの個性的なイベントをおこなっており、やはりここでもシルバー会員、ブラック会員などメダルの購入料金に応じて会員制が導入されている。しかしこれまた数万とかのれべるではなく、平気で数十万使うのが前提となっているため、これもまた敷居が高い。そしてここが子連れが多く、また常連同士のつながりも強いので新参が入る場合はかなり厳しいかもしれない。メダルは10000円で6000枚くらいだったような気がする。ここはエキスパートモードは普通にあったと思うが詳細は覚えていない。

⑥アピナ姫路

ここもなぜかランキングに上がることがある。5,6ステがエキスパートモードとなっている。

アクセスは比較的良好。ただしメダルがかなり高い。一応ランキングイベントは行っているが、メダル料金のことを考えるとプレイは厳しいだろう。10000円で6000枚、10万円で10万枚である。ツナガロッタ2がおかれている。



とここまでいろいろ店舗の情報について述べてきたが、結局はメダルを0枚にされるのが落ちであるから、正直自分にあったところでプレイするのがよいと思われる。

この虚無感に気づいた我はいち早くアニマを離脱したが…。

自分が楽しいと思うならばそれで大いに趣味として成立するだろう。なので我のアニマ離脱の意見などは気にする必要はない。

ちなみに解析などでアニマロッタを攻略しようとしても、機械の真の仕様が分からない限り攻略するのはほぼ不可能である。なぜなら我の解析結果によると、通常ゲームのPO率は標準的に70%となるので、もはや意図的にボールをねじ込むアニマお得意の技能がない限りこれを下回る、あるいは上回ることは厳しい。


最後にメテオボンバーで全国ランキングを狙う者たちへ忠告…ではないがアドバイス。

このゲーム、色や番号の配置とは別に、メテオが大量に並んでいる場合はそもそもブロックが消えにくいので、例えば端っこの列にメテオが3つくらい積まれた状態で上から降ってきた場合、一般的にその番号3つが全部入らないとそこは消えないので全消しはほぼ不可能である。よってメテオが縦に並んでいるのが多いとき、全消しをさせる気がないということである。あと高額の全消しリーチはことごとく外すので注意。我は確か記憶だけでも3000BETの全消しリーチ(複数ナンバー待ちばかり)を10回くらい外された気がする。その中には全国1位になれる500000WIN越えも3回くらいあったが、リーチが5個あって全部隣に入れられた記憶がある。もうそういうアニマを見るに堪えなくなりやめたわけであるが…。


2021年9月15日水曜日

ビンゴファームの確率

 ここではアニマロッタのビンゴファームの確率について述べる。

我はアニマロッタの確率を計算している人々を以前から見たことがある。

中でもチェーンボンバー大辞典を作成したみそodenさんや、

最近のアニマロッタの解析を行っているteaさんは我も知っている。

チェーンボンバー大辞典は我が中学生のころ、これは天才すぎる!!と思ったものである。

自作ゲームとかを作ったりしているうちに、なぜかプログラミングができるようになっていた。現在では日常の疑問点や大学の課題、アニマの確率など様々な部位に応用している。

さて話を戻して

調べたところによると、緑色のカードではFREEが1個のカードが3パターン、2個のカードが9パターン、3個のカードが3パターン、4個のカードが1パターン、5個のカードが1パターンあり、FREEの合計個数でいうと5個~15個のパターンが考えられる。

今回はFREEの総個数別に、その平均払い戻し率(PO率)を計算する。

各シミュレーションは1000000回実行している。数値のブレの推移を見ると、小数点第1位くらいまではある程度信用できそうである。

だいたいの予想としては、FREE個数が増えれば増えるほどPO率は増加する予想ができるが果たして。

なお各種パターンは17*16*15*14パターンもあり、これはおよそ57120通りあるので、

これらのパターン全てを個別に網羅しようとすると試行回数が100万×57120ということで5億回もゲームを「プレイ」する必要があるので時間がかかりすぎるうえ、さして重要な情報でもないので却下。

やはり盤面をぱっと見て判断できるFREE個数のほうがよい指標になるだろう。

以下解析結果。

緑カード------------------------------------------------------------------------------

FREE5個 PO率60.1% 平均0.623ライン スーパー0.24% ハイパー0.03%

FREE6個 PO率65.5% 平均0.678ライン スーパー0.30% ハイパー0.03%

FREE7個 PO率71.2% 平均0.735ライン スーパー0.40% ハイパー0.03%

FREE8個 PO率77.2% 平均0.791ライン スーパー0.48% ハイパー0.04%

FREE9個 PO率83.5% 平均0.853ライン スーパー0.53% ハイパー0.05%

FREE10個 PO率90.8% 平均0.929ライン スーパー0.58% ハイパー0.07%

FREE11個 PO率97.6% 平均0.998ライン スーパー0.66% ハイパー0.07%

FREE12個 PO率104.5% 平均1.065ライン スーパー0.76% ハイパー0.08%

FREE13個 PO率111.2% 平均1.135ライン スーパー0.82% ハイパー0.08% 

FREE14個 PO率118.9% 平均1.195ライン スーパー0.89% ハイパー0.12%

FREE15個 PO率125.4% 平均1.253ライン スーパー0.96% ハイパー0.15%

青カード-------------------------------------------------------------------------------

FREE8個 PO率84.7% 平均0.879ライン スーパー0.57% ハイパー0.03%

FREE9個 PO率88.8% 平均0.910ライン スーパー0.67% ハイパー0.04%

FREE10個 PO率100.1% 平均1.018ライン スーパー0.80% ハイパー0.06%

FREE11個 PO率114.3% 平均1.151ライン スーパー0.97% ハイパー0.09%

FREE12個 PO率122.5% 平均1.222ライン スーパー1.04% ハイパー0.12%

FREE13個 PO率135.8% 平均1.344ライン スーパー1.24% ハイパー0.15%

FREE14個 PO率142.3% 平均1.402ライン スーパー1.36% ハイパー0.15%

FREE15個 PO率153.8% 平均1.509ライン スーパー1.66% ハイパー0.12%

FREE16個 PO率167.7% 平均1.626ライン スーパー2.07% ハイパー0.09%

FREE17個 PO率179.1% 平均1.722ライン スーパー2.35% ハイパー0.08%

FREE18個 PO率191.2% 平均1.812ライン スーパー2.63% ハイパー0.09%

FREE19個 PO率207.2% 平均1.923ライン スーパー3.06% ハイパー0.11%

FREE20個 PO率215.0% 平均1.976ライン スーパー3.28% ハイパー0.12%

FREE21個 PO率245.4% 平均2.176ライン スーパー4.01% ハイパー0.19%

赤カード---------------------------------------------------------------------------------

FREE24個 PO率496.0% 平均3.480ライン スーパー11.69% ハイパー0.42%

FREE28個 PO率897.9% 平均5.034ライン スーパー22.68% ハイパー0.68%

FREE32個 PO率1098.0%平均5.662ライン スーパー32.27% ハイパー0.57%


緑のカードではFREEの個数が12個以上あれば内部は非常に良好で、9個以上くらいで許容範囲といったところ。青カードはチャンスカードでありながら、FREE8個と9個のパターンではペイアウト率が100%を下回る。つまり赤字。赤カードにおいては、FREEが32個ある場合は払い戻し率が平均10倍以上。ただしハイパーラインの成立確率も最高、というわけではない。その理由はFREE32個の場合ハイパーの成立に関係する斜めラインにいっさいFREEがない井戸の形のマス(=FREE8個分)が出現するからである。なおこの井戸の形のマスは、青カードでも出現するが青カードでこれが出るとうれしい。

この結果をどう使うかは視聴者にゆだねられている。

今後の方針

 今後は、「自作アニマロッタ」というブログの代わりに、ここでアニマロッタの確率を取り扱おうと思う。もちろん、取り扱うからにはどこかの情報からとってきたありきたりの情報や、ただのふわっとしたいわゆる「攻略法」ではない。

あと我は薄々、というかほぼ感づいているが、その設定上アニマロッタでメダルを増やすことは基本的に望めない。

しかしメダルを減らしにくいゲームがあるのではないか、ということでここで机上の空論だけを行う。

すでにみそodenやtea(敬称略)により、いろいろなゲームの払い戻し率が掲示板や2chwikiにて示されている。それによると、ビンゴガーデン、チェーンボンバー、アニマツリー、トゥインクルリンク、ワンダーチャンス、JPCあたりのゲームの期待値が記されている。

それ以外のゲームが触れられていない理由は、シミュレートする際の仮定が多すぎて仮にシミュレートできたとしても本来の設定と大きくかけ離れるか、はたまた煩雑なので再現できないかのいずれかの場合が多い。

よってこのブログでは、ビンゴファーム、ハニーエイト、ビンゴバルーン、サンダースマッシュ、ヘブンツリー、サンダーブレイクあたりを取り上げることにする。

メテオボンバーは我の能力では再現できないこともないが、不確定要素が多すぎてシミュレーション不能。チェーンボンバーの方は爆弾が多くて1,2個だが、メテオのほうは5個以上でることもあり、メテオにも向きがついているため。

アニマドロップも段セリ下がりのときのパターンが多すぎてもはや仮定をみいだせないので却下。ただこのゲームは一応演出付きで再現した。

これを作成するのに10日ほどかかった。まず画像データを動画などから地道に削り取り(当時はコナステがなかった)、さらに配当表を色々な高配当動画から知り、そして自身で大量の動画や画像でパターンを解析して手動でそれを打ち込んだ。

そのうえでの結構ややこしめなプログラミングを演出つきでこなし、この状態に至ったわけである。

その気になればアニマドロップも解析できるが、あまり有用性がないので保留。

早速ビンゴファームを作ったプログラムで解析を考えている。

なお上記ゲームは我が中1のころにみつけたwolf rpg エディターで作っている。RPG制作ソフトであるが、工夫をすればだいたいなんでも作れる。たぶん。

余談だが、今後解析していく中でPO率70%がどれくらいかというと

もし10000円を5000枚くらいで購入して、一律シングルで100BETずつ、1ゲームで計300BETしたとすると、1ゲーム当たり90枚失うことになるので、55ゲーム程度、すなわち2時間少しくらいでメダルが尽きるくらいの設定ということになる。

余談だが、アニマロッタの最低設定はPO率80%らしい。




2021年9月14日火曜日

最近の様子

 ものすごく久しぶりになったが、最近の様子を報告すると…。

当時持っていた不安が全然なく、底なしの元気かと言われていた時代はとっくに終わりをつげ、最近はあまり調子は悪くもなく、良くもなくといった感じである。


なおこのブログは自分の歴史を振り返るときに、大いに参考にさせたいただいた。

最近やるべきことはそこまで去年などの入試時代と違い多くないので、楽ではあるが…。

レゴを作成したり、プログラミングで遊んだりしている。

例えばアニマロッタのチェーンボンバーの払い戻し率を計算できるプログラムを作ったりした。

dataset = 1; oddslist = Table[Table[0, 10000], dataset]; counter = 

 Table[Table[0, 1001], dataset]; For[game = 1, game <= dataset, game++,

  totalodds = 0; maxodds = 0; 

 For[times = 1, times <= 100000, times++, oddsupinitial = 0; 

  rowodds = {1.5, 0.6, 0.5, 0.5, 0.6, 1.5}; 

  basicrowodds = {1.5, 0.6, 0.5, 0.5, 0.6, 1.5}; maxchain = 1; 

  chain = 1; oddsup1 = RandomInteger[{2, 5}];

  oddsup2 = RandomInteger[{1, 2}]; 

  Which[oddsup2 == 1, oddsup2 = 1, oddsup2 == 2, oddsup2 = 6]; 

  pattern = allpattern[[game]];

  in = {1, 2, 3, 4, 5, 6, 7, 8};

  pattern[[RandomInteger[{31, 54}]]] = 6;

  random = RandomInteger[{1, 10}];

  If[random == 1, pattern[[RandomInteger[{31, 54}]]] = 6];

  syokipattern = pattern; 

  numlist = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 

    17, 18, 19, 20, 21, 22, 23, 24, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 

    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};

  For[i = 1, i <= 100, i++, randomA = RandomInteger[{1, 54}];

   randomB = RandomInteger[{1, 54}];

   taihi = numlist[[randomA]];

   numlist[[randomA]] = numlist[[randomB]];

   numlist[[randomB]] = taihi];

  syokinumlist = numlist;

  For[a = 1, a <= 5, a++, chain = 1; bomblist = Table[0, 54]; 

   erase = Table[0, 54]; k1 = k2 = k3 = k4 = k5 = k6 = 0;

   bombwait1 = {0, 0, 0, 0, 0, 0, 0, 0, 0}; 

   bombwait2 = {0, 0, 0, 0, 0, 0, 0, 0, 0};

   bombwait3 = {0, 0, 0, 0, 0, 0, 0, 0, 0}; 

   bombwait4 = {0, 0, 0, 0, 0, 0, 0, 0, 0};

   bombwait5 = {0, 0, 0, 0, 0, 0, 0, 0, 0}; 

   bombwait6 = {0, 0, 0, 0, 0, 0, 0, 0, 0};

   

   precount = 0; postcount = 1; bombflag = 0; 

   Which[a == 1, 

    For[b = 1, b <= 54, b++, 

     If[numlist[[b]] == in[[1]] || numlist[[b]] == in[[2]] || 

       numlist[[b]] == in[[3]], 

      Which[pattern[[b]] == 6, bombflag = 1; mass = b, 

       pattern[[b]] < 6, numlist[[b]] = 0; pattern[[b]] = 0]]], 

    a == 2, For[b = 1, b <= 54, b++, 

     If[numlist[[b]] == in[[4]] || numlist[[b]] == in[[5]], 

      Which[pattern[[b]] == 6, bombflag = 1; mass = b, 

       pattern[[b]] < 6, numlist[[b]] = 0; pattern[[b]] = 0]]], 

    a == 3, For[b = 1, b <= 54, b++, 

     If[numlist[[b]] == in[[6]], 

      Which[pattern[[b]] == 6, bombflag = 1; mass = b, 

       pattern[[b]] < 6, numlist[[b]] = 0; pattern[[b]] = 0]]], 

    a == 4, For[b = 1, b <= 54, b++, 

     If[numlist[[b]] == in[[7]], 

      Which[pattern[[b]] == 6, bombflag = 1; mass = b, 

       pattern[[b]] < 6, numlist[[b]] = 0; pattern[[b]] = 0]]], 

    a == 5, For[b = 1, b <= 54, b++, 

     If[numlist[[b]] == in[[8]], 

      Which[pattern[[b]] == 6, bombflag = 1; mass = b, 

       pattern[[b]] < 6, numlist[[b]] = 0; pattern[[b]] = 0]]]];

   If[bombflag == 1, b = mass; 

    For[e = 1, e <= 1, e++, bomblist[[b]] = 1; 

     While[precount < postcount, 

      For[c = 1, c <= 54, c++, precount = postcount; 

       For[d = 1, d <= Length[nextlist[b]], d++, 

        If[pattern[[nextlist[b][[d]]]] == 6, 

         bomblist[[nextlist[b][[d]]]] = 1]];

       If[bomblist[[c]] == 1, 

        For[d = 1, d <= Length[nextlist[c]], d++, 

          If[pattern[[nextlist[c][[d]]]] == 6, 

           bomblist[[nextlist[c][[d]]]] = 1]];]]; 

      postcount = Count[bomblist, 1]]; kibaku = Table[0, 54]; 

     For[f = 1, f <= 54, f++, 

      If[bomblist[[f]] == 1, kibaku[[f]] = 1; pattern[[f]] = 0; 

       numlist[[f]] = 0; 

       For[g = 1, g <= Length[nextlist[f]], g++, 

        tonari = nextlist[f][[g]]; pattern[[tonari]] = 0; 

        kibaku[[tonari]] = 1]]];

     For[f = 1, f <= 54, f++, 

      If[kibaku[[f]] == 1 && bomblist[[f]] != 1 && numlist[[f]] > 0, 

       retu = QuotientRemainder[f, 6][[2]]; If[retu == 0, retu = 6];

       Which[retu == 1, k1 += 1; bombwait1[[k1]] = numlist[[f]], 

        retu == 2, k2 += 1; bombwait2[[k2]] = numlist[[f]], retu == 3,

         k3 += 1; bombwait3[[k3]] = numlist[[f]], retu == 4, k4 += 1; 

        bombwait4[[k4]] = numlist[[f]], retu == 5, k5 += 1; 

        bombwait5[[k5]] = numlist[[f]], retu == 6, k6 += 1; 

        bombwait6[[k6]] = numlist[[f]]];]];

     For[h = 1, h <= 54, h++, 

      If[kibaku[[h]] == 1 || bomblist[[h]] == 1, pattern[[h]] = 0; 

       numlist[[h]] = 0]]];];

   chainflag = 0; While[chainflag == 0, chainflag = 1;

    For[i = 48, i >= 1, i--, nullcount = 0; 

     If[pattern[[i]] != 0 , 

      For[j = i + 6, j <= 54, j = j + 6, 

       If[pattern[[j]] == 0, nullcount += 1]]]; 

     If[nullcount > 0, pattern[[i + 6*nullcount]] = pattern[[i]]; 

      numlist[[i + 6*nullcount]] = numlist[[i]]; pattern[[i]] = 0; 

      numlist[[i]] = 0]]; erase = Table[0, 54]; chaincount = 0; 

    For[i = 1, i <= 54, i++, 

     If[pattern[[i]] != 0 && pattern[[i]] < 6, 

      For[j = 1, j <= Length[nextlist[i]], j++, 

       If[pattern[[nextlist[i][[j]]]] == pattern[[i]], 

        erase[[nextlist[i][[j]]]] = 1; chainflag = 0; 

        If[chaincount == 0, chain += 1; chaincount = 1]; 

        If[numlist[[nextlist[i][[j]]]] != 0 && 

          bombcheck[[nextlist[i][[j]]]] == 0, 

         Which[QuotientRemainder[nextlist[i][[j]], 6][[2]] == 1, 

          k1 += 1; bombwait1[[k1]] = numlist[[nextlist[i][[j]]]]; 

          bombcheck[[nextlist[i][[j]]]] = 1, 

          QuotientRemainder[nextlist[i][[j]], 6][[2]] == 2, k2 += 1; 

          bombwait2[[k2]] = numlist[[nextlist[i][[j]]]]; 

          bombcheck[[nextlist[i][[j]]]] = 1, 

          QuotientRemainder[nextlist[i][[j]], 6][[2]] == 3, k3 += 1; 

          bombwait3[[k3]] = numlist[[nextlist[i][[j]]]]; 

          bombcheck[[nextlist[i][[j]]]] = 1, 

          QuotientRemainder[nextlist[i][[j]], 6][[2]] == 4, k4 += 1; 

          bombwait4[[k4]] = numlist[[nextlist[i][[j]]]]; 

          bombcheck[[nextlist[i][[j]]]] = 1, 

          QuotientRemainder[nextlist[i][[j]], 6][[2]] == 5, k5 += 1; 

          bombwait5[[k5]] = numlist[[nextlist[i][[j]]]]; 

          bombcheck[[nextlist[i][[j]]]] = 1, 

          QuotientRemainder[nextlist[i][[j]], 6][[2]] == 0, k6 += 1; 

          bombwait6[[k6]] = numlist[[nextlist[i][[j]]]]; 

          bombcheck[[nextlist[i][[j]]]] = 1]]]]]];

    bombcheck = Table[0, 54];

    

    For[i = 1, i <= 54, i++, 

     If[erase[[i]] == 1, pattern[[i]] = 0; numlist[[i]] = 0]]]; 

   If[chain > maxchain, maxchain = chain];

   doubletimes = 0;

   If[chain >= 5, doubletimes = chain - 4];

   For[n = 1, n <= doubletimes, n++, 

    Which[oddsupinitial == 0, 

     rowodds[[oddsup1]] += basicrowodds[[oddsup1]]; oddsupinitial = 1,

      oddsupinitial == 1, 

     rowodds[[oddsup2]] += basicrowodds[[oddsup2]]]]; 

   bottom = {0, 0, 0, 0, 0, 0};

   k = {k1, k2, k3, k4, k5, k6};

   l = {0, 0, 0, 0, 0, 0};

   bombwait = {bombwait1, bombwait2, bombwait3, bombwait4, bombwait5, 

     bombwait6};

   For[i = 1, i <= 6, i++, l[[i]] = 9; 

    For[j = 48 + i, j >= 1, j = j - 6, 

     Which[pattern[[j]] == 0, bottom[[i]] = l[[i]], pattern[[j]] != 0,

       l[[i]] = l[[i]] - 1]]];

   

   For[i = 1, i <= 6, i++, m = 0; 

    For[j = l[[i]] - k[[i]] + 1, j <= l[[i]], j++, m += 1; 

     pattern[[6*j + i - 6]] = 6; 

     numlist[[6*j + i - 6]] = bombwait[[i, m]]]]]; 

  eraseline = {0, 0, 0, 0, 0, 0};

  For[a = 1, a <= 6, a++, 

   Which[pattern[[48 + a]] == 0, eraseline[[a]] = 1, 

    pattern[[48 + a]] != 0, eraseline[[a]] = 0]];

  odds = eraseline[[1]]*rowodds[[1]] + eraseline[[2]]*rowodds[[2]] + 

    eraseline[[3]]*rowodds[[3]] + eraseline[[4]]*rowodds[[4]] + 

    eraseline[[5]]*rowodds[[5]] + eraseline[[6]]*rowodds[[6]];

  If[eraseline == {1, 1, 1, 1, 1, 1}, odds += 50]; totalodds += odds; 

  odds10 = odds*10; counter[[game, 1 + odds10]] += 1

  ; PO = totalodds/times; oddslist[[game, times]] = odds; 

  If[odds > maxodds, maxodds = odds];

  If[QuotientRemainder[times, 1000][[2]] == 0, 

   Print[{game, times, maxchain, odds, PO, maxodds}]]

  ;]; counter[[game, 1001]] = PO]; export = 

 Table[Table[0, 1065], dataset]; For[i = 1, i <= dataset, i++, 

 export[[i, 1]] = i;

 

 export[[i, 2]] = data[[1, i + 2, 5]]/10; 

 export[[i, 3]] = counter[[i, 1001]];

 For[j = 4, j <= 57, j++, export[[i, j]] = allpattern[[i, j - 3]]]; 

 over0 = over1 = over3 = over5 = over10 = over30 = over50 = 0;

 For[k = 1, k <= 10000, k++, hantei = oddslist[[i, k]]; 

  If[hantei > 0, over0 += 1]; If[hantei >= 1, over1 += 1]; 

  If[hantei >= 3, over3 += 1];

  If[hantei >= 5, over5 += 1];

  If[hantei >= 10, over10 += 1];

  If[hantei >= 30, over30 += 1];

  If[hantei >= 50, over50 += 1];];

 export[[i, 58]] = over50;

 export[[i, 59]] = over30;

 export[[i, 60]] = over10;

 export[[i, 61]] = over5;

 export[[i, 62]] = over3;

 export[[i, 63]] = over1;

 export[[i, 64]] = over0;

 For[j = 1, j <= 1000, j++, export[[i, j + 64]] = counter[[i, j]]];

 export[[i, 1065]] = 

  data[[1, i, 5]]]; Export["data.csv", export]; SystemOpen["data.csv"]

だいたい自身のやりたいアニマロッタ5の再現は以前の記事で紹介したので、

今度は数値的な解析などをして遊んでいる。

ちなみにチェーンボンバーは払い戻しが平均70%程度で、話にならない。

ビンゴファームも解析中で各パターン100000回検証をしているが、ペイアウト率は55%程度以上は確保されているが80%以上の組み合わせがなかなかない模様。

なにしろ緑カードパターンは17種類なので、組み合わせは17*16*15*14通りもあるので調べ上げるのに数十日レベルでかかるとみられている。

(カード配置パターンはその位置によって変わるので、17C4でもないし、重複はないので17^4でもない)

このあたりの話も話すとあまりに長くなるのでいずれ述べる…かもしれない


また、試験的に広告を貼るとかいう行為をやりだすことに。

ただ今度は、以前のように何度も日記のようなことを書くわけではない。

気が向いたときに面白そうなことを書くだけであろういんぷ


ちなみにプログラミングでいろいろ遊ぶのが大好きではあるが、工学系の学部にいるわけではない。わかる人にはわかると思うが、6年制の大学であり、試験や覚えることが山ほどあり、国家試験すら必要な学科である。

我はここでこういった理学系の知識を活かしつつ、社会と研究の橋渡しをいずれはしたいと考えている。入試の面接でもそう言ってきた。


また最近の動向もおいおい伝えていくが、例にもれず突然の失踪もありうるので注意。

一応このブログと広告がどんな感じにリンクして、どういう感じの統計になるかも見てみようと思っている。