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
}