Detectar un polinomio simétrico [cerrado]

8

Un polinomio simétrico es un polinomio que no cambia bajo la permutación de sus variables.

En otras palabras, un polinomio f(x,y)es simétrico si y solo si f(x,y) = f(y,x); un polinomio g(x,y,z)es simétrico iff g(x,y,z) = g(x,z,y) = g(y,x,z) = etc.

Por ejemplo, x^2+2xy+y^2, xyy x^3+x^2y+xy^2+y^3son polinomios simétricos, en los que 2x+yy x^2+yno lo son.


El reto

Se le dará un polinomio, y su programa debería generar valores de verdad / falsedad, dependiendo de si el polinomio dado es un polinomio simétrico.

El formato de entrada está permitido de dos maneras. Una cadena y una matriz, como ["x^2","2xy","y^2"], donde el polinomio es la suma de cada elemento.


Ejemplo

x^2+2xy+y^2 => true
xy => true
xy+yz+xz-3xyz => true
(x+y)(x-y) => false
2x+y => false
x^2+y => false
x+2y+3 => false

Especificaciones

La operación tiene órdenes, al igual que en las matemáticas normales. el orden es así:

() => ^ => * => +-

aplican las reglas del .

Todos los caracteres del alfabeto ( a~z) se aceptan como variables, todo lo demás son números.

El polinomio dado tendrá 2 o más variables.

La multiplicación no requiere el operador *, solo necesita detectar la yuxtaposición. (no es necesario detectar por yuxtaposición, use la mejor opción)

Matthew Roh
fuente
¿Es una función una entrada válida?
Pavel
2
Especifique exactamente las entradas permitidas e incluya casos de prueba que cubran bien el espacio.
xnor
2
No creo que sea justo pedirle a alguien que pase tiempo escribiendo una respuesta y luego tú decides si es válida. Así que estoy de acuerdo con @xnor. También indicó () => ^ => */ => +-pero sus ejemplos no muestran todos estos. Me hubiera imaginado que podríamos esperar -pero no /. Como ha mencionado, ()¿se espera que lo manejemos en el formato (-1+x)(-y-3)?
Level River St
2
Esto aún no está claro. ¿Se pueden multiplicar polinomios de grado arbitrario? ¿Se pueden realizar operaciones a exponentes? ¿Dónde pueden aparecer los signos menos?
xnor
1
" El formato de entrada está permitido de dos maneras ", pero presentan dos desafíos muy diferentes, y gran parte de la sección "especificaciones" es irrelevante si se elige el segundo.
Peter Taylor

Respuestas:

5

Máximo, 40 bytes

f(p):=listp(tpartpol(p,showratvars(p)));

¡Pruébelo en línea!

Una función que toma un polinomio como entrada y devuelve verdadero si es simétrico; de lo contrario, devuelve falso

rahnema1
fuente
8

Mathematica, 43 bytes

Last@SymmetricReduction[#,Variables@#]===0&

Función sin nombre que toma como entrada un polinomio en el formato dado (excepto que las variables yuxtapuestas deben estar separadas por un espacio) y devuelve Trueo False. Variables@#detecta las variables que aparecen en la entrada (y, por lo tanto, la entrada puede contener todo tipo de nombres de variables extraños, no solo letras simples). SymmetricReductiondevuelve un par ordenado de polinomios, donde el primero es simétrico y los dos suman al polinomio original; por lo tanto, podemos detectar si la entrada es simétrica al ver si el segundo polinomio es idéntico 0.

Greg Martin
fuente
De acuerdo con OP, usted toma la entrada como una función, lo que podría permitirle jugar más al golf.
Pavel
1

TI-Basic, 46 bytes

Básicamente, cómo funciona esto es que el polinomio se ingresa en un tipo de variable (dos bytes) que se evalúa dinámicamente. Luego, intercambiamos los valores X e Y suficientes veces para ver si la función es simétrica.

Prompt u
For(I,0,8
rand->X
Ans->W
rand->Y
u->Z
Y->X
W->Y
If u=W
End
Ans=9
Timtech
fuente
Sé que la especificación es inestable, por lo tanto: este programa toma la entrada como una cadena, funciona con yuxtaposición o con el *operador, y produce salidas 1para verdadero y 0falso.
Timtech
Claro, eso debería ser suficiente para detectar uno.
Matthew Roh