2015年12月29日火曜日

グラブルのビンゴの期待値をシミュレートしてみた

プログラムは下の方に添付。バグがあればメールかコメントで言ってください。

1000万回試行、チャンスボールの出し方は3種類

押せたらすぐ
NO BINGO: 8284552 (82.8455%)
BINGO: 1710841 (17.1084%)
SUPER BINGO: 4607 (0.0461%)

押せてリーチしてたら出す
NO BINGO: 8260057 (82.6006%)
BINGO: 1735077 (17.3508%)
SUPER BINGO: 4866 (0.0487%)

絶対ラストボールのあとに出す
NO BINGO: 8198231 (81.9823%)
BINGO: 1796909 (17.9691%)
SUPER BINGO: 4860 (0.0486%)

部屋毎の期待値もシミュレートしてみた
パネルとボールの変異が逆転してるけど多分理論上は同じ

20人部屋 期待値約1.1倍+SB期待値約0.36倍(MAX BET時)
NO BINGO: 8283840 (82.8384%)
10x BINGO: 692406 (6.9241%)
5x BINGO: 630924 (6.3092%)
3x BINGO: 322916 (3.2292%)
2x BINGO: 65091 (0.6509%)
0x BINGO: 4717 (0.0472%)
SUPER BINGO: 4702 (0.0470%)

10人部屋 期待値約1.33倍+SB期待値約0.36倍(MAX BET時)
NO BINGO: 8283393 (82.8339%)
10x BINGO: 1033286 (10.3329%)
5x BINGO: 547034 (5.4703%)
3x BINGO: 125915 (1.2592%)
2x BINGO: 10119 (0.1012%)
0x BINGO: 251 (0.0025%)
SUPER BINGO: 4584 (0.0458%)

5人部屋 期待値約1.51倍+SB期待値約0.36倍(MAX BET時)
NO BINGO: 8284857 (82.8486%)
10x BINGO: 1345011 (13.4501%)
5x BINGO: 340146 (3.4015%)
3x BINGO: 29339 (0.2934%)
2x BINGO: 641 (0.0064%)
0x BINGO: 6 (0.0001%)
SUPER BINGO: 4718 (0.0472%)

いやーきついっす
ていうかSB率って0.0458%とかよく引けたなおい!二回目を引けるイメージがねぇぞ!
そしてチャンスボールのタイミングは誤差レベルじゃねぇか!!!
さて期待値が1以上であることがわかったので仕事しながらビンゴに帰るか(白目を剥きながら)
この全然面白くない作業苦行のくせに大事すぎるクソコンテンツなんとかしろやHRTァ!!!!


おまけ、20人部屋時のフリーボール数による勝率

6個
NO BINGO: 747285 (74.7285%)
10x BINGO: 107912 (10.7912%)
5x BINGO: 90627 (9.0627%)
3x BINGO: 44736 (4.4736%)
2x BINGO: 8818 (0.8818%)
0x BINGO: 611 (0.0611%)
SUPER BINGO: 639 (0.0639%)

5個
NO BINGO: 836896 (83.6896%)
10x BINGO: 63843 (6.3843%)
5x BINGO: 60751 (6.0751%)
3x BINGO: 31550 (3.1550%)
2x BINGO: 6460 (0.6460%)
0x BINGO: 488 (0.0488%)
SUPER BINGO: 440 (0.0440%)

4個
NO BINGO: 900567 (90.0567%)
10x BINGO: 35357 (3.5357%)
5x BINGO: 38483 (3.8483%)
3x BINGO: 20887 (2.0887%)
2x BINGO: 4392 (0.4392%)
0x BINGO: 306 (0.0306%)
SUPER BINGO: 338 (0.0338%)

4個引いただけで絶望だな!
最後までやると1分20秒かかるけど3個めで上がると40秒。1分計算だと2200分=36時間プレイでSB期待値だぞ!やったな!


import java.util.ArrayList;
import java.util.Random;

public class Main {

 static final int NO_BINGO = 0;
 static final int BINGO = 1;
 static final int SUPER_BINGO = 2;

 static final int PLAYER = 20;

 static ArrayList<ArrayList<Integer>> pool = new ArrayList<ArrayList<Integer>>(PLAYER);
 static int[][] panel = new int[PLAYER][25];
 static int[][] lines = new int[12][5];
 static boolean[] finished = new boolean[PLAYER];
 static Random r = new Random();

