top of page
執筆者の写真tomohisa kumagai

忘年会でゲーム

社内でオンライン忘年会をやりました。

そこで景品つきゲーム大会をやりまして、ゲームはJupyter Noteで作りました。


【ルール】

  • プレイヤーそれぞれ好きな数字[0-20]を決めてもらい、スクリプトをポチっと実行、これが1回戦。

  • 数字に応じて点数が決まり、加算される。5回戦で終了。

  • 1回戦、3回戦、5回戦終了時に中間結果が見られる。

  • はじめにファクターbが決まり(終了まで誰も分からない)、プレイヤーの選んだ数字がbに近いほど、概ね点が高くなる。(概ねというのは、ランダムに倍率aが変わるので。)が、bにピタリ一致してしまうと、大幅減点。


#初期化と乱数でb設定
import random

b = int(random.random() * 20)

def calc(x):
    
    a = random.normalvariate(0.0,0.5) + 1.0
    
    if int(x) == int(b):
        return -1000
    else:
        return int(a * abs(20 /(x - b) )**2 )

score_playerA = [0]
score_playerB = [0]
i = 0

以下のXX, YYを都度変更して5回実行

#好きな数字を入れて5回繰り返す
x_playerA = XX
x_playerB = YY

i += 1
score_playerA.append(calc(x_playerA) + score_playerA[i-1])
score_playerB.append(calc(x_playerB) + score_playerB[i-1])



if i == 1 or i == 3 or i == 5:
    print("turn#", i)
    print("score_playerA", score_playerA[i])
    print("score_playerB", score_playerB[i])

elif i == 2 or i == 4:
    print("turn#", i, ", result is hidden")
    
if i == 5:
    if score_playerA > score_playerB: print("A win!")
    elif score_playerA < score_playerB: print("B win!")

楽しみながら、

  • 情報を更新しながらBを推定(ベイズ推定)

  • ノイズのある結果に対するダイナミックなサンプリング

に思いを馳せることを強いられるという、教育的配慮に溢れたゲームになっております。(←大きなお世話)


結果のトラッキング用スクリプト

import matplotlib.pyplot as plt

plt.plot(score_playerA, label="playerA")
plt.plot(score_playerB, label="playerB")
plt.legend(loc='upper left')
plt.show()

答え合わせ(入力に対する点数の確認)スクリプト

import numpy as np
import matplotlib.pyplot as plt
x = np.arange(20)
score = np.zeros(20)

for ix in range(20):
    score[ix] = calc(x[ix])

plt.plot(x, score)
plt.show()


本年もお疲れ様でした!皆様良いお年を!

閲覧数:70回

最新記事

すべて表示

Comments


bottom of page