Giới thiệu
Viết chương trình tính đạo hàm riêng của một đa thức (có thể là đa biến) đối với một biến.
Thử thách
Đạo hàm là các công cụ toán học rất quan trọng đã được áp dụng rộng rãi trong vật lý, hóa học, sinh học, kinh tế, tâm lý học và nhiều hơn nữa để xử lý tất cả các loại vấn đề. Biểu thức có nhiều biến cũng rất phổ biến.
Trong phạm vi của thử thách này, một chuỗi đa thức ("polystr") được xác định bởi BNF (dạng Backus giật Naur sau):
<polystr> ::= <term> | <term><plusminus><polystr>
<plusminus> ::= "+" | "-"
<term> ::= <coeff> | <coeff><baseterm> | <baseterm>
<baseterm> ::= <variable> | <variable><exponent> | <baseterm><baseterm>
<coeff> ::= positive_integer
<exponent> ::= positive_integer
<variable> ::= lowercase_ASCII_letters
Ở đâu positive_integer
và lowercase_ASCII_letters
khá tự giải thích.
Ví dụ: Chuỗi 3x2y-x3y-x2y+5
có nghĩa 3*(x^2)*y-(x^3)*y-(x^2)*y+5
. Các thuật ngữ được đưa ra trong đầu vào có thể xuất hiện theo bất kỳ thứ tự nào và các biến trong mỗi thuật ngữ cũng có thể xuất hiện theo bất kỳ thứ tự nào. Vì vậy, ví dụ 5-yx2-x3y+y3x2
cũng là một đầu vào hợp lệ và trên thực tế giống như ví dụ trước.
Quy tắc để lấy đạo hàm một phần chỉ là thực hiện theo thuật ngữ. Nếu biến xuất hiện không xuất hiện trong thuật ngữ, đạo hàm bằng không. Mặt khác, hệ số của số hạng được nhân với số mũ của biến đó và sau đó số mũ của biến bị giảm đi một. Số mũ của các biến khác không thay đổi. Đây chỉ là theo định nghĩa trong toán học. Ngoài ra, nếu số mũ kết quả bằng 0, loại bỏ biến khỏi thuật ngữ.
Ví dụ, để lấy đạo hàm một phần 5z-z2y2-5w3y
đối với y
. Quá trình sau đây được thực hiện (theo BNF được xác định ở trên, "hệ số" đều được coi là số dương, tức là các dấu hiệu được xem xét riêng)
5z - z2y2 - 5w3y
Coeff 1->1*2=2 5->5*1=5
Expon 2->2-1=1 1->1-1=0
Term - 2yz2 - 5w3
(y is not here (expon 0->y removed)
so the term is 0)
Kết quả là -2yz2-5w3y
.
Mặt khác, nếu biểu thức trên được lấy đạo hàm một phần đối với a
, kết quả là 0
vì a
không có trong các điều khoản.
Nhiệm vụ của bạn là viết một hàm hoặc một chương trình đầy đủ để tính đạo hàm này. Nó nên lấy một chuỗi đa thức và một ký tự đơn (biến để lấy đạo hàm đối với) và trả về đạo hàm ở dạng đơn giản nhất.
"Hình thức đơn giản nhất" có nghĩa là ba điều.
Số
0
(không phải chữ số) sẽ không xuất hiện trong đầu ra trừ khi chính đầu ra chỉ là0
. Vì vậy, cũng không0+10y
phải3-y0z
là đầu ra hợp lệ và nên được chuyển đổi thành10y
và3-z
, tương ứng.Số
1
không được xuất hiện dưới dạng số mũ hoặc hệ số, nhưng có thể xuất hiện dưới dạng một thuật ngữ độc lập.Các thuật ngữ với chính xác cùng một bộ biến và số mũ nên được hợp nhất, có nghĩa
3a2b5-4b5a2
là không phải là một đầu ra hợp lệ, và nó nên được-a2b5
thay thế. Thông tin thêm về đầu vào và đầu ra có thể được tìm thấy trong phần "Thông số kỹ thuật".
Các trường hợp thử nghiệm
Input
Output
2xy+4ax-5+7mx4-4-7x4m, x
2y+4a
4upv+5u2v3w4-4w4u2v3+qr-v,v
4up+3u2v2w4-1
12ux-7x2m3+ab5,q
0
-a+10ca11y-1nv3rt3d-poly, a
-1+110ca10y
1y+1x3y, y
1+x3
Thông số kỹ thuật
- Đầu vào có thể được thực hiện thông qua các hình thức tiêu chuẩn . Nói cách khác, bạn có thể lấy đầu vào là một chuỗi, một danh sách các ký tự, một mảng các hệ số, các biến (có thể được biểu thị bằng giá trị ASCII của chúng trừ đi 'a' hoặc một cái gì đó giống nhau) và số mũ, v.v. chuỗi đến
2*x^3y^2
hoặc giống nhau thay vì2x3y2
.
Tuy nhiên, vui lòng không sử dụng đầu vào [2,0,0,0,1,0,0,3,0,0,...0]
(một mảng gồm 27 phần tử) cho thuật ngữ 2dg
hoặc bất kỳ định dạng dài dòng nào khác liệt kê 26 chữ cái như thế này. Định dạng đầu vào của bạn cũng sẽ có thể xử lý ab
và ba
như các đầu vào khác nhau (vì vậy định dạng mảng 27 phần tử không hợp lệ do hạn chế này là tốt).
Mỗi biến số (chữ cái) sẽ chỉ xuất hiện một lần trong mỗi thuật ngữ của đầu vào, điều đó có nghĩa là
xx
sẽ không xuất hiện và sẽ luôn được trình bày dưới dạngx2
, cũng như sẽa3b4a2
xuất hiện một cái gì đó giống như .Để nhắc lại, các điều khoản trong đầu vào có thể xuất hiện theo bất kỳ thứ tự nào.
Bạn cũng có thể tự do chọn định dạng đầu ra với điều kiện tránh định dạng dài dòng được đề cập ở trên. Tuy nhiên, đầu ra phải luôn ở dạng đơn giản nhất như được định nghĩa ở trên. Giống như đầu vào, các thuật ngữ trong đầu ra có thể xuất hiện theo bất kỳ thứ tự nào và các biến trong mỗi thuật ngữ cũng có thể xuất hiện theo bất kỳ thứ tự nào và không nhất quán giữa các thuật ngữ. Điều đó có nghĩa
pu+2up2
là một đầu ra hợp lệ. Dấu hiệu cho thuật ngữ hàng đầu có thể là tích cực hay tiêu cực và-y+3x
và3x-y
đều có giá trị, như vậy là+3x-y
.Đầu vào luôn được cung cấp sao cho tất cả các hệ số và số mũ trong đầu ra sẽ nhỏ hơn 2 32 -1 hoặc số nguyên lớn nhất mà ngôn ngữ của bạn có thể xử lý, tùy theo giá trị nào nhỏ hơn. Khẳng định rằng số nguyên lớn nhất mà ngôn ngữ của bạn có thể xử lý là nhỏ một cách vô lý và tầm thường hóa thách thức rơi vào loại lỗ hổng mặc định.
Đây là code-golf , số byte thấp nhất sẽ thắng.
Như thường lệ, sơ hở mặc định áp dụng ở đây.
Chỉnh sửa: Vì hầu hết các câu trả lời cho đến nay đều trở thành nội bộ thực hiện toàn bộ thử thách và mặc dù biết rằng có các nội dung, tôi không có ý định cấm các nội bộ đó ngay từ đầu, hiện tại tôi cũng không có. Tôi sẽ đặt tiêu chí chiến thắng dựa trên cơ sở cho mỗi ngôn ngữ, tức là bài nộp có ít byte nhất trong mỗi ngôn ngữ sẽ thắng trong ngôn ngữ đó. Tôi sẽ thêm một đoạn tiêu chuẩn cho một danh mục nếu có đủ bài nộp. Vui lòng tiếp tục gửi nội dung để thể hiện sức mạnh của ngôn ngữ của bạn nhưng xin vui lòng gửi câu trả lời không tích hợp của bạn ngay cả khi nó dài hơn và ngôn ngữ của bạn không có nội dung. Chúc mừng mã golf trong ngôn ngữ yêu thích của bạn!
-9
xuất hiện trong đầu ra?
take derivative
vàmerge
no exponent 1
, mặc dù bạn dường như không nói rõ điều này