 static {
  lines[0] = new int[] { 0, 1, 2, 3, 4 };
  lines[1] = new int[] { 5, 6, 7, 8, 9 };
  lines[2] = new int[] { 10, 11, 12, 13, 14 };
  lines[3] = new int[] { 15, 16, 17, 18, 19 };
  lines[4] = new int[] { 20, 21, 22, 23, 24 };
  lines[5] = new int[] { 0, 5, 10, 15, 20 };
  lines[6] = new int[] { 1, 6, 11, 16, 21 };
  lines[7] = new int[] { 2, 7, 12, 17, 22 };
  lines[8] = new int[] { 3, 8, 13, 18, 23 };
  lines[9] = new int[] { 4, 9, 14, 19, 24 };
  lines[10] = new int[] { 0, 6, 12, 18, 24 };
  lines[11] = new int[] { 4, 8, 12, 16, 20 };
 }

 public static void main(String[] args) throws Exception {
  int trial = 1000000;
  // int result[] = new int[] { 0, 0, 0 };
  // for (int t = 0; t < trial; t++) {
  // result[trial()]++;
  // }
  // System.out.println(String.format("NO BINGO: %d (%.4f%%)",
  // result[NO_BINGO], 100.0 * result[NO_BINGO] / trial));
  // System.out.println(String.format("BINGO: %d (%.4f%%)", result[BINGO],
  // 100.0 * result[BINGO] / trial));
  // System.out.println(String.format("SUPER BINGO: %d (%.4f%%)",
  // result[SUPER_BINGO], 100.0 * result[SUPER_BINGO] / trial));
  int result[] = new int[] { 0, 0, 0, 0, 0, 0, 0 };
  for (int t = 0; t < trial; t++) {
   result[trial()]++;
   if (isBingo(0) == SUPER_BINGO) {
    result[6]++;
   }
  }
  System.out.println(String.format("NO BINGO: %d (%.4f%%)",
    result[0], 100.0 * result[0] / trial));
  System.out.println(String.format("10x BINGO: %d (%.4f%%)",
    result[1], 100.0 * result[1] / trial));
  System.out.println(String.format("5x BINGO: %d (%.4f%%)",
    result[2], 100.0 * result[2] / trial));
  System.out.println(String.format("3x BINGO: %d (%.4f%%)",
    result[3], 100.0 * result[3] / trial));
  System.out.println(String.format("2x BINGO: %d (%.4f%%)",
    result[4], 100.0 * result[4] / trial));
  System.out.println(String.format("0x BINGO: %d (%.4f%%)",
    result[5], 100.0 * result[5] / trial));
  System.out.println(String.format("SUPER BINGO: %d (%.4f%%)",
    result[6], 100.0 * result[6] / trial));
 }

 static int trial() {
  // Initialize
  int div = 1;
  int myDiv = 0;
  int chance[] = new int[PLAYER];
  pool.clear();
  for (int p = 0; p < PLAYER; p++) {
   pool.add(new ArrayList<Integer>(25));
   finished[p] = false;
   chance[p] = 0;
   for (int i = 0; i < 25; i++) {
    pool.get(p).add(i);
    panel[p][i] = 0;
   }
   panel[p][12] = 9;
  }

  // Draw free balls
  boolean hasBingoInFree = false;
  for (int p = 0; p < PLAYER; p++) {
   int freeBalls = 4 + r.nextInt(3);
   for (int i = 0; i < 6; i++) {
    int n = draw(p);
    int star = n / 100;
    int pos = n % 100;
    if (i < freeBalls && pos != 12) {
     panel[p][pos] = star;
    }
   }
   if (isBingo(p) != NO_BINGO) {
    hasBingoInFree = true;
    finished[p] = true;
    if (p == 0) {
     myDiv = 1;
    }
   }
  }
  if (hasBingoInFree) {
   div++;
  }

  // Five draws and chance ball
  for (int i = 0; i < 5; i++) {
   boolean hasBingo = false;
   for (int p = 0; p < PLAYER; p++) {
    if (finished[p]) {
     continue;
    }
    int n = draw(p);
    int star = n / 100;
    int pos = n % 100;
    if (pos != 12) {
     panel[p][pos] = star;
     chance[p]++;
    }
    // if (chance >= 3 && isReach()) {
    // if (chance >= 3 && i == 4) {
    if (chance[p] >= 3) {
     int c = drawChance(p);
     panel[p][c] = 2;
     chance[p] = -999;
    }
    if (isBingo(p) != NO_BINGO) {
     hasBingo = true;
     if (p == 0) {
      myDiv = div;
     }
     finished[p] = true;
    }
   }
   if (hasBingo) {
    div++;
   }
  }

  // // Output
  // StringBuilder b = new StringBuilder();
  // for (int j = 0; j < 25; j++) {
  // b.append(panel[j]);
  // if (j % 5 == 4) {
  // b.append("\n");
  // }
  // }
  // System.out.println(b.toString());
  // System.out.println("Result is " + isBingo());

  return myDiv;
 }

