松本人志のドキュメンタルは参加者10名にとってプラスサムゲームである
〜ルールの要点〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
最初に参加者10名がひとりあたり100万円をプールに貯める→プール:1,000万円
松本人志が100万円をプールに貯める→プール:1,100万円
参加者10名の中の勝者1名にプールの金額(1,100万円)が全て支払われる
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
1回のゲーム終了時点での各々の収支は、
勝者(1名):+1,000万円
敗者(9名):-100万円
松本人志:-100万円
となる。
参加者の勝率は均一と仮定して、
同じ参加者でドキュメンタルを1万回開催した場合の
収支をシミュレートした。
結果、参加者の収支は全員プラスとなり、
松本人志は1万*100万円の赤字となった。
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 |
import java.util.*; public class Main { public static void main(String[] args) throws Exception { var d = new Documental(); d.run(); } } class P { public static void p(Object o){ System.out.println(o); } public static void p(Object[] o){ int i = 0; for(Object e : o){ p("[" + i + "] => " + e); i++; } } public static void p(int[] o){ int i = 0; for(int e : o){ p("[" + i + "] => " + e); i++; } } } /* 10人が1pずつ+主催者が1pの合計11pを奪い合う。平均化の統計 */ class Documental { public Random random = new Random(); public void resetArray(int[] a){ int len = a.length; for(int i=0; i<len; i++){ a[i] = 0; } } public void round(int[] fighters){ // 参加人数 int len = fighters.length; // 賞金額 int reward = len + 1; // 参加費を払う for(int i=0; i<len; i++){ fighters[i]--; } // 勝者を決定する int winnerId = random.nextInt(10); // 賞金獲得 fighters[winnerId] += reward; } public void run(){ // 参加者 => 獲得ポイント var fighters = new int[10]; resetArray(fighters); // 開催回数 int times = 10000; // 戦う for(int i=0; i<times; i++){ round(fighters); } // 単位の注釈 P.p("単位 : [100万円]"); // 結果発表 P.p(fighters); // 獲得賞金の合計 dispSum(fighters); } public void dispSum(int[] fighters){ int sum = 0; for(int e : fighters){ sum += e; } P.p("sum : " + sum); } } |
1 2 3 4 5 6 7 8 9 10 11 12 |
単位 : [100万円] [0] => 659 [1] => 1627 [2] => 659 [3] => 978 [4] => 1726 [5] => 978 [6] => 637 [7] => 1011 [8] => 1000 [9] => 725 sum : 10000 |