読者です 読者をやめる 読者になる 読者になる

素数大富豪の新しい楽しみ方

この記事は、素数大富豪アドベントカレンダーの19日目の記事です。

www.adventar.org



日曜数学会アドベントカレンダーと同じく、二世さんからバトンを引き継ぎました!

nisei.hatenablog.com


すごいぞー!怒涛の更新!にせいさん!

ロックなコックさん、絶対忘れないですw

そして、つじもったーさんとのバトルのレベルの高さに驚愕!!!!





さてさて。
皆さん、素数大富豪の研究がかなり進んでいらっしゃるので、私はちょっと違った切り口で書いてみようと思います。

その名も、素数大富豪の新しい楽しみ方!


目次

忘年会の幹事目線をいかんなく発揮してます。。。

なぜ、新しい楽しみ方を考えるの???

さて。素数大富豪はそれだけでもとても面白いゲームなのですが、
なぜ敢えて新しい楽しみ方を考えるのでしょう???

それは、先日アップされたこちらの記事に端を発します。



laplacerecollection.hatenablog.com

素数大富豪を今後広めていく上で

・どうやって1回目のプレーやってもらうか
・1回目で印象をよくできるか

というのが主眼となるのかもしれません。

そうなんですよね。
素数!というだけで、難しそう…という反応をされることが度々ある。
そんなとき、ほんのちょこっとだけでもハードルを下げて、親しんでもらえるような楽しみ方ができないかなぁと考えていました。

ハードルを下げるために、こんなことが重要だと考えます。

・ワンプレイの時間がごくごく低い
・難しくなさそう!
・でも楽しさを実感でき盛り上がる
素数大富豪をプレイしてみようと思わせる。

ネトゲそこそこ廃人*1の私が持つイメージとしては、
ゲームの体験版の、ワンステージだけプレイという感じでしょうか?
マリオランも、3ステージ目までは無料だし、そんな体験版を作ってみてもよいのでは??と。

そんな要素を盛り込んだ、イントロ編を考えてみました!

くじ引きに素数大富豪

ある時、忘年会の準備に追われる筆者はこう考えました。

低コスト(時間と手間)で忘年会を盛り上げられないだろうか?

→そうだ、トランプを持っていこう!
→そうだ、素数大富豪をベースに、素数くじ引きしよう!

いつの間にか片付けの時間も迫っており、焦っていた、というのもありますが。。。

お菓子を残してしまった景品用に準備していたので、
くじで当たった人に、プレゼントしよう!と考えました。

素数が出る確率も、ちょうどいい感じなのでは??


1人に2枚ずつ、約20人にトランプを配りまして、素数大富豪でやるみたいに、各桁ごとにトランプの数字を当てはめ素数を作っていただき、大きい素数の人から順に、お菓子を選んでいってもらいました。


正確な数字は忘れてしまったのですが、
およそ6人の人が景品を手にすることが出来ました。

くじ引きをするときには様々な準備をしないといけないのですが、
トランプさえあれば、当選者を決めることが出来るし、
素数の大小関係に基づいて当選者間に順位を定めることができる。

なにより、自分で作るから、考える楽しみもありますし、
景品がほしくない人は、作れないふりをすれば良いのです!!←

素数大富豪の楽しさがこんなところで応用されました!



2枚出し素数を作れるかどうか、皆さんに自然に体験してもらうことができたのです!


素数の大小関係でバトル要素も少しだけ含まれており、このあと、素数大富豪に持ち込む流れが出来ました!3枚、4枚、と増やしていけば、もっとバトル要素は増えるかも。

最初に挙げた条件、

・ワンプレイの時間がごくごく低い
・難しくなさそう!
・でも楽しさを実感でき盛り上がる
素数大富豪をプレイしてみようと思わせる。

をクリアできそうですね!



素数ビンゴ大会

先程の、くじ引きの応用で、即席素数ビンゴ大会も出来ます!
(本当はこれがやりたかったんだけどね。。。)

ビンゴをやろうとしても、準備の手間もコストもそこそこかかりますが、5×5のマスにカードに好きな素数を書いていただき、トランプをくじ引きのようにしてビンゴをすることもできます。書ける素数の上限や、一度に引くトランプの枚数を調整していけば当選の割合も調整できます。問題は、どの素数が出やすいか、割合にばらつきがあることでしょうか。これも、素数大富豪研究の楽しさにのめり込む、ひとつのきっかけになりそうです。(なるのか?)

脳トレ素数大富豪

最後に、最近の私の素数大富豪の楽しみ方として、脳トレとしての素数大富豪について書きます。個人差はあるかもしれないのですが、数学など複雑なロジックを理解したいとき、頭のなかに大きな黒板を用意して、そこに映像を投影して考えたり、論理式を思い描いたりして考えます。(あと、個人的に記憶の方法が映像優位です。)

そこで、頭の中の画像を使った情報処理の能力を鍛えたいなぁと常々思っていました。つまり、何がしたいかというと、

より沢山のトランプを頭のなかで操作できるよう鍛えれば、脳トレになるんじゃないか、ということ。

大体、子供の頃から妄想癖があったので、こういうのすごい好き。



