做连锁规则


15

在差异化和整合方面,我们面临着许多挑战,但是在解决相关费率问题上没有挑战。因此,在此挑战中,您将获得一堆导数(它们将是数字,而不是任何变量),并且必须找到另一个导数。

输入将以换行符分隔的方程式列表形式出现dx/dt = 4。可以有小数和负数。

输入将以一个差分结束,您必须找到一个差分。您可以假设总是会有足够的信息来找到它,但是也可能有多余的信息。

您可能还必须考虑反函数的导数,例如,如果有dy/dx = 3,您也知道dx/dy = 1/3

您的输出将采用形式dy/dt = 6。所有空格等必须相同。假设所有变量总是一个字母(它们可以是大写字母,也可以是d)。

这是,因此以字节为单位的最短代码胜出!

测试用例

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

输出是“答案:dx / dt = .318”还是“ dx / dt = .318”?
GamrCorps 2015年

@GamrCorps后者。
马蒂森(Maltysen)2015年

2
我们可以使用内置方程求解器吗?
马丁·恩德

3
我觉得答案将被d_/d_视为一个比例,这让我感到难过
Arcturus

@MartinBüttner是的,但不是内置的微分方程求解器。
Maltysen,2015年

Answers:


2

蟒蛇- 278 275

没人能做到这一点,所以我认为我应该提交,即使它打得还不够好。

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]])

在这里,它是部分未打高尔夫球的:

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]])

Thomas Kwa保存了三个字节。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.