 static int draw(int player) {
  int index = r.nextInt(pool.get(player).size());
  int num = pool.get(player).remove(index);
  int color = r.nextInt(5) == 0 ? 200 : 100;
  return num + color;
 }

 static int drawChance(int player) {
  int index;
  do {
   index = r.nextInt(pool.get(player).size());
  } while (pool.get(player).get(index) == 12);
  return pool.get(player).get(index);
 }

 static int isBingo(int player) {
  for (int[] line : lines) {
   boolean isBingo = true;
   boolean isSuperBingo = true;
   for (int i = 0; i < 5; i++) {
    if (panel[player][line[i]] == 0) {
     isBingo = false;
     isSuperBingo = false;
     break;
    } else if (panel[player][line[i]] == 1) {
     isSuperBingo = false;
    }
   }
   if (isSuperBingo) {
    return SUPER_BINGO;
   } else if (isBingo) {
    return BINGO;
   }
  }
  return NO_BINGO;
 }

 static boolean isReach(int player) {
  for (int[] line : lines) {
   int c = 0;
   for (int i = 0; i < 5; i++) {
    if (panel[player][line[i]] > 0) {
     c++;
    }
   }
   if (c == 4) {
    return true;
   }
  }
  return false;
 }
}

2015年9月25日金曜日

#デレステ アイドルマスター・シンデレラガールズ・スターライトステージ 初イベント スタミナ/メモリ/ポイント効率テーブル

こうして見るとタイトルなげーよこのゲーム

2015年9月9日水曜日

忙しい人のための艦載機の載せ方 #艦これ

自分で精算出来る人はスルーしてください。簡単な原則を取るために色々と削り落としています。


  1. 空母の数を決める。
    本当は必須艦載機から空母を決めるのが正しいけど、複雑になるので伝統的な方法で。
  2. 強力な艦戦と艦攻の熟練度をMAXにする。
    江草彗星だけは強力な艦攻の仲間に入れていい。他の、ていうか爆装13未満の艦爆は全部無視していい。
  3. 計算機ページを開く。
    http://www.kancolle-calc.net/aircrafts.html
    他にここもある。
  4. 通るルートの制空値が最高のマスに+15ぐらいの余裕を持って優勢を取れるようにする。
    艦攻のベテラン制空を考えればここはちょっと足りないぐらいでもいいのだが、まぁ面倒くさいので多少余剰制空があっても許容出来るでしょう。
    +15は特に理由はない。精算出来るようになればうまく調整しよう。
  5. 8~12機ぐらいの第四スロットを一個見つけ、最低限触接率確保のため彩雲を積む。
    飛龍の3機スロットに彩雲は本当によぉぉぉぉく見るけど、触接率低いのよ。水偵やら命中付き艦攻やらがある場合は別だけど(ていうか俺はあまりこういう積み方しない)、ここでは簡単な積み方で行く。
  6. 第一以外のスロットを小さい方から4.の条件を満たすように艦戦を積む。
    隊長スロット……もとい第一スロットはベテラン艦攻や艦爆を積むとボーナスを得られるので、艦戦を積むのは損。もし今後隊長艦戦にもボーナスがあると発見された場合はこの限りでない。
    小さいスロットの攻撃は威力が足りないので、単純合計である艦戦を積んだ方がずっと得。
  7. 村田天山や友永天山を24~30機ぐらいのスロットに積む。
    航空戦にもキャップが存在しているので、よく見る加賀の46機スロットに村田天山を積むというのは非常に勿体無い。
    FS作戦E3のように敵対空砲火が苛烈の場合はこの限りではないが、ここでは考慮しない。
  8. 友永九七を持っているのなら、1~3スロットを積む。
    触接増強のため。触接そのものと、命中+3触接になる確率が向上する。
  9. 残りのスロット全部流星改や他の雷装13艦攻を積む。
    流星改が足りない人は開発して、どうぞ。
こんな感じかな?これでとりあえず最低限の威力は確保出来る…と思いたいなぁ。

2015年7月14日火曜日

3-5 羅針盤情報