今のところ、こんな手順を考えています。

1. 頭のなかにトランプを一組用意します。
2. 何人プレイをするか決めます。(最初は1人から。)
3. 最初何枚ずつ配るか決めます。
4. 素数大富豪を頭のなかでプレイします。ただし山札からは自由に選べるとします。
5. 出したカードと山札を覚えていられなくて死にます。
6. 次はもっと長い間プレイできるようになろう!と誓います。
7. 1に戻る。



ここで、いきなり52枚+ジョーカーでプレイするのはなかなか厳しいので、
トランプの数の上限を引き下げるというような工夫も良さそうです。

新たな問題提起

素数くじについて


一体何枚ずつ配れば、いい感じに当選者の割合を調整出来るのでしょうか?
素数が出たにもかかわらず景品を手にすることが出来なかったら、悲しいです。
(それでも素数には出会えるので、素数大富豪の楽しさはこんなとk(以下略。)

まず、近藤さんが、はっぴーぷらいむだいふごうの日に、こんな計算をしてくれました。

なるへそへそ。
カードを引く人数は1人で計算しているのかな??ここでさらに考えた問題。

Q: 簡単のため、ジョーカーは抜くこととする。
52枚のトランプを n 人で m 枚ずつ配り、素数になる人数の割合を求めよ。

今回はm=1の場合について計算し、素数になる期待値とある人が素数になる割合を計算しました。m≧2の場合についても引き続き計算したいです。



素数ビンゴ大会について


ここから、いくつかの問題を考えることができると思います。

Q: 52枚のトランプから n 枚のカードを引いたときに、各素数が出る確率を求めよ。
素数に対し、出し方が何通りあるかリストアップすればできそうですね。

Q: ビンゴカードに書ける素数の上限を N とし、一度に引くトランプの枚数を n 枚としたときに、最も当選確率が公平になる n は?逆に、(N, n) が与えられたとき、どのようにビンゴカードを記入すれば当選確率が最大化できるか?

当選の公平性はどう定義したらよいか、など、いろんな事が考えられそうです。。

脳トレ素数大富豪


Q: トランプ1セット、1枚につき1回ずつ出して、全て出し尽くせるような出し方はあるか?

色んな問題があるのですが、ちょっと計算間に合いませんでした。。。涙

今後いくつかアップしていきたいと思います!


おまけ

素数くじについての問題で、m=1の場合の計算をする際、組み合わせ生成の高速アルゴリズムを見つけたので、下記に記載してみます。といっても全然大したことないもので、最初に組み合わせの数をざっと計算して配列に格納し、適宜 n, r を指定して値を取り出すだけという。(結果は面白くないですが。。。)


# -*-coding:utf-8-*-

import itertools
import math


#### 順列 nPr の計算

def permutations_mine(n, r):
    ans = math.factorial(n)/math.factorial(n-r)
    return ans

#### トランプの枚数は52枚とする
#### 記号が異なるカードは区別するものとする

TRUMP = 53


#### nPr の計算結果を格納する配列
permutation_library = range(TRUMP*TRUMP)
for i in range(0,TRUMP*TRUMP):
    permutation_library[i] = 0

for n in range(TRUMP):
    for r in range(n+1):
        permutation_library[r+n*TRUMP] = permutations_mine(n,r)

#### nCr の計算結果を格納する配列

combination_library = range(TRUMP*TRUMP)

for i in range(0,TRUMP*TRUMP):
    combination_library[i] = 0

for n in range(0,TRUMP):
    combination_library[0+n*TRUMP] = 1
    combination_library[n+n*TRUMP] = 1

#### パスカルの三角形を利用し、nCr= (n-1)C(r-1) +(n-1)Cr を計算

for n in range(2,TRUMP):
    for i in range(1,n):
        combination_library[i+n*TRUMP] = combination_library[i-1+(n-1)*TRUMP]+ combination_library[i+(n-1)*TRUMP]


#### nPr, nCrの計算結果を表示

for n in range(0,TRUMP):
    for r in range(0,TRUMP):
        print permutation_library[r+n*TRUMP],
    print ("\n")

for n in range(0,TRUMP):
    for r in range(0,TRUMP):
        print permutation_library[r+n*TRUMP],
    print ("\n")



# 1枚ずつ配ったときに素数がでる確率を計算
# 配る人数、素数がでる人数の期待値、一人が素数を出す確率を表示

for n in range(1, TRUMP):
    sum = 0
    base = permutation_library[n+TRUMP*(TRUMP-1)]
    for i in range(1,n+1):
        sum = sum + i * combination_library[TRUMP*n+i] * permutation_library[i+6*4*TRUMP]* permutation_library[(n-i)+7*4*TRUMP]
    expect = sum/float(base)
    print (n, expect, expect/n)

明日は、もっちょさんによるmathpower決勝戦についてです!楽しみです!^^

*1:先日、しばらく触らないうちにブラウザ三国志のデータが全部消えていたのに多大なるショックを受けました。。。あんなにやりこんだのに…。。。新人ランキング1位取ったこともあるのに。。。張飛よ…。周瑜よ…。。。