###### tags: `math` # 賓果遊戲3x3試算 ## 數據展示 total|pick|0|1|2|3|4|5|6|7|8 ---:|---:|---:|---:|---:|---:|---:|---:|---:|---:|---: 20|5|931187|67302|1511|0|0|0|0|0|0 20|6|868147|124010|7440|403|0|0|0|0|0 20|7|781775|193129|22356|2569|144|27|0|0|0 20|8|677855|263041|49298|8479|1070|221|36|0|0 20|9|560629|322959|89549|21662|4047|889|260|0|5 20|10|439795|359678|140857|44527|11001|2904|1185|0|53 20|11|323270|365320|195387|79248|24514|7902|3994|0|365 20|12|219171|339432|241007|123924|46707|17826|10640|0|1293 20|13|134930|281371|267466|175100|77581|35576|23772|0|4204 20|14|72057|207163|261252|221177|114277|64644|47596|0|11834 20|15|32372|128163|220155|248787|149139|105674|85938|0|29772 20|16|10435|60981|154599|241117|170006|158683|136123|0|68056 20|17|1835|17651|78565|187771|163860|211855|193137|0|145326 20|18|0|0|21272|94591|121087|242430|230687|0|289933 20|19|0|0|0|0|50293|199437|200228|0|550042 ## 結果整理 https://docs.google.com/spreadsheets/d/1GCMojdSZY6IZ0aq-tsuZlTfPPw8wVYN4xCPuAJG_m4I/edit?usp=sharing ## 程式碼實現 ```go package main import ( "fmt" "math/rand" "time" ) func main() { rand.Seed(time.Now().UnixNano()) measure_time := 100 * 10000 for n := 9; n <= 20; n++ { for m := 5; m < n; m++ { statmap := map[int]int{} for i := 0; i < measure_time; i++ { statmap[round3x3(n, m)]++ } fmt.Printf("%v,%v,%v\n", n, m, statmap) } } } func round5x5(n, m int) int { bingoTable := newTable(n, 25) checkTable := make([]bool, 25) remaining := genNArr(n) rand.Shuffle(len(remaining), func(i, j int) { remaining[i], remaining[j] = remaining[j], remaining[i] }) for i := 0; i < m; i++ { lucky := remaining[i] for b := 0; b < len(bingoTable); b++ { if bingoTable[b] == lucky { checkTable[b] = true break } } } line := 0 for i := 0; i < len(lineTable5x5); i++ { if checkTable[lineTable5x5[i][0]] && checkTable[lineTable5x5[i][1]] && checkTable[lineTable5x5[i][2]] && checkTable[lineTable5x5[i][3]] && checkTable[lineTable5x5[i][4]] { line++ } } return line } func round3x3(n, m int) int { bingoTable := newTable(n, 9) checkTable := make([]bool, 9) remaining := genNArr(n) rand.Shuffle(len(remaining), func(i, j int) { remaining[i], remaining[j] = remaining[j], remaining[i] }) for i := 0; i < m; i++ { lucky := remaining[i] for b := 0; b < len(bingoTable); b++ { if bingoTable[b] == lucky { checkTable[b] = true } } } line := 0 for i := 0; i < len(lineTable3x3); i++ { if checkTable[lineTable3x3[i][0]] && checkTable[lineTable3x3[i][1]] && checkTable[lineTable3x3[i][2]] { line++ } } return line } func newTable(n, m int) []int { all := genNArr(n) rand.Shuffle(len(all), func(i, j int) { all[i], all[j] = all[j], all[i] }) return all[:m] } func genNArr(n int) []int { all := []int{} for i := 1; i <= n; i++ { all = append(all, i) } return all } var lineTable3x3 = [][]int{ {0, 1, 2}, {3, 4, 5}, {6, 7, 8}, {0, 3, 6}, {1, 4, 7}, {2, 5, 8}, {0, 4, 8}, {2, 4, 6}, } var lineTable5x5 = [][]int{ {0, 1, 2, 3, 4}, {5, 6, 7, 8, 9}, {10, 11, 12, 13, 14}, {15, 16, 17, 18, 19}, {20, 21, 22, 23, 24}, {0, 5, 10, 15, 20}, {1, 6, 11, 16, 21}, {2, 7, 12, 17, 22}, {3, 8, 13, 18, 22}, {4, 9, 14, 19, 24}, {0, 6, 12, 18, 24}, {4, 8, 12, 16, 20}, } ``` ## 參考來源 https://gist.github.com/jimmyliao11/6bbb5276fc8f40f31d880b9c16a84782?fbclid=IwAR1LO_yzvihoXcww0m6Q9Mf6XNo4SPQTWHpnjhiu34EJqDGmTVNE0XoYuzs