Phát hiện đa thức đối xứng [đóng]


8

Một đa thức đối xứng là một đa thức không thay đổi dưới hoán vị của các biến của nó.

Nói cách khác, một đa thức f(x,y)là đối xứng khi và chỉ khi f(x,y) = f(y,x); một đa thức g(x,y,z)là iff đối xứng g(x,y,z) = g(x,z,y) = g(y,x,z) = etc.

Ví dụ, x^2+2xy+y^2, xyx^3+x^2y+xy^2+y^3là đa thức đối xứng, nơi 2x+yx^2+ykhông.


Các thách thức

Bạn sẽ được cung cấp một đa thức và chương trình của bạn sẽ đưa ra các giá trị trung thực / giả, tùy thuộc vào việc đa thức đã cho có phải là đa thức đối xứng hay không.

Các định dạng đầu vào được cho phép theo hai cách. Một chuỗi và một mảng, như ["x^2","2xy","y^2"], trong đó đa thức là tổng của từng phần tử.


Thí dụ

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

Thông số kỹ thuật

Các hoạt động có đơn đặt hàng, giống như trong toán học bình thường. thứ tự là như thế này:

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

quy tắc áp dụng.

Tất cả các ký tự trong bảng chữ cái ( a~z) được chấp nhận là biến, mọi thứ khác đều là số.

Đa thức đã cho sẽ có 2 biến trở lên.

Phép nhân không yêu cầu toán tử *, Bạn chỉ cần phát hiện vị trí kề nhau. (phát hiện bởi juxtap vị trí không phải là cần thiết, sử dụng tùy chọn tốt hơn)


Là một chức năng một đầu vào hợp lệ?
Pavel

2
Vui lòng chỉ định chính xác các đầu vào được phép và bao gồm các trường hợp thử nghiệm bao phủ tốt không gian.
xnor

2
Tôi không cho rằng công bằng khi yêu cầu ai đó dành thời gian viết câu trả lời và sau đó bạn quyết định xem nó có hợp lệ không. Vì vậy, tôi đồng ý với @xnor. Ngoài ra bạn chỉ ra () => ^ => */ => +-nhưng ví dụ của bạn không hiển thị tất cả những điều này. Tôi có thể tưởng tượng chúng ta có thể mong đợi -nhưng không /. Như bạn đã đề cập, ()chúng tôi dự kiến ​​sẽ xử lý trong định dạng (-1+x)(-y-3)?
Cấp sông St

2
Điều này vẫn chưa rõ ràng. Đa thức bậc tùy ý có thể được nhân lên? Hoạt động có thể được thực hiện để số mũ? Trường hợp có thể trừ dấu hiệu xuất hiện?
xnor

1
" Định dạng đầu vào được cho phép theo hai cách " nhưng chúng đưa ra hai thách thức rất khác nhau và rất nhiều phần "thông số kỹ thuật" không liên quan nếu cách thứ hai nếu được chọn.
Peter Taylor

Câu trả lời:



8

Toán học, 43 byte

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

Hàm không tên được lấy làm đầu vào một đa thức theo định dạng đã cho (ngoại trừ các biến bị xen kẽ phải được phân tách bằng khoảng trắng) và trả về Truehoặc False. Variables@#phát hiện các biến xuất hiện trong đầu vào (và do đó đầu vào có thể chứa tất cả các loại tên biến lạ, không chỉ các chữ cái đơn lẻ). SymmetricReductiontrả về một cặp đa thức có thứ tự, trong đó cái đầu tiên là đối xứng và hai tổng cho đa thức ban đầu; do đó chúng ta có thể phát hiện xem đầu vào có đối xứng hay không bằng cách xem liệu đa thức thứ hai có giống hệt nhau không 0.


Theo OP, bạn lấy đầu vào là một chức năng, có thể cho phép bạn chơi golf nhiều hơn thế.
Pavel

1

TI-Basic, 46 byte

Về cơ bản, làm thế nào điều này hoạt động là đa thức được nhập vào một loại biến (hai byte) được đánh giá động. Sau đó, chúng ta trao đổi các giá trị X và Y đủ số lần để xem hàm có đối xứng không.

Prompt u
For(I,0,8
rand->X
Ans->W
rand->Y
u->Z
Y->X
W->Y
If u=W
End
Ans=9

Tôi biết thông số kỹ thuật bị rung, vì vậy: chương trình này lấy đầu vào là một chuỗi, hoạt động với vị trí kề nhau hoặc *toán tử và đầu ra 1là đúng và 0sai.
Timtech

Chắc chắn, điều đó là đủ để phát hiện một.
Matthew Roh
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.