codeEagle[] :: 피보나치 + 팩토리얼

cppig1995의 이미지

일종의 코드 골프 글타래입니다.

* 피보나치 수열과 팩토리얼을 구하는 라이브러리를 작성한다.
* 사용법에는 상관이 없다. 그러나 꼼수로 인정될 만한 방법은 안 된다.
* 사용 언어에는 제한이 없되, 프로그래밍 언어의 기본 기능만 사용해야 한다.
* 언어 표준에 의해 이 프로그램이 23번째 피보나치 수, 7!까지 구할 수 있어야 합니다. (솔직히 C, C++ 때문에 생긴 제한입니다.)
* 계산할 숫자는 컴파일 시간에 주어짐.

정도입니다.

일단 시작은 가볍게 C++로 해보겠습니다. 150바이트입니다. (개행 = 1바이트, 마지막 개행은 세지 않음)

#define T template<
#define S(s,x) >struct s{enum{_=x};};
T int n S(F,F<n-2>::_+F<n-1>::_)T S(F<2>,1)T S(F<1>,1)T int n S(f,f<n-1>::_*n)T S(f<0>,1)

시간복잡도가 O(0)입니다.
사실, 실행 시간에 아무 것도 하지 않는데다, 컴파일러가 알아서 기존에 구했던 값에 캐시를 적용해 줍니다.
피보나치 수열의 n번째 숫자를 구하려면 F::_를, n!을 구하려면 f::_를 하면 됩니다.

...많은 /*괴악한 괴수*/ 분들의 참여 부탁드리겠습니다.

gimmesilver의 이미지

펙토리얼(17bytes)
f n=product[1..n]

피보나치(45bytes)
f=(g!!)where g@(x:y)=1:1:[a+b|(a,b)<-zip g y]

------------------------
http://agbird.egloos.com

------------------------
http://agbird.egloos.com

warpdory의 이미지

http://kldp.org/node/89814 읽고 내일까지 보고해.

---------
귓가에 햇살을 받으며 석양까지 행복한 여행을...
웃으며 떠나갔던 것처럼 미소를 띠고 돌아와 마침내 평안하기를...
- 엘프의 인사, 드래곤 라자, 이영도

즐겁게 놀아보자.
http://akpil.egloos.com


---------
귓가에 햇살을 받으며 석양까지 행복한 여행을...
웃으며 떠나갔던 것처럼 미소를 띠고 돌아와 마침내 평안하기를...
- 엘프의 인사, 드래곤 라자, 이영도

즐겁게 놀아보자.

leonid의 이미지

팩토리얼

def f(n)n<2?1:n*f(n-1)end
25바이트 입니다.

함수를 사용할 필요 없다고 하면

eval [1,*1..n]*'*'
로 하는게(18바이트) 훨씬 짧습니다.

n이 항상 양수라고 가정하면

eval [*1..n]*'*'
좀더 짧은 코드(16바이트)가 가능해집니다.

피보나치수열은 제가 참여하고 있는 코드골프 문제가 있기 때문에 비공개 :P