10連をひたすら回し続けてキャラコンプまでにかかった回数とお金をだしてみようという感じです。
仕様について
通常ガチャ
通常ガチャとはいわゆる10連したときの1回〜9回目のガチャのことを言っています。
- ☆1の確率は80%
- ☆2の確率は18%
- ☆3の確率は2%
- 各レア度内でのキャラ出現率はランダム
特別ガチャ
10回目のガチャです
- ☆1の確率は0%
- ☆2の確率は98%
- ☆3の確率は2%
- 各レア度内でのキャラ出現率はランダム
こんな感じです。
冒頭にも書きましたが、上記のガチャを10万人がそれぞれフルコンプするまでにかかるお金をだしていこうという企画です。
肝心なおかねの計算は、
- 10連ガチャ一回、3000円
で計算していきます。(1万円で買うとちょっとお得のようですが計算がじゃっかん面倒になるので・・・)
結果
まず先に結果を書くと、
- 平均:249回(747000円)
- 最小:48回(144000円)
- 最大:1041回(3123000円)
- 中央値:233回(699000円)
という感じでした。
これは10連を回した回数となります。
1106回回してようやくフルコンプした方はちょっと可哀想すぎますねww
きっと血反吐吐きながら回したことでしょう。
まあだいたい70万ぶっこめばフルコンプできるということがわかりました。
※前に、
https://twitter.com/chatrate/status/984733431610265600
というツイートをしたのですが、このときは特別ガチャの確率をミスってました。ごめんなさい。
プログラムについて
あとでgithubにも上げておこうと思いますがいったんこんな感じになってます。
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 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 |
import random class Gacha(): def __init__(self): self.high_rarity_list = [ "★★★アンナ", "★★★マホ", "★★★リノ", "★★★ハツネ", "★★★イオ", "★★★サレン", "★★★ノゾミ", "★★★ニノン", "★★★アキノ", "★★★マコト", "★★★シズル", "★★★モニカ", "★★★ジータ", "★★★アリサ", "★★★ジュン" ] self.middle_rarity_list = [ "★★アカリ", "★★ミヤコ", "★★アヤネ", "★★ユキ", "★★スズナ", "★★カオリ", "★★ミミ", "★★エリコ", "★★シノブ", "★★マヒル", "★★シオリ", "★★チカ", "★★クウカ", "★★タマキ", "★★ミフユ", "★★ミツキ" ] self.low_rarity_list = [ "★ヒヨリ", "★レイ", "★ミソギ", "★クルミ", "★ヨリ", "★スズメ", "★ユカリ", "★アオイ", "★ミサキ", "★リマ" ] def get_list(self, rank): if rank == 1: return (self.low_rarity_list) elif rank == 2: return (self.middle_rarity_list) elif rank == 3: return (self.high_rarity_list) else: print ("no support") def get_rank_normal(self): #1~9回目のノーマルガチャ num = random.randint(1,100) if num <= 80: return 1 elif num >= 81 and num <= 98: return 2 else: return 3 def get_rank_special(self): #10回目のガチャ num = random.randint(1,100) if num <= 98: return 2 else: return 3 def roll_normal_gacha(self): character_list = self.get_list(self.get_rank_normal()) return random.choice(character_list) def roll_special_gacha(self): character_list = self.get_list(self.get_rank_special()) return random.choice(character_list) |
ガチャ本体のクラスとなります。
詳細説明は割愛。
続いて実際にシミュレーションするクラスです。
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 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
import Gacha import random import sys class GachaSimulation(Gacha.Gacha): def __init__(self): super().__init__() def roll_normal_gacha(self): character_list = self.get_list(self.get_rank_normal()) return random.choice(character_list) def roll_special_gacha(self): character_list = self.get_list(self.get_rank_special()) return random.choice(character_list) def is_completed(self, c_list): for key in c_list: if c_list[key] == 0: return False return True def roll_gacha_until_complete(self): #獲得したキャラを記憶しておく辞書作成 self.got_character_list = {} #初期化 for character in self.get_list(1): self.got_character_list[character] = 0 for character in self.get_list(2): self.got_character_list[character] = 0 for character in self.get_list(3): self.got_character_list[character] = 0 gacha_count = 1 while(1): #ノーマルガチャを9回 for var in range(0, 9): self.got_character_list[self.roll_normal_gacha()] += 1 #10回目のガチャを1回 self.got_character_list[self.roll_special_gacha()] += 1 if not self.is_completed(self.got_character_list): gacha_count += 1 continue break return gacha_count if __name__ == '__main__': gs = GachaSimulation() for i in range(0, 100000): completed_count = gs.roll_gacha_until_complete() print (completed_count) |
※ロジック的にそこミスってるだろ。とかあればご指摘ください。
「変数名や、関数名がイケてない。sysのimport消せ!」とか細かい指摘はやめてください。泣いちゃいますし、仕事の片手間に作ったやつなのでって言い訳もしちゃいます。
これを実行するとですが見ての通りコンプにかかった回数がズラーっとでるだけです。
近いうちLINEで気軽にシミュレーションできる仕組みを作りますのでそれができれば結構面白そう。
作ってみた感想
めちゃくちゃ金かかりますねコレw
☆3が出る確率は2%となっていますが、例えばイオをピンポイントで狙ったときの確率というのは0.13%です。
100回回せばワンチャンってくらいの確率。
これって普通に考えて出ない数字です。
つまり回し続けさせる仕組みとして作られてます。
2%を引いた後に更に15分の一(6%)を引くなんてほぼ不可能です。
冷静に考えて0.13%の景品を1回300円で引き続けるなんて正気の沙汰じゃありません。
とはいえ、外れても秘石に還元されて結果キャラを強化できるようにもなっています。
外れてもちゃんとメリットを用意しているといえばまあ良心的かもしれませんが。
まあ深くは語らないでおきましょう。(同業者として)
久しぶりにプログラムを書きましたがなかなか楽しかったです。そのうちqiita、githubにも上げたいと思います。