연쇄 규칙을 수행하십시오


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

출력이 "answer : dx / dt = .318"입니까 아니면 "dx / dt = .318"입니까?
GamrCorps

@GamrCorps 후자를.
Maltysen

2
내장 방정식 솔버를 사용할 수 있습니까?
Martin Ender

3
나는 대답이 d_/d_비율로 취급 될 것이라는 느낌이
Arcturus

@ MartinBüttner 예, 내장 미분 방정식 솔버는 아닙니다.
Maltysen

답변:


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는 3 바이트를 저장했습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.