社内でオンライン忘年会をやりました。
そこで景品つきゲーム大会をやりまして、ゲームは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()
本年もお疲れ様でした!皆様良いお年を!
Comments