우리 는 Maclaurin 시리즈 확장 을 사용하여 일부 변수 x의 거듭 제곱으로 e로 표시된 오일러 수를 근사 할 수 있음을 알고 있습니다 .
x를 1로함으로써 우리는
도전
입력 N을 받아 오일러 수에 가까운 모든 언어로 프로그램을 작성하고 N 번째 항에 대한 계열을 계산합니다. 첫 번째 항에는 분모가 0!이 아니라 1!이 있습니다. 즉 N = 1은 1/0!에 해당합니다.
채점
바이트 수가 가장 적은 프로그램이 승리합니다.
우리 는 Maclaurin 시리즈 확장 을 사용하여 일부 변수 x의 거듭 제곱으로 e로 표시된 오일러 수를 근사 할 수 있음을 알고 있습니다 .
x를 1로함으로써 우리는
입력 N을 받아 오일러 수에 가까운 모든 언어로 프로그램을 작성하고 N 번째 항에 대한 계열을 계산합니다. 첫 번째 항에는 분모가 0!이 아니라 1!이 있습니다. 즉 N = 1은 1/0!에 해당합니다.
바이트 수가 가장 적은 프로그램이 승리합니다.
답변:
나의 첫번째 진짜 곰팡이가 많은 프로그램! 실제로는 약간의 골프 someday
가 wait for
있는데, 첫 번째는 길이가 짧았 기 때문에 대신에 사용 했습니다 .
if only <stdio.h> were included...
if only int f were 1...
if only int N were 0...
wish for "%d",&N upon a star
if only int i were 0...
if only double e were 0...
someday i will be N...
if only e were e+1./f...
if only i were i+1...
if only f were f*i...
*sigh*
wish "%f\n",e upon a star
if wishes were horses...
<stdio.h>
someday i were N...
대신 작동 합니까 someday i will be N...
?
smc1.!
m map over range 0..input:
.! factorial
c1 1 / ^
s sum
바이트에 대한 FryAmTheEggman 에게 감사합니다 !
Ans
유효한 입력 형식이 아니므로 15 바이트 버전 만 유효합니다.
Ans
PPCG에서 항상 기본 입력 형식으로 사용되어 왔으며 (이전 TI 답변을 살펴보십시오) 동의하지 않는 것보다 더 많은 사람들이 동의하므로 답변을 변경하는 데 괴롭히지 마십시오.
n->sum(1./gamma(1:n))
이것은 정수를 받아들이고 float를 반환하는 익명 함수입니다. 호출하려면 변수에 지정하십시오.
접근 방식은 매우 간단합니다. 우리 sum
는 1에서 n 까지 평가 된 감마 함수로 1을 나눈 값 입니다. 이것은 n 속성을 이용합니다 ! = Γ ( n +1).
Dennis 덕분에 1 바이트를 절약하고 Glen O 덕분에 6 바이트를 절약했습니다!
@(n)sum(1./factorial(0:n))
[d1-d1<f*]sf[dlfx1r/r1-d1<e+]se1?dk1-d1<e+p
이것은 시리즈의 상당히 직접적인 번역입니다. 나는 영리하려고 노력했지만 코드가 길어졌습니다.
[d1-d1<f*]sf
n> 0에 대한 간단한 계승 함수
[dlfx1r/r1-d1<e+]se
n, ..., 1에 대한 계승을 실행합니다. 반전 및 합계
1?dk1-
1로 스택을 프라이밍하십시오. 입력을 받아들이고 적절한 정밀도를 설정하십시오
d1<e+
입력이 0 또는 1이면 전달할 수 있습니다. 그렇지 않으면 부분 합을 계산하십시오.
p
결과를 인쇄하십시오.
처음 100 개의 확장 :
0
1
2
2.500
2.6666
2.70832
2.716665
2.7180553
2.71825394
2.718278766
2.7182815251
2.71828180110
2.718281826194
2.7182818282857
2.71828182844671
2.718281828458223
2.7182818284589936
2.71828182845904216
2.718281828459045062
2.7182818284590452257
2.71828182845904523484
2.718281828459045235331
2.7182818284590452353584
2.71828182845904523536012
2.718281828459045235360273
2.7182818284590452353602862
2.71828182845904523536028736
2.718281828459045235360287457
2.7182818284590452353602874700
2.71828182845904523536028747123
2.718281828459045235360287471339
2.7182818284590452353602874713514
2.71828182845904523536028747135253
2.718281828459045235360287471352649
2.7182818284590452353602874713526606
2.71828182845904523536028747135266232
2.718281828459045235360287471352662481
2.7182818284590452353602874713526624964
2.71828182845904523536028747135266249759
2.718281828459045235360287471352662497738
2.7182818284590452353602874713526624977552
2.71828182845904523536028747135266249775705
2.718281828459045235360287471352662497757231
2.7182818284590452353602874713526624977572453
2.71828182845904523536028747135266249775724691
2.718281828459045235360287471352662497757247074
2.7182818284590452353602874713526624977572470919
2.71828182845904523536028747135266249775724709352
2.718281828459045235360287471352662497757247093683
2.7182818284590452353602874713526624977572470936984
2.71828182845904523536028747135266249775724709369978
2.718281828459045235360287471352662497757247093699940
2.7182818284590452353602874713526624977572470936999574
2.71828182845904523536028747135266249775724709369995936
2.718281828459045235360287471352662497757247093699959554
2.7182818284590452353602874713526624977572470936999595729
2.71828182845904523536028747135266249775724709369995957475
2.718281828459045235360287471352662497757247093699959574944
2.7182818284590452353602874713526624977572470936999595749646
2.71828182845904523536028747135266249775724709369995957496673
2.718281828459045235360287471352662497757247093699959574966943
2.7182818284590452353602874713526624977572470936999595749669652
2.71828182845904523536028747135266249775724709369995957496696740
2.718281828459045235360287471352662497757247093699959574966967601
2.7182818284590452353602874713526624977572470936999595749669676254
2.71828182845904523536028747135266249775724709369995957496696762747
2.718281828459045235360287471352662497757247093699959574966967627699
2.7182818284590452353602874713526624977572470936999595749669676277220
2.71828182845904523536028747135266249775724709369995957496696762772386
2.718281828459045235360287471352662497757247093699959574966967627724050
2.7182818284590452353602874713526624977572470936999595749669676277240739
2.71828182845904523536028747135266249775724709369995957496696762772407632
2.718281828459045235360287471352662497757247093699959574966967627724076601
2.7182818284590452353602874713526624977572470936999595749669676277240766277
2.71828182845904523536028747135266249775724709369995957496696762772407663006
2.718281828459045235360287471352662497757247093699959574966967627724076630325
2.7182818284590452353602874713526624977572470936999595749669676277240766303508
2.71828182845904523536028747135266249775724709369995957496696762772407663035328
2.718281828459045235360287471352662497757247093699959574966967627724076630353518
2.7182818284590452353602874713526624977572470936999595749669676277240766303535449
2.71828182845904523536028747135266249775724709369995957496696762772407663035354729
2.718281828459045235360287471352662497757247093699959574966967627724076630353547565
2.7182818284590452353602874713526624977572470936999595749669676277240766303535475915
2.71828182845904523536028747135266249775724709369995957496696762772407663035354759429
2.718281828459045235360287471352662497757247093699959574966967627724076630353547594542
2.7182818284590452353602874713526624977572470936999595749669676277240766303535475945681
2.71828182845904523536028747135266249775724709369995957496696762772407663035354759457111
2.718281828459045235360287471352662497757247093699959574966967627724076630353547594571352
2.7182818284590452353602874713526624977572470936999595749669676277240766303535475945713792
2.71828182845904523536028747135266249775724709369995957496696762772407663035354759457138185
2.718281828459045235360287471352662497757247093699959574966967627724076630353547594571382143
2.7182818284590452353602874713526624977572470936999595749669676277240766303535475945713821752
2.71828182845904523536028747135266249775724709369995957496696762772407663035354759457138217826
2.718281828459045235360287471352662497757247093699959574966967627724076630353547594571382178492
2.7182818284590452353602874713526624977572470936999595749669676277240766303535475945713821785218
2.71828182845904523536028747135266249775724709369995957496696762772407663035354759457138217852481
2.718281828459045235360287471352662497757247093699959574966967627724076630353547594571382178525131
2.7182818284590452353602874713526624977572470936999595749669676277240766303535475945713821785251635
2.71828182845904523536028747135266249775724709369995957496696762772407663035354759457138217852516607
2.718281828459045235360287471352662497757247093699959574966967627724076630353547594571382178525166394
1000 개의 용어 사용 :
2.7182818284590452353602874713526624977572470936999595749669676277240\
766303535475945713821785251664274274663919320030599218174135966290435\
729003342952605956307381323286279434907632338298807531952510190115738\
341879307021540891499348841675092447614606680822648001684774118537423\
454424371075390777449920695517027618386062613313845830007520449338265\
602976067371132007093287091274437470472306969772093101416928368190255\
151086574637721112523897844250569536967707854499699679468644549059879\
316368892300987931277361782154249992295763514822082698951936680331825\
288693984964651058209392398294887933203625094431173012381970684161403\
970198376793206832823764648042953118023287825098194558153017567173613\
320698112509961818815930416903515988885193458072738667385894228792284\
998920868058257492796104841984443634632449684875602336248270419786232\
090021609902353043699418491463140934317381436405462531520961836908887\
070167683964243781405927145635490613031072085103837505101157477041718\
986106873969655212671546889570350116
:Ygl_^s
@Luis의 권장 사용으로 인해 4 바이트가 절약되었습니다 gamma
( Yg
)
설명
% Implicitly grab input (N)
: % Create an array from 1...N
Yg % Compute factorial(x-1) for each element (x) in the array
l_^ % Take the inverse
s % Sum all elements
% Implicitly display the result
]
1i:Yg/s
7 바이트
#include <stdio.h>
#include <stdlib.h>
#define z double
z f(z x){z r=1;z n=1;while(x>0){r*=n;n++;x--;}return r;}int main(int argc, char **argv){z e=0;z p=0;z d=0;p=strtod(argv[1],NULL);while(p>0){e+=1.0d/f(d);printf("%.10f\n",e);p--;d++;}return 0;}
언 골프 드 :
/* approximate e */
#include <stdio.h>
#include <stdlib.h>
double fact(double x){
double result = 1;
double num = 1;
while (x > 0){
result *= num;
num++;
x--;
}
return result;
}
int main(int argc, char **argv){
double e = 0;
double precision = 0;
double denom = 0;
precision = strtod(argv[1], NULL);
while (precision > 0){
e += 1.0d / fact(denom);
printf("%.10f\n", e);
precision--;
denom++;
}
return 0;
}
반복 횟수를 결정하기 위해 숫자를 인수로 사용합니다.
#include <stdio.h>
$L<!/O
설명
$ # push 1 and input: N = 5
L< # range [0..N-1]: [0,1,2,3,4]
! # factorial over range [1,1,2,6,24]
/ # divide 1/range: [1.0, 1.0, 0.5, 0.16666666666666666, 0.041666666666666664]
O # sum: 2.708333333333333
((scanl(+)0$(1/)<$>scanl(*)1[1..])!!)
가장 짧지는 않지만 가장 아름답습니다.
Laikoni의 호의로 2 바이트 더 짧은 솔루션이 있습니다 .
sum.(`take`((1/)<$>scanl(*)1[1..]))
λ> let f = ((scanl (+) 0 $ (1/) <$> scanl (*) 1 [1..]) !!)
λ> map f [1..5]
[1.0,2.0,2.5,2.6666666666666665,2.708333333333333]
λ> f 10
2.7182815255731922
λ> f 100
2.7182818284590455
λ> log (f 10)
0.9999998885745155
λ> log (f 100)
1.0
50
. 헤더를 추가하려면 다음을 사용하십시오 ## Language, <xxx> bytes
..
f n=
하거나 가져와야 \n->
합니다. 그러나, 우리는 또한 몇 바이트를 저장할 수 있습니다 (\x->1/x)
섹션을 단축 할 수 (1/)
, [1,2..]
과 동일 [1..]
하고 map(...)$
할 수있다 (...)<$>
. Together 36 bytes : 온라인으로 사용해보십시오!
((scanl(+)0$(1/)<$>scanl(*)1[1..])!!)
길더라도 멋지게 보입니다.
\n->
작성해야합니다 기능.
⍳⊥⊢÷!
에서 발견 된 혼합 기본 트릭을 사용하여 내 대답 의 또 다른 도전을 . 사용합니다 ⎕IO←0
.
⍳⊥⊢÷! Right argument: n, the number of terms
⊢÷! v: 1÷(n-1)!
⍳ B: The array of 0 .. n-1
⊥ Expand v to length-n array V,
then mixed base conversion of V in base B
Base | Digit | Value
--------------------
0 | v | v×(1×2×..×(n-1)) = 1÷0!
1 | v | v×(2×3×..×(n-1)) = 1÷1!
2 | v | v×(3×..×(n-1)) = 1÷2!
.. | .. | ..
n-2 | v | v×(n-1) = 1÷(n-2)!
n-1 | v | v = 1÷(n-1)!
1÷(n-1)!
숫자가 어떻습니까? 명확히하기 위해 J로 번역 할 수 있습니까?
r♂!♂ìΣ
설명:
r♂!♂ìΣ
r range(N) ([0, N-1])
♂! factorial of each element
♂ì reciprocal of each element
Σ sum
import sj224.tflp.math.*;interface U{static void main(String[]a){BigRational r=null,s,t;r=s=t=r.ONE;for(int n=new java.util.Scanner(System.in).nextInt()-1;n-->0;){t=t.multiply(r);s=s.add(t.pow(-1));r=r.add(r.ONE);}System.out.print(s);}}
대부분의 다른 답변보다 오버플로 저항이 훨씬 뛰어납니다. 100 개의 항에 대해 결과는
31710869445015912176908843526535027555643447320787267779096898248431156738548305814867560678144006224158425966541000436701189187481211772088720561290395499/11665776930493019085212404857033337561339496033047702683574120486902199999153739451117682997019564785781712240103402969781398151364608000000000000000000000
~k=k<1?1:1/gamma(k+1)+~(k-1)
~k= #Define ~ to be
k<1 #If k is less than 1
?1 #to be one
:1/gamma(k+1) #else add the reciprocal factorial to
+~(k-1) #the function applied to the predecessor value
gamma(k+1)
factorial(k)
양의 정수 입력의 경우와 같고 음이 아닌 정수 이외의 모든 값에 대해 일반화합니다. 1 바이트를 절약하므로 왜 사용하지 않습니까?
sum(1/gamma(1:n))
수치 정밀도 문제는 특정 시점에 발생하기는하지만 매우 간단합니다.
sum1/k!,0..n
N
유한 정밀도 부동 소수점 수를 사용하는 경우 충분히 큰 결과가 동일합니다. 그 동작이 용납 될 수N
있습니까, 아니면 무한대에 가까워 질수록 결과가 점점 더 정확 해져야합니까?