羅針盤整理&調査
★用語
空母系:正規空母、装甲空母、軽空母
戦艦系:戦艦、巡洋戦艦、航空戦艦
潜水系:潜水艦、潜水空母
重巡系:重巡洋艦、航空巡洋艦
※工作艦と潜水母艦は除外

起点

A固定
* 雷巡1以上
* 空母系1以上(揚陸は関係ない)
* 潜水系3以上
* 戦艦系2以上
* (重巡系+戦艦系)3以上
A固定じゃない場合、B固定
* 駆逐5以上
A固定じゃない場合、Bが75%のランダム
* 駆逐4
その他はAとBがそれぞれ50%

ルートに影響しない艦種:軽巡、練巡、揚陸、水母

Aマス

H固定
* 潜水系4以上
* 空母系4以上
* (戦艦系+空母系)5以上
H固定じゃない場合、C固定
* 雷巡2以上
* 戦艦系3以上
* 空母系2以上
* (重巡系+空母系+戦艦系)5以上
HやC固定じゃない場合、E固定
* 空母系0及び軽巡ちょうど1及び駆逐2以上(揚陸は関係ない)
それ以外はD固定

ルートに影響しない艦種:練巡、水母

Bマス
E固定
・空母系、戦艦系、揚陸艦1隻以上
・重巡系2隻以上
・(軽巡+雷巡)4隻以上
E/Gランダム
・重巡系1隻 →E/Gランダム
・軽巡3隻 →E/Gランダム
G固定
上の条件をすべて避けた場合
ルートに影響しない艦種:駆逐、水母、潜水系、練巡
E/Gランダムは一律20%~30%でEマスの模様
(雷巡+軽巡)3はEマスランダムのフラグにならない模様

Fマス

I固定
* (戦艦系+空母系)4以上
* 揚陸1以上
海域索敵マス、閾値不明

2015年4月30日木曜日

2015春イベリソース消費

燃料 弾薬 鋼材 ボーキ バケ 回数 時間
E1 521 218 122 0 24 10 01:07
140855 106140 135014 104488 1563 21:06
140334 105922 134892 104688 1539 22:13
E2 1669 1160 305 3084 10 6 01:07
140273 105826 134874 104688 1538 22:16
138604 104666 134569 101604 1528 23:23
E3 2162 1420 1263 1975 37 12 01:33
138585 104666 134532 101604 1527 00:10
136423 103996 133869 99629 1490 01:43
E4 3105 3334 1003 3742 15 8 01:10
136440 104480 133891 99822 1493 07:49
133335 101146 132888 96080 1478 08:59
E5 13653 7514 11573 3890 48 19 02:50
133744 101741 133087 96264 1478 11:06
120091 94227 121514 92374 1430 13:56
E6 13915 9512 13280 8082 88 14 02:34
120091 94227 121514 92374 1430 14:33
106176 84715 108234 84292 1342 17:07

ALL
35025/22408/26946/20773/222
10:21'

2015年3月6日金曜日

るる鯖ダンガンロンパRP村17~18人限定 狼勝ちの戦術内訳(265854~260261村)

100戦 村勝ち57 狼勝ち21 狐勝ち11 引き分け11

狼勝ち内訳

1/21:占い即噛み成功
263841

7/21:ディレイ占い噛み成功(狩人生存か問わず)
265854(狩人抜かれ)
263470(但し狐処理出来ず最終日狐投票ミスで勝ち)
262383(狩人が初日●引きの占いを護衛しない)
261892(狩人抜かれ)
260811(狩人抜かれ)
260762(狩人偽護衛)
260457(初日呪殺1-1からのショニカス狩人)

2/21:占い欠け
263985
261488(第一呪殺で狼が真占い乗っ取り)

6/21:信用勝ち
263919(呪殺はGJ隠れ)
263888(狼身内切り猫CCOで真はいきなり対抗占いで信用皆無)
263644(狼身内切りの後狐噛みを狩人が狼占GJ誤認)
262699(真占い初日潜伏、狐噛みと呪殺隠し平和を狩人が狂占GJ誤認)
262340(呪殺は狐噛み合わせ隠れ)
260833(呪殺は噛み先対応)

3/21:村自滅占い死亡
265460(3占い3狩人全く詰んでない場面で護衛指定外し)
265056(スライド偽猫の狐に騙されて真猫吊り占い道連れ)
264555(4-1のPET指示と投票で占い指示に逆らった真即噛まれ)

