정의
두 가지 기능이 포함 된 체인 규칙은 다음과 같습니다.
D[f(g(x))] = f'(g(x)) * g'(x)
또는 대안으로 :
D[f1(f2(x))] = f1'(f2(x)) * f2'(x)
세 가지 기능이 포함 된 체인 규칙은 다음과 같습니다.
D[f(g(h(x)))] = f'(g(h(x))) * g'(h(x)) * h'(x)
또는 대안으로 :
D[f1(f2(f3(x)))] = f1'(f2(f3(x))) * f2'(f3(x)) * f3'(x)
등등.
직무
- 2와 21 사이의 정수가 주어지면 많은 함수를 가진 연쇄 규칙을 첫 번째 형식 또는 두 번째 형식으로 출력하십시오.
- 두 번째 양식을 사용 중인지 지정하십시오.
명세서
- 문자열의 형식은 위에서 언급 한 것과 정확히 일치해야합니다.
- 모든 공간은 그대로 유지
- 대문자
D
- 바로 뒤에 대괄호
D
- 별표는 그대로 유지
- 하나의 추가 후행 공간 (U + 0020)이 허용됩니다.
- 두 번째 형식의 함수 이름에서 선행 0 은 허용됩니다 (예 :
f01
대신f1
).
테스트 케이스
첫 번째 양식을 사용하는 경우 :
input output
2 D[f(g(x))] = f'(g(x)) * g'(x)
3 D[f(g(h(x)))] = f'(g(h(x))) * g'(h(x)) * h'(x)
두 번째 양식을 사용하는 경우 :
input output
2 D[f1(f2(x))] = f1'(f2(x)) * f2'(x)
3 D[f1(f2(f3(x)))] = f1'(f2(f3(x))) * f2'(f3(x)) * f3'(x)
리더 보드
답변
파이썬 2, 79 바이트
f=lambda n:0**n*"D[x] ="or f(n-1).replace("x","f%d(x)"%n)+1%n*" *"+" f%d'(x)"%n
번호가 매겨진 기능으로 출력합니다.
마다 반복 교체하여 출력을 구축 x
하여 fn(x)
, 다음은 첨부 * fn'(x)
. 에 *
대해서는 생략됩니다 n==1
.
반복 프로그램과 비교하십시오 (92 바이트).
r="D[x] = ";n=0
exec'n+=1;r=r.replace("x","f%d(x)"%n)+"f%d\'(x) * "%n;'*input()
print r[:-3]
96 바이트 :
n=input();r='';s='x'
while n:s='f%d(%%s)'%n%s;r=" * f%d'"%n+s[2:]+r;n-=1
print"D[%s] = "%s+r[3:]
번호가 매겨진 기능으로 출력합니다.
중첩 적산 기능 f1(f2(f3(x)))
에서 s
와의 오른쪽 측의 발현 r
. 문자열 형식이 복잡합니다. 3.6의 f- 문자열이 더 좋습니다.
답변
Sesos , 49 바이트
0000000: 2ac992 63fb92 245fb6 6c57be 255bbe 2cc9bf 6d49da *..c..$_.lW.%[.,..mI.
0000015: 025e7f fdced0 fd67f8 fcde33 b6a7b2 643d4f 65597e .^.....g...3...d=OeY~
000002a: f77a72 dd73cf fe .zr.s..
분해
set numin
add 68 ; 'D'
put
sub 7 ; '=' - 'D'
fwd 1
add 32 ; ' '
fwd 1
add 91 ; '['
put
add 2 ; ']' - '['
fwd 1
add 102 ; 'f'
fwd 1
add 40 ; '('
fwd 3
add 120 ; 'x'
rwd 2
get
jmp
jmp
fwd 1
add 1
rwd 3
put
add 1
fwd 1
put
fwd 1
sub 1
jnz
sub 1
rwd 1
add 1 ; ')' - '('
fwd 3
put
rwd 1
jmp
rwd 3
sub 1
fwd 1
put
fwd 1
add 1
fwd 1
sub 1
jnz
rwd 4
put
get
add 41 ; ')'
rwd 1
put
rwd 1
put
get
add 42 ; '*'
fwd 1
put
fwd 2
put
add 1
fwd 1
sub 2 ; '\'' - ')'
put
add 1 ; '(' - '\''
put
fwd 1
jnz
fwd 2
put
rwd 5
put
답변
자바 스크립트 (ES6), 89 바이트
f=n=>--n?f(n).replace(/x/g,`${c=(n+15).toString(36)}(x)`)+` * ${c}'(x)`:`D[f(x)] = f'(x)`
또는 두 번째 형식을 사용하는 75 바이트 :
f=n=>n>1?f(n-1).replace(/x/g,`f${n}(x)`)+` * f${n}'(x)`:`D[f1(x)] = f1'(x)`
또는 추가 1 *
용어가 허용되는 경우 82/64 바이트 :
f=n=>n?f(n-1).replace(/x/g,`${c=(n+14).toString(36)}(x)`)+` * ${c}'(x)`:`D[x] = 1`
f=n=>n?f(n-1).replace(/x/g,`f${n}(x)`)+` * f${n}'(x)`:`D[x] = 1`
답변
루비, 72 바이트
두 번째 형태. @Neil 답변에서 Ruby로 포트.
f=->n{n>1?f[n-1].gsub(?x,"f#{n}(x)")+" * f#{n}'(x)":"D[f1(x)] = f1'(x)"}
답변
줄리아, 66 바이트
!x=x>1?replace(!~-x,"x","f$x(x)")*" * f$x'(x)":"D[f1(x)] = f1'(x)"
@Neil의 ES6 답변 포트. 두 번째 양식을 사용합니다.
답변
파이썬 2, 174 바이트
i=input()+1
a=lambda x:'('.join(['f%d'%e for e in range(x,i)])+'(x'+')'*(i-x)
print'D[%s] = %s'%(a(1),' * '.join(["f%d'%s%s)"%(e+1,'('*(i-e-2>0),a(e+2))for e in range(i-1)]))
골프를하기 위해 방이 많이 남았습니다. 두번째 형태 (용도 f1
, f2
등).
답변
자바 스크립트 (ES6), 194 바이트
n=>{s="D[";for(i=1;i<=n;i++)s+="f"+i+"(";s+="x";s+=")".repeat(n);s+="] = ";for(i=1;i<=n;i++){s+="f"+i+"'(";for(j=i+1;j<=n;j++)s+="f"+j+"(";s+="x";s+=")".repeat(n-i+1);if(i-n)s+=" * ";}return s;}
@LeakyNun 덕분에 31 바이트가 절약되었습니다.
익명의 람다 함수입니다. 나는 이것을 줄일 수있는 방법이 있다고 확신합니다 …
언 골프
var chain = function(n) {
var str = "D["; // derivative symbol
for (var i = 1; i <= n; i++) {
str += "f"+i+"("; // put in n functions, each labeled f1(, f2(, etc.
}
str += "x"; // add in the function input, usually "x"
for (var i = 0; i < n; i++) {
str += ")"; // add in n end parentheses
}
str += "] = "; // add in the end bracket and the equals operator
for (var i = 1; i <= n; i++) {
str += "f"+i+"'("; // add in all n of the outer functions with the prime operator
for (var j = i+1; j <= n; j++) {
str += "f"+j+"("; // add in all of the inner functions
}
str += "x"; // add in the input, "x"
for (var j = 1; j <= n; j++) {
str += ")"; // close the parentheses
}
if (i !== n) {
str += " * "; // the multiplication of all of the outer primed functions
}
}
return str;
};