Mendeteksi polinomial Simetris [tertutup]

8

Polinomial simetris adalah polinomial yang tidak berubah berdasarkan permutasi variabel-variabelnya.

Dengan kata lain, polinomial f(x,y)adalah simetris jika dan hanya jika f(x,y) = f(y,x); polinomial g(x,y,z)adalah iff simetris g(x,y,z) = g(x,z,y) = g(y,x,z) = etc.

Sebagai contoh, x^2+2xy+y^2, xydan x^3+x^2y+xy^2+y^3adalah polinomial simetris, di mana 2x+ydan x^2+ytidak.


Tantangan

Anda akan diberi polinomial, dan program Anda harus menampilkan nilai kebenaran / kepalsuan, tergantung pada apakah polinomial yang diberikan adalah polinomial simetris.

Format input diperbolehkan dengan dua cara. String, dan array, seperti ["x^2","2xy","y^2"], di mana polinomial adalah jumlah dari setiap elemen.


Contoh

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

Spesifikasi

Operasi memiliki perintah, seperti dalam matematika normal. urutannya seperti ini:

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

aturan berlaku.

Semua karakter dalam alfabet ( a~z) diterima sebagai variabel, yang lainnya adalah angka.

Polinomial yang diberikan akan memiliki 2 variabel atau lebih.

Perkalian tidak memerlukan operator *, Anda hanya perlu mendeteksi penjajaran. (mendeteksi dengan penjajaran tidak perlu, gunakan opsi yang lebih baik)

Matthew Roh
sumber
Apakah fungsi merupakan input yang valid?
Pavel
2
Silakan tentukan input yang diizinkan dengan tepat dan sertakan kotak uji yang menutupi ruang dengan baik.
xnor
2
Saya tidak berpikir adil untuk meminta seseorang menghabiskan waktu menulis jawaban dan kemudian Anda memutuskan apakah itu valid. Jadi saya setuju dengan @xnor. Anda juga menunjukkan () => ^ => */ => +-tetapi contoh Anda tidak menunjukkan semua ini. Saya akan membayangkan kita bisa berharap -tetapi tidak /. Seperti yang telah Anda sebutkan, ()apakah kami diharapkan menangani dalam format (-1+x)(-y-3)?
Level River St
2
Ini masih belum jelas. Bisakah polinomial tingkat sewenang-wenang dikalikan? Bisakah operasi dilakukan untuk eksponen? Di mana tanda minus dapat muncul?
xnor
1
" Format input diperbolehkan dalam dua cara " tetapi mereka memberikan dua tantangan yang sangat berbeda, dan banyak bagian "spec" tidak relevan jika yang kedua jika dipilih.
Peter Taylor

Jawaban:

5

Maxima, 40 byte

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

Cobalah secara Online!

Fungsi yang mengambil polinomial sebagai input dan mengembalikan true jika simetris yang lain mengembalikan false

rahnema1
sumber
8

Mathematica, 43 byte

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

Fungsi tanpa nama mengambil input polinomial dalam format yang diberikan (kecuali bahwa variabel yang disandingkan harus dipisahkan oleh spasi) dan mengembalikan Trueatau False. Variables@#mendeteksi variabel yang muncul dalam input (dan dengan demikian input dapat berisi semua jenis nama variabel aneh, bukan hanya huruf tunggal). SymmetricReductionmengembalikan pasangan polinomial yang dipesan, di mana yang pertama adalah simetris dan dua jumlah ke polinomial aslinya; oleh karena itu kita dapat mendeteksi apakah input simetris dengan melihat apakah polinomial kedua identik 0.

Greg Martin
sumber
Menurut OP, Anda mengambil input sebagai fungsi, yang mungkin bisa membuat Anda bermain golf lebih banyak.
Pavel
1

TI-Basic, 46 byte

Pada dasarnya, cara kerjanya adalah polinomial dimasukkan ke dalam tipe variabel (dua-byte) yang dievaluasi secara dinamis. Kemudian, kita menukar nilai X dan Y cukup kali untuk melihat apakah fungsinya simetris.

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
sumber
Saya tahu specnya goyah, jadi: program ini mengambil input sebagai string, bekerja dengan juxtaposition atau *operator, dan output 1untuk true dan 0false.
Timtech
Tentu, itu sudah cukup untuk mendeteksi satu.
Matius Roh