Seguro, aquí hay una manera de hacerlo con lineal álgebra de primitivas. Definir vectores columna $e_1=(1,0,0)^T$, $e_2=(0,1,0)^T$, $e_3=(0,0,1)^T$, y un vector de fila $a=(1,1,1)$.
- Usted puede detectar si una fila o columna de $S$ es un ganador de la prueba de $a S e_i$$a S^T e_i$$\pm 3$. (Ejercicio: expresión Que detecta ganar filas y que detecta la ganancia de columnas?)
- Usted puede detectar si la diagonal principal es un ganador de la prueba de la traza de $S$.
- Por último, vamos a $R$ ser la matriz que permutes filas $1$$3$; a continuación, puede detectar si la otra diagonal es un ganador de la prueba de la traza de $RS$.
Con el fin de combinar todos los ocho pruebas en una sola expresión, tendrás que especificar lo que desea hacer en caso de una sobre-determinado de la matriz. Por ejemplo, si una fila se muestra una victoria para $+$ y otra fila muestra un triunfo para $-$, ¿cuál es el comportamiento deseado?
Edit: Bueno, suponiendo que sólo válida de la junta de los estados, no es demasiado duro. Vamos a introducir un poco de notación. Definir un poco arbitrario de la función
$$
\max^*(a,b)=\begin{cases}
a& \text{if } |a| \geq |b|\\
b& \text{otherwise }
\end{casos}
$$
A continuación, $\max^*$ es una operación asociativa, por lo que podemos extender de forma iterativa a cualquier número de argumentos, y el ganador del juego es
$$w(S)=\left\lfloor\frac13\max^*\left(\max^*_i(a S e_i), \max^*_i(a S^T e_i), \mathrm{tr}(S),\mathrm{tr}(RS)\right)\right\rceil$$
donde $\lfloor x\rceil$ es la ronda-hacia-la función cero, de modo que $w(S)=0$ significa que nadie gana.
(Si $S$ es un estado no válido en el que ambos jugadores "ganar", $w(S)$ escogerá el ganador del primer premio, de acuerdo con el orden de las expresiones probado.)
Edit 2: he Aquí un enfoque teórico que técnicamente sólo utiliza la multiplicación de la matriz en $S$... pero entonces cambia todo el trabajo por un escalar.
Deje $a=(1,3,3^2)$$b=(1,3^3, 3^6)^T=(1,27,729)^T$. A continuación, $aSb$ es un número entero que codifica $S$, y tiene valor absoluto $\leq (3^9-1)/2=9841$. De modo que existe un polinomio $p$ grado $\leq 3^9=19683$ tal que $w(S)=p(aSb)$.
De hecho, podemos elegir el que incluso los coeficientes de $p$ a cero. El extraño coeficientes son un poco más difíciles de calcular. :)