以APL模擬大話骰

上星期同幾個朋友去酒吧玩樂,興之所至玩起經典遊戲“大話骰”來。玩家總共有五人,其中一個朋友起手便叫“七個二”,雖則一點可以用作“百搭”,但酒後的直覺告訴我“七個二”應該是很進取的開局。於是我便要求開了。

結果我輸了。

事後我決定找出五人大話骰中“七個二”的概率,但我的所有概率知識都已經還給老師了,怎麼辦?

想了一會,用電腦模擬擲骰好了,省力不費時。用甚麼語言?除了APL,不作他選。

每局開始,5個人分別擲5粒骰,即係產生25個1至6的亂數:


每次模擬一局未免太沒有效率,但為了方便示範,暫時模擬五局好了:


二維陣列裝載擲骰結果,每一“橫行”代表一局。先用變數D暫存結果,方便核對。

現在數算每局中有多少個一(“百搭”)或二點:


由於只模擬了五局,用人眼便可以印證以上結果正確。

那麼五局之中,有多少局出現等於、多於七個二?


所有結果都有多於、等於“七個二”。或者係運氣使然,所以才會完敗?按簡單機率理論,增加試驗次數 (trial) 應該會使結果趨向期望值 (expected value)。只要將變數D替換成很多局的結果便可以:


試驗一萬及十萬次,多於、等於“七個二”的概率分別得出78.47%和77.946%。

難怪我會壯烈犧牲。

留言

這個網誌中的熱門文章

Project Euler第八題

APL Code Golfing