3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

デレマスの新グッズが本当に3兆通りあるのか計算してみた

Posted at

組み合わせ3兆通りとされる新グッズが発表された。

告示画像の右下に大石泉が居ますね。大石泉すき。

今回は、本当に3兆通りあるのか、計算してみた。

仕様の確認

デレステ10thツアー千秋楽 開催記念グッズ販売 | ASOBI STORE

このページによれば、このカスタムアクリルスタンドとして、以下の製品が販売されるようである。

  • 台座 5種類 (1~5人用)
  • 背景 15種類
  • アイドル 190種類
  • アイドル190種セット (上の15種類とは別の背景1種類入り)

この中から、以下の数を選んで組み合わせる。

  • 台座 1種類
  • 背景 1種類
  • アイドル 台座の種類に合った数 (1~5種類)

アイドルの重複を許さない場合

ゲーム『アイドルマスター シンデレラガールズ スターライトステージ』のLIVEでは、同じアイドルを複数編成してLIVEを行うと2人目以降は別のアイドルに置き換えて表示され、同じアイドルを複数人MVに登場させることはできない。
そこで、今回のグッズの組み合わせを考える際も、まずは同じアイドルは1箇所にしか使えないとして計算を行ってみる。

このとき、1人目に選んだアイドルは2人目以降には使えず、2人目に選んだアイドルは3人目以降には使えず…というように、アイドルを選ぶたびに選択肢が減っていく。
これを、掛ける数からの減算で表現する。

整数の上限を意識せずに計算できる Python を用いて、計算を行うプログラムを実装した。

num_idols = 190
num_backgrounds = 15 + 1
stages = [1, 2, 3, 4, 5]

idol_putterns = 0
for stage in stages:
    delta = 1
    for i in range(stage):
        delta *= num_idols - i
    print("%d-idol stage: %d putterns" % (stage, delta))
    idol_putterns += delta

print("total idol putterns: %d" % idol_putterns)
print("total putterns: %d" % (idol_putterns * num_backgrounds))

これを実行すると、以下の結果が得られた。

1-idol stage: 190 putterns
2-idol stage: 35910 putterns
3-idol stage: 6751080 putterns
4-idol stage: 1262451960 putterns
5-idol stage: 234816064560 putterns
total idol putterns: 236085303700
total putterns: 3777364859200

すなわち、アイドルだけ (背景を考えない) では、以下のパターン数がある。(切り捨て)

アイドル数 パターン数
1人 190通り
2人 3.5万通り
3人 675.1万通り
4人 12.6億通り
5人 2348.1億通り
2360.8億通り

この「2360.8億通り」に背景の数 (16種類) を掛けると、全部で約3.7兆通りとなった。

これは、紹介にあった「組み合わせ3兆通り」というのとだいたい合致する数値である。

アイドルの重複を許す場合

ゲームでは同じアイドルを複数人MVに登場させることはできないが、グッズではそのような制限はない。
むしろ、同じアイドルばかりを並べることもできるというのはグッズならではの特徴といえるだろう。

そこで、同じアイドルを何人配置してもよい場合のパターン数も計算してみた。
このときは、アイドルを選んでも選択肢が減らないため、単純な累乗で計算できる。

num_idols = 190
num_backgrounds = 15 + 1
stages = [1, 2, 3, 4, 5]

idol_putterns = 0
for stage in stages:
    delta = num_idols ** stage
    print("%d-idol stage: %d putterns" % (stage, delta))
    idol_putterns += delta

print("total idol putterns: %d" % idol_putterns)
print("total putterns: %d" % (idol_putterns * num_backgrounds))

これを実行すると、以下の結果が得られた。

1-idol stage: 190 putterns
2-idol stage: 36100 putterns
3-idol stage: 6859000 putterns
4-idol stage: 1303210000 putterns
5-idol stage: 247609900000 putterns
total idol putterns: 248920005290
total putterns: 3982720084640

アイドルと背景の全パターン数は、約3.9兆通りとなった。

アイドルの重複を許しても、「組み合わせ3兆通り」といえそうである。

「組み合わせ」を考えてみる

これまで、同じアイドルの集合を選んでいても、配置する順番が異なれば違うパターンとして数えていた。
これは数学的には順列であり、組み合わせはアイドルの集合が同じであれば同じパターンとして数えるはずである。
というわけで、きちんと組み合わせの数を考えてみる。

アイドルの重複を許さない場合

同じアイドルは1体までしか選ばない場合の組み合わせの数は、順列の数を並べ方の数で割った数である。
並べ方の数は、アイドルの数の階乗である。

num_idols = 190
num_backgrounds = 15 + 1
stages = [1, 2, 3, 4, 5]

idol_putterns = 0
for stage in stages:
    delta = 1
    divider = 1
    for i in range(stage):
        delta *= num_idols - i
        divider *= i + 1
    delta //= divider
    print("%d-idol stage: %d putterns" % (stage, delta))
    idol_putterns += delta

print("total idol putterns: %d" % idol_putterns)
print("total putterns: %d" % (idol_putterns * num_backgrounds))

これを実行すると、以下の結果が得られた。

1-idol stage: 190 putterns
2-idol stage: 17955 putterns
3-idol stage: 1125180 putterns
4-idol stage: 52602165 putterns
5-idol stage: 1956800538 putterns
total idol putterns: 2010546028
total putterns: 32168736448

全パターン数は、約321.6億通りとなった。

アイドルの重複を許す場合

同じアイドルを何体でも選んでいい場合は、「それぞれのアイドルを (0体も含め) 何体選ぶか」すなわち「各アイドルを表す箱に、選ぶことを表すボールを何個入れるか」を考えることでパターン数を求めることができる。
たとえば、5種類のアイドルから3体選ぶ場合、箱の区切り「|」4個 (アイドルの種類数-1) とボール「○」3個 (選ぶ人数) の並べ方 (順列) の数を考えることで、このパターン数を求めることができる。
この並べ方の数は、「全アイテム (区切りとボール) の中で、ボールを置く位置の組み合わせの数」として求めることができる。

num_idols = 190
num_backgrounds = 15 + 1
stages = [1, 2, 3, 4, 5]

idol_putterns = 0
for stage in stages:
    delta = 1
    divider = 1
    for i in range(stage):
        delta *= num_idols - 1 + stage - i
        divider *= i + 1
    delta //= divider
    print("%d-idol stage: %d putterns" % (stage, delta))
    idol_putterns += delta

print("total idol putterns: %d" % idol_putterns)
print("total putterns: %d" % (idol_putterns * num_backgrounds))

これを実行すると、以下の結果が得られた。

1-idol stage: 190 putterns
2-idol stage: 18145 putterns
3-idol stage: 1161280 putterns
4-idol stage: 56031760 putterns
5-idol stage: 2174032288 putterns
total idol putterns: 2231243663
total putterns: 35699898608

全パターン数は、約356.9億通りとなった。

結論

アイドルの選び方と並べ方 (順列) に背景を組み合わせたパターン数は、ポストの主張通り切り捨てて3兆通りとなった。

アイドルと背景の (並べ方を考慮しない) 組み合わせの数は、切り捨てて300億通りとなった。

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?