I'm not happy with repeating myself (horizontal/vertical, and the diagonals), but I think it's a fair start.
C# w/LINQ:
public static int GetVictor(int[] b)
{
var r = Enumerable.Range(0, 3);
return r.Select(i => r.Aggregate(3, (s, j) => s & b[i * 3 + j])).Concat(
r.Select(i => r.Aggregate(3, (s, j) => s & b[j * 3 + i]))).Aggregate(
r.Aggregate(3, (s, i) => s & b[i * 3 + i]) | r.Aggregate(3, (s, i) => s & b[i * 3 + (2 - i)]),
(s, i) => s | i);
}
Strategy: Bitwise AND
each element of a row/column/diagonal with the other elements (with 3 as a seed) to obtain a victor for that subset, and OR
them all together at the end.