Zincir Kuralını Yapın


15

Farklılaşma ve entegrasyon konusunda pek çok zorluk yaşadık, ancak sadece ilgili oran sorunlarını çözme konusunda hiçbir sorun yaşamadık. Yani bu meydan okumada, bir grup türev alacaksınız (Bunlar herhangi bir değişken açısından değil, sayısal olacak) ve başka bir türev bulmak zorundasınız.

Girdi, yeni satırdan ayrılmış bir denklem listesinde, formda gelir dx/dt = 4. Ondalık sayılar ve negatifler olabilir.

Giriş, bulmak zorunda olduğunuz bir diferansiyel ile sona erecektir. Her zaman bulmak için yeterli bilgi olacağını varsayabilirsiniz, ancak aşırı bilgi de olabilir.

Ters fonksiyonun türevini de dikkate almanız gerekebilir, örneğin varsa dy/dx = 3, bunu da biliyorsunuz dx/dy = 1/3.

Çıktınız formda olacaktır dy/dt = 6. Tüm boşluk vb. Aynı olmak zorundadır. Tüm değişkenlerin her zaman bir harf olduğunu varsayalım (Büyük harf olabilir ve olabilir d).

Bu , bayt en kısa kod kazanır!

Test Durumları

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

Çıktı "answer: dx / dt = .318" mi yoksa sadece "dx / dt = .318" mi?
GamrCorps

@Gamrİkincisi tutar.
Maltysen

2
Yerleşik denklem çözücüleri kullanabilir miyiz?
Martin Ender

3
Cevapların d_/d_bir oran olarak ele alınacağını hissediyorum ve bu beni üzüyor
Arcturus

@ MartinBüttner evet, fakat yerleşik diferansiyel denklem çözücüler değil.
15'te Maltysen

Yanıtlar:


2

Python - 278 275

Henüz kimse bunu yapmadı, bu yüzden henüz çok iyi golf olmasa bile, ben bu göndereceğini düşündüm.

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

Burada kısmen çözülmemiş:

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

Üç bayt Thomas Kwa tarafından kurtarıldı.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.