package minicactpot // import "core:fmt" Valid_Numbers :: bit_set[1 ..= 9] prizes := [?]int { 0, 0, 0, 0, 0, 0, 10000, 36, 720, 360, 80, 252, 108, 72, 54, 180, 72, 180, 119, 36, 306, 1080, 144, 1800, 3600, } choice_pattens := [?][3]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}} solve :: proc(board: []int) -> [3]int { unused: Valid_Numbers = {1, 2, 3, 4, 5, 6, 7, 8, 9} for i in board { unused -= {i} } highest_weight: f32 winning_pattern: [3]int for pattern in choice_pattens { min, max: int num_empty: int for i in pattern { if board[i] == 0 { num_empty += 1 continue } min += board[i] max += board[i] } if num_empty > 0 { i: int for b in i ..= 9 { if b in unused { min += b i += 1 if i == num_empty { break } } } i = 0 for b in i ..= 9 { check := 10 - b if check in unused { max += check i += 1 if i == num_empty { break } } } } num_combinations := num_empty * card(unused) if num_empty > 0 else 1 high_win := prizes[max] if prizes[max] > prizes[min] else prizes[min] weight := f32(high_win) / f32(num_combinations) / f32(num_empty if num_empty > 0 else 1) if weight > highest_weight { highest_weight = weight winning_pattern = pattern } } return winning_pattern }