チェーンルールを実行する


15

差別化と統合には多くの課題がありましたが、関連する料金の問題を解決することには何もありませんでした。そのため、この課題では、多数の導関数(変数ではなく数値)を取得し、別の導関数を見つける必要があります。

入力は、改行で区切られた方程式のリストになりますdx/dt = 4。小数と負数があります。

入力は、あなたが見つけなければならない一つの微分で終わります。あなたは常にそれを見つけるのに十分な情報があると仮定できますが、過剰な情報もあるかもしれません。

また、逆関数の導関数を考慮する必要がある場合がありdy/dx = 3ますdx/dy = 1/3。たとえば、もしあれば、それも知っています。

出力はの形式になりdy/dt = 6ます。すべての空白などは同じでなければなりません。すべての変数は常に1文字であると想定します(大文字でも、大文字でもかまいません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

出力は「answer:dx / dt = .318」ですか、それとも単に「dx / dt = .318」ですか?
GamrCorps

@GamrCorps後者。
マルティセン

2
組み込みの方程式ソルバーを使用できますか?
マーティンエンダー

3
私は答えがd_/d_比率として扱うと感じて、それは私を悲しくさせます
Arcturus

@MartinBüttnerはい、しかし組み込みの微分方程式ソルバーではありません。
マルティセン

回答:


2

Python- 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によって3バイトが保存されました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.