1/21:その他
261907(真占い二連続死体占い+二連続素村指定+猫噛み呪殺3死体で5人占○灰灰灰の2狼から村人を吊って狼勝ち)

1個どっか行ったけどまぁいいや

2015年2月8日日曜日

15冬イベ資源消費 #艦これ

開始 108685/106348/118011/111807/1753
E-1クリア 108956/107089/118791/112123
E-2クリア 103057/103804/113763/108186
E-3クリア 100059/102488/111360/105889
E-4クリア 92557/98629/104236/105302
E-5クリア 45557/60174/65663/90879

回復分含めてしまうけどまぁ
E-1 ほぼ0、バケツ4
E-2 5899/3285/5028/3937/38
E-3 2998/1316/2403/2297/37
E-4 7502/3859/7124/587/36
E-5 47000/38455/38573/14423/209

2015年1月13日火曜日

最近読んだラノベの感想にも呼べない何か

覇剣の皇姫アルティーナ
7巻まで読了。全体的にまとまっていて普通に面白いんじゃないかな?
……それ以外あまり思いつかない当たり、本当に四平八穏な作品だなぁw

ミスマルカ興国物語
11巻まで読了。ルナス様かわいい。
俺がこのシリーズに求めてるのはやはりマヒロが周りを振り回すことだと、帝国編で確認できたな。そういう意味でも7巻の展開は神だったと思うよ。
それはそれとしても、「全部こいつだけでいいんじゃないかな」みたいなのは好きじゃなかったなぁ。他のシリーズを読んでないからなのかな。具体的に言うと預言者様とアンドロイドさんだけどさ。わざわざマヒロをそんな小物に負けさせて復活させて無双させる必要があったのかなーと。普通に逃げ切ってその後の展開に繋げればいいじゃん?アンドロイドの巻はもう読み飛ばした。うん。

黒鋼の魔紋修復士
11巻まで読了。ヴァレリアが成長していくのを見てるのも微笑ましいし、アレからだと本当に心から全力で応援したいよディミタールとヴァレリア。つかバベル猊下からナニOKの宣言が出た時はお茶吹いたよマジで。シャキーラだけは本当最初想像したのと全然違ったなぁ……黒幕は別に作者も意外性を求めてるわけじゃないと思うから普通に感じ取れたし。
ヴァレリアかわいいよヴァレリア。というかカリン様という俺ド好みのキャラがいるのにヴァレリアのヒロイン力は圧倒的に流石って感じだなぁ。

ねじ巻き精霊戦記 天鏡のアルデラミン
6巻まで読了。俺的に完全にヤトリ戦記。ヤトリは見ていてこう、ナニに来る。ヤトリかわいいよヤトリ。はぁぁぁぁくんかくんかしたいよぉ。
……まぁそれだけ展開にはすんげーハラハラしちゃうんだよね。もう俺はイクタとヤトリがちゃんとくっつけられるかどうかだけが気が気でないよ。

見習い神官レベル1
2巻まで読了。イチャラブは好きだけど他は正直好きじゃない。タイトルが最悪レベル、戦闘は今一、話はまぁまぁ、キャラは敵も含めて主人公二人とアフェク先輩以外正直微妙。気持ちの悪い敵がやりたい放題な展開嫌い。毎回こうやって手玉に取られてなぁなぁで助けられて敵に逃げられるのかよ、と。茶番戦闘含めてメンヘラ姉関連マジで要らねぇよ気持ち悪いだけだよ……
3巻を買うかどうか悩ましい。感想を見ると3巻は同級生ズが御都合救助じゃなくて本当に活躍する話っぽいけど、メンヘラ姉が出てくるかどうかがわからないんだよね。正直アレに出てこれると読む気なえるのよね。
誰か教えて!

2015年1月1日木曜日

E8本城名古屋攻略メモ #城プロ


w10開始時名古屋残HP881でもう駄目かと思った

メンツ
名古屋Lv60 膝突栗毛 必殺の多聞櫓
月山富田Lv32 裂空の真槍 千鳥十文字槍
盛岡Lv51 岩石の城門 岩石の城門
金ケ崎Lv57 日の丸扇 岩石の城門
津和野Lv60 紅蓮の小筒 松風(増築@攻撃40)
水戸Lv31 烈火の中筒 内記黒
桜尾Lv40 鏡栗毛 八方連弩
鳥取Lv45 崩壊の大弓 黒織部茶碗
滝山Lv52 日の丸扇 日の丸扇

久保田Lv70 日の丸扇 飛天鳳凰丸(増築@攻撃29防御3会心12)