Crazy Python solution – 79 characters
max([b[x] for x in range(9) for y in range(x) for z in range(y)
if x+y+z==12 and b[x]==b[y]==b[z]] + [0])
However, this assumes a different order for the board positions in b:
5 | 0 | 7
---+---+---
6 | 4 | 2
---+---+---
1 | 8 | 3
That is, b[5]
represents the top-left corner, and so on.
To minimize the above:
r=range
max([b[x]for x in r(9)for y in r(x)for z in r(y)if x+y+z==12and b[x]==b[y]==b[z]]+[0])
93 characters and a newline.
Update: Down to 79 characters and a newline using the bitwise AND trick:
r=range
max([b[x]&b[y]&b[z]for x in r(9)for y in r(x)for z in r(y)if x+y+z==12])