Làm quy tắc chuỗi


15

Chúng tôi đã có rất nhiều thách thức về sự khác biệt và hội nhập, nhưng không có gì chỉ giải quyết các vấn đề về tỷ lệ liên quan. Vì vậy, trong thử thách này, bạn sẽ nhận được một loạt các công cụ phái sinh (Chúng sẽ là số, không phải theo bất kỳ biến nào) và phải tìm một công cụ phái sinh khác.

Đầu vào sẽ có trong một danh sách các phương trình được phân tách bằng dòng mới, dưới dạng dx/dt = 4. Có thể có số thập phân và phủ định.

Đầu vào sẽ kết thúc với một vi sai, cái bạn sẽ phải tìm. Bạn có thể cho rằng sẽ luôn có đủ thông tin để tìm thấy nó, mông cũng có thể có thông tin dư thừa.

Bạn cũng có thể phải xem xét đạo hàm của hàm nghịch đảo, ví dụ nếu bạn có dy/dx = 3, bạn cũng biết điều đó dx/dy = 1/3.

Đầu ra của bạn sẽ ở dạng dy/dt = 6. Tất cả các khoảng trắng, vv phải giống nhau. Giả sử tất cả các biến luôn là một chữ cái (Chúng có thể là chữ hoa và chúng có thể là d).

Đây là , vì vậy mã ngắn nhất tính bằng byte sẽ thắng!

Các trường hợp thử nghiệm

dy/dx = 4
dx/dt = 5
dy/dt

answer: dy/dt = 20

dy/dx = -3
dt/dx = 3
dy/dt

answer: dy/dt = -1

dA/dt = 4
dA/dC = 2
dC/dr = 6.28
dr/dt

answer: dr/dt = 0.3184713375796178

dx/dy = 7
dx/dt = 0
dy/dt

answer: dy/dt = 0

Là đầu ra "câu trả lời: dx / dt = .318" hay chỉ là "dx / dt = .318"?
GamrCorps

@GamrCorps sau.
Maltysen

2
Chúng ta có thể sử dụng các bộ giải phương trình tích hợp không?
Martin Ender

3
Tôi có cảm giác câu trả lời sẽ được coi d_/d_là tỷ lệ và điều đó làm tôi buồn
Arcturus

@ MartinBüttner có, nhưng không xây dựng phương trình giải phương trình vi phân.
Maltysen

Câu trả lời:


2

Con trăn - 278 275

Không ai khác đã làm điều này chưa, vì vậy tôi nghĩ rằng tôi đã gửi nó, mặc dù nó chưa được đánh golf rất tốt.

a={}
e={}
k=input
i=k()
while"="in i:
 b,d=i.split(" =");b,c=b.split("/");d=float(d)
 if d:a[b]=a.get(b,[])+[[c,1/d]]
 a[c]=a.get(c,[])+[[b,d]];i=k()
i=i.split("/")
def f(x):
 for j in a.get(x,[]):
  if j[0] not in e:e[j[0]]=e[x]*j[1];f(j[0])
e[i[1]]=1
f(i[1])
print(e[i[0]])

Đây là một phần vô căn cứ:

a={}
e={}
i=input()
while "=" in i:
 b,d=i.split(" =")
 b,c=b.split("/")
 d=float(d)
 if d:a[b]=a.get(b,[])+[[c,1/d]]
 a[c]=a.get(c,[])+[[b,d]]
 i=input()
i=i.split("/")
def f(x):
 for j in a.get(x,[]):
  if j[0] not in e:e[j[0]]=e[x]*j[1];f(j[0])
e[i[1]]=1
f(i[1])
print(e[i[0]])

Ba byte đã được lưu bởi Thomas Kwa.

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.