Detectar um polinômio simétrico [fechado]

8

Um polinômio simétrico é um polinômio que é inalterado sob a permutação de suas variáveis.

Em outras palavras, um polinômio f(x,y)é simétrico se e somente se f(x,y) = f(y,x); um polinômio g(x,y,z)é simétrico iff g(x,y,z) = g(x,z,y) = g(y,x,z) = etc.

Por exemplo, x^2+2xy+y^2, xye x^3+x^2y+xy^2+y^3são polinômios simétricos, onde 2x+ye x^2+ynão são.


O desafio

Você receberá um polinômio e seu programa deve gerar valores de verdade / falsidade, dependendo se o polinômio fornecido for um polinômio simétrico.

O formato de entrada é permitido de duas maneiras. Uma string e uma matriz, como ["x^2","2xy","y^2"], em que o polinômio é a soma de cada elemento.


Exemplo

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

Especificações

A operação tem pedidos, assim como na matemática normal. a ordem é assim:

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

aplicam regras de .

Todos os caracteres do alfabeto ( a~z) são aceitos como variáveis, tudo o resto são números.

O polinômio fornecido terá 2 ou mais variáveis.

A multiplicação não requer o operador *, você só precisa detectar a justaposição. (a detecção por justaposição não é necessária, use a opção melhor)

Matthew Roh
fonte
Uma função é uma entrada válida?
Pavel
2
Especifique as entradas permitidas exatamente e inclua casos de teste que cubram bem o espaço.
Xnor
2
Não acho justo pedir a alguém que gaste algum tempo escrevendo uma resposta e você decide se é válido. Então, eu concordo com o @xnor. Você também indicou, () => ^ => */ => +-mas seus exemplos não mostram tudo isso. Eu teria imaginado que poderíamos esperar, -mas não /. Como você mencionou, ()devemos lidar com o formato (-1+x)(-y-3)?
Level River St
2
Isso ainda não está claro. Polinômios de grau arbitrário podem ser multiplicados? Podem ser feitas operações para expoentes? Onde os sinais de menos podem aparecer?
Xnor
1
" O formato de entrada é permitido de duas maneiras ", mas eles apresentam dois desafios muito diferentes, e grande parte da seção "spec" é irrelevante se o segundo for escolhido.
Peter Taylor

Respostas:

5

Máximos, 40 bytes

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

Experimente Online!

Uma função que recebe um polinômio como entrada e retorna true se for simétrica; caso contrário, retorna false

rahnema1
fonte
8

Mathematica, 43 bytes

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

Função sem nome, tendo como entrada um polinômio no formato fornecido (exceto que as variáveis ​​justapostas devem ser separadas por um espaço) e retornando Trueou False. Variables@#detecta as variáveis ​​que aparecem na entrada (e, portanto, a entrada pode conter todos os tipos de nomes de variáveis ​​estranhos, não apenas letras únicas). SymmetricReductionretorna um par ordenado de polinômios, onde o primeiro é simétrico e as duas somam ao polinômio original; portanto, podemos detectar se a entrada é simétrica, verificando se o segundo polinômio é idêntico 0.

Greg Martin
fonte
De acordo com o OP, você considera a entrada como uma função, o que pode permitir que você jogue mais.
Pavel
1

TI-Basic, 46 bytes

Basicamente, como isso funciona é o polinômio é inserido em um tipo de variável (dois bytes) que é avaliado dinamicamente. Em seguida, trocamos os valores X e Y vezes suficientes para ver se a função é 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
fonte
Eu sei que a especificação é instável, então: este programa recebe entrada como uma string, funciona com justaposição ou com o *operador e gera saídas 1para true e 0false.
Timtech
Claro, isso deve ser suficiente para detectar um.
Matthew Roh