Erkennen Sie ein symmetrisches Polynom [geschlossen]

8

Ein symmetrisches Polynom ist ein Polynom, das unter Permutation seiner Variablen unverändert bleibt.

Mit anderen Worten, ein Polynom f(x,y)ist genau dann symmetrisch, wenn f(x,y) = f(y,x); ein Polynom g(x,y,z)ist symmetrisch iff g(x,y,z) = g(x,z,y) = g(y,x,z) = etc.

Zum Beispiel x^2+2xy+y^2, xyund x^3+x^2y+xy^2+y^3sind symmetrische Polynome, wo 2x+yund x^2+ynicht sind.


Die Herausforderung

Sie erhalten ein Polynom, und Ihr Programm sollte Wahrheits- / Falschwerte ausgeben, je nachdem, ob das angegebene Polynom ein symmetrisches Polynom ist.

Das Eingabeformat ist auf zwei Arten zulässig. Eine Zeichenfolge und ein Array wie ["x^2","2xy","y^2"], wobei das Polynom die Summe der einzelnen Elemente ist.


Beispiel

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

Technische Daten

Die Operation hat Befehle, genau wie in der normalen Mathematik. Die Reihenfolge ist wie folgt:

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

Regeln.

Alle Zeichen im Alphabet ( a~z) werden als Variablen akzeptiert, alles andere sind Zahlen.

Das gegebene Polynom hat 2 oder mehr Variablen.

Für die Multiplikation ist der Operator * nicht erforderlich. Sie müssen nur die Nebeneinanderstellung erkennen. (Erkennung durch Nebeneinander ist nicht erforderlich, verwenden Sie die bessere Option)

Matthew Roh
quelle
Ist eine Funktion eine gültige Eingabe?
Pavel
2
Bitte geben Sie die zulässigen Eingaben genau an und fügen Sie Testfälle hinzu, die den Raum gut abdecken.
xnor
2
Ich denke nicht, dass es fair ist, jemanden zu bitten, Zeit damit zu verbringen, eine Antwort zu schreiben, und dann entscheiden Sie, ob sie gültig ist. Also stimme ich @xnor zu. Auch Sie haben angegeben, () => ^ => */ => +-aber Ihre Beispiele zeigen nicht alle diese. Ich hätte mir vorgestellt, wir könnten es erwarten, -aber nicht /. Wie Sie bereits erwähnt haben, wird ()erwartet, dass wir im Format arbeiten (-1+x)(-y-3)?
Level River St
2
Dies ist noch unklar. Können Polynome beliebigen Grades multipliziert werden? Können Exponenten operiert werden? Wo können Minuszeichen erscheinen?
xnor
1
" Das Eingabeformat ist auf zwei Arten zulässig ", aber sie stellen zwei sehr unterschiedliche Herausforderungen, und ein Großteil des Abschnitts "Spezifikation" ist irrelevant, wenn der zweite ausgewählt wird.
Peter Taylor

Antworten:

5

Maxima, 40 Bytes

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

Probieren Sie es online aus!

Eine Funktion, die ein Polynom als Eingabe verwendet und true zurückgibt, wenn es symmetrisch ist, gibt andernfalls false zurück

rahnema1
quelle
8

Mathematica, 43 Bytes

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

Unbenannte Funktion, die ein Polynom im angegebenen Format als Eingabe verwendet (mit der Ausnahme, dass nebeneinander stehende Variablen durch ein Leerzeichen getrennt werden müssen) und zurückgibt Trueoder False. Variables@#Erkennt die in der Eingabe angezeigten Variablen (und daher kann die Eingabe alle Arten von seltsamen Variablennamen enthalten, nicht nur einzelne Buchstaben). SymmetricReductiongibt ein geordnetes Polynompaar zurück, wobei das erste symmetrisch ist und die beiden sich zum ursprünglichen Polynom summieren; Daher können wir feststellen, ob die Eingabe symmetrisch ist, indem wir sehen, ob das zweite Polynom identisch ist 0.

Greg Martin
quelle
Laut OP nehmen Sie Eingaben als Funktion, mit denen Sie vielleicht noch mehr Golf spielen können.
Pavel
1

TI-Basic, 46 Bytes

Grundsätzlich funktioniert das Polynom in einen (Zwei-Byte-) Variablentyp, der dynamisch ausgewertet wird. Dann tauschen wir die X- und Y-Werte oft genug aus, um festzustellen, ob die Funktion symmetrisch ist.

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
quelle
Ich weiß, dass die Spezifikation wackelig ist, also: Dieses Programm nimmt die Eingabe als Zeichenfolge, arbeitet entweder mit der Gegenüberstellung oder dem *Operator und gibt 1für wahr und 0für falsch aus.
Timtech
Klar, das sollte reichen, um einen zu erkennen.
Matthew Roh