문제

를 생성한 피보나치에 적은 금액의 문자를 가능하다.어떤 언어를 확인 하나를 제외하고,정의하는 하나의 운영자 f, 출력하는 피보나치 숫자입니다.

시작점: 25 14 자:

f=0:1:zipWith(+)f(tail f)

f=0:scanl(+)1f
도움이 되었습니까?

해결책

회개하고, 9,8chars

1↓[2?+1]

또는 10 개 문자로 인쇄:

1↓[2?+↓£1]

실행하는 사용:

RePeNt "1↓[2?+1]"

회개하는 스 기반으로 장난감 언어를 썼다(그리고 아직도 개선)에서는 모든 사업자/functions/블록/루프를 사용하여 역 폴란드 표기법(RPN).

Command      Explanation                                              Stack
-------      -----------                                              -----

1            Push a 1 onto the stack                                  1
↓            Push last stack value                                    1 1
[            Start a do-while loop                                    1 1
2?           Push a two, then pop the 2 and copy the last 2 stack     1 1 1 1
             items onto the stack
+            Add on the stack                                         1 1 2
↓£           Push last stack value then print it                      1 1 2
1            Push a 1 onto the stack                                  1 1 2 1
]            Pop value (1 in this case), if it is a 0 exit the loop   1 1 2
             otherwise go back to the loop start.

대답은 스택에서 구축까지 자신과 같은:

1 1
1 1 2
1 1 2 3
1 1 2 3 5

그것은 결코 종료됩니다(그것은 eqivilent C#/JAVA do { } while(true) 루프)기 때문에 시퀀스지 않을 종료,하지만 종료하는 솔루션을 작성할 수 있습 따라서:

N_1↓nI{2?+}

12 습니다.

누가 이제까지 이것을 읽:(

다른 팁

영어 18 자 ..

"피보나치 시퀀스"

좋아, 실패. :)

13 숯 골프 스크립트:

2,~{..p@+.}do

스크립트 작동을 설명하기위한 업데이트 :

  1. 2, 배열을 만듭니다 [0 1]
  2. ~ 스택에 해당 배열을 넣습니다
  3. 그래서 우리는 우리가 실행할 때 do, 우리는 스택을 시작합니다 0 1 (스택 상단에서 1)

그만큼 do 고리:

  1. . 스택의 상단 항목을 복제합니다. 여기서 우리는 이것을 두 번합니다 (우리를 떠나 0 1 1 1 초기 실행에)
  2. p 최상위 가치를 인쇄합니다 (우리를 남겨 두십시오 0 1 1)
  3. @ 스택에서 상위 3 개 항목을 회전시켜 3 분의 1이 상단에 있습니다 (1 1 0)
  4. + 스택에 상위 2 개 항목을 추가합니다 ( 1 1)
  5. . 최상위 값을 복제하여 do 루프는 진실성을 확인할 수 있습니다 (계속할지 여부를 결정하기 위해)

정신적 으로이 두 개의 루프를 정신적으로 추적하면 이것이 Fibonacci 시퀀스 값을 생성하는 데 필요한 추가 기능을 제공 할 수 있습니다.

Golfscript에는 bignums가 있기 때문에 정수 오버플로가 없을 것이므로 do 루프는 결코 0이 아닙니다. 따라서 스크립트는 영원히 실행됩니다.

언어 : C ++ 컴파일러 오류
캐릭터 : 205

#define t template <int n> struct 
#define u template <> struct f
t g { int v[0]; };
t f { enum { v = f<n-1>::v + f<n-2>::v }; g<v> x;};
u<1> { enum { v = 1 }; };
u<0> { enum { v = 0 }; };
int main() { f<10> x; }

Perl 6-22 문자 :

sub f{1,1...{$^a+$^b}}

X86 (C-Callable) 영역, 14 바이트.
입력은 스택에서 n이며, f를 반환합니다N도끼로.

59 31 C0 E3 08 89 C3 40 93 01 D8 E2 FB C3

Brainfuck, 33 자 :

+.>+.[<[>+>+<<-]>.[<+>-]>[<+>-]<]

DC가있는 22 자 :

1[pdd5**v1++2/lxx]dsxx

중 하나로 호출 :

dc -e'1[pdd5**v1++2/lxx]dsxx'

또는:

echo '1[pdd5**v1++2/lxx]dsxx' | dc

참고 : 내 일이 아니라 데친다 Perlmonks.

제이, 비수체 기능을위한 27 자 :

f=:3 :'{:}.@(,+/)^:y(0 1x)'

+/ 목록 위에 합산합니다.
(,+/) 목록의 합을 꼬리에 추가합니다.
}.@(,+/) 목록을 요약하고 요소를 꼬리에 추가하고 첫 번째 요소를 떨어 뜨립니다.
}.@(,+/)^:y 위의 기능을 반복합니다 y 타임스.
}.@(,+/)^:y(0 1x) 위의 기능을 목록에 적용합니다 (0,1) (그만큼 x 정수로 만듭니다).
{:}.@(,+/)^:y(0 1x) 위의 출력 목록의 마지막 요소를 취합니다.
f=:3 :'{:}.@(,+/)^:y(0 1x)' 정의합니다 f 하나의 변수에서 함수가됩니다 y.

기록을 위해 :

  • 루아 (66 숯) : function f(n)if n<2 then return n else return f(n-1)+f(n-2)end end
  • 자바 스크립트 (41 숯) : function f(n){return n<2?n:f(n-1)+f(n-2)}
  • 자바 (41 숯) : int f(int n){return n<2?n:f(n-1)+f(n-2);}

나는 매우 간결한 언어가별로 능숙하지 않다 ... : : p

Chris는 맞습니다. 단순하고 재귀한 알고리즘을 가져갔습니다. 실제로, 선형은 LUA에서 훨씬 짧습니다 (여러 할당 덕분)! JavaScript는 운이 좋지 않으며 Java는 더 나쁘고 Vars를 선언해야합니다 ...

  • 루아 (60 숯) : function f(n)a=1;b=0;for i=1,n do a,b=b,a+b end return b end
  • 자바 스크립트 (60 숯) : function f(n){a=1;b=i=0;for(;i++<n;){x=a+b;a=b;b=x}return b}
  • 자바 (71 숯) : int f(int n){int a=1,b=0,i=0;for(;i++<n;){int x=a+b;a=b;b=x;}return b;}

나는 Lua의 코드를 작성할 것입니다 local a,b=1,0 그러나 더 길다. 그래서 _g! ;-) JS를위한 IDEM.

완전성을 위해 여기에는 터미널 재귀 버전이 있습니다. Lua의 Tail Call을 사용하는 Lua는 선형만큼 빠릅니다 (그러나 69 숯은 가장 길다!) - 세 가지 매개 변수, n, 1,0으로 호출해야합니다.

  • Lua (69 숯, 더 길다!) : function f(n,a,b)if n<1 then return b else return f(n-1,b,a+b)end end
  • 자바 스크립트 (44 숯) : function f(n,a,b){return n<1?b:f(n-1,b,a+b)}
  • 자바 (52 숯) : int f(int n,int a,int b){return n<1?b:f(n-1,b,a+b);}

댓글 후 수정 (Sebastian에게 감사합니다)은 시퀀스 솔루션이 아니 었으므로 여기서는 42 개의 숯 ( n 포함)을 사용합니다.

def f(a=0,b=1):
 while 1:yield a;a,b=b,a+b

아래의 오래된 게시물

파이썬, 38 숯.

f=lambda n:n if n<2 else f(n-1)+f(n-2)

너무 짧지는 않지만 내 의견으로는 가장 읽을 수 있습니다 : P

편집 : 여기에 분석 방법이 있습니다 (누군가가 파이썬에서 그것을 볼 필요가 있다면 :-)

f=lambda n:int(.5+(.5+5**.5/2)**n/5**.5)

Windows XP (및 이후 버전) 배치 스크립트. 이 배치 함수 단일 인수 - 금액이 주어지면 금액+1 피보나치 숫자를 생성하고 변수 % r % (369 자 또는 347 자 - 우리가 들여 쓰기를 제거하는 경우)로 문자열 (배치가 실제로 세트가 없음)으로 반환합니다. :

:f
    set i=0
    set r=1
    set n=1
    set f=0
    :l
        if %n% GTR %~1 goto e
        set f=%f% %r%
        set /A s=%i%+%r%
        set i=%r%
        set r=%s%
        set /A n+=1
        goto l
    :e
    set r=%f%
    exit /B 0

그리고 여기에 완전한 스크립트가 있습니다. 작동하는 것을 볼 수 있습니다 (CMD 또는 BAT 파일로 복사하여 실행할 수 있습니다).

@echo off
call :ff 0
call :ff 1
call :ff 2
call :ff 3
call :ff 5
call :ff 10
call :ff 15
call :ff 20
exit /B 0

:ff
    call :f "%~1"
    echo %~1: %r%
    exit /B 0

:f
    set i=0
    set r=1
    set n=1
    set f=0
    :l
        if %n% GTR %~1 goto e
        set f=%f% %r%
        set /A s=%i%+%r%
        set i=%r%
        set r=%s%
        set /A n+=1
        goto l
    :e
    set r=%f%
    exit /B 0

Microsoft 배치 -15 자

오래된 도전이지만 세상은 가능하다는 것을 알아야합니다.

%1
%0 %1%2 %1 #

출력은 # 문자 만 계산하여 단색의 stderr에 대한 것입니다. 호스트 시스템의 공간 제한에 따라 처음 14 숫자 만 생성 할 수 있습니다.

언어 : DC, 문자 수 : 20

더 짧은 DC 솔루션.

dc -e'1df[dsa+plarlbx]dsbx'

에프#:

(0,1)|>Seq.unfold(fun(a,b)->Some(a,(b,a+b)))

44 숯

다음은 45 자로 구성표를 사용하는 최선의 방법입니다.

(let f((a 0)(b 1))(printf"~a,"b)(f b(+ a b)))

MS Excel : 11 자 :

=SUM(A1:A2)

유형 1 상단 2 세포에서, 위의 공식을 세포 A3에 넣습니다. 포뮬러를 스프레드 시트 아래로 복사하십시오.

행 74의 부동 소수점 반올림으로 인해 정확도가 상실됩니다.
10^307을 초과하고 a로 넘쳐납니다 #NUM! 행 1477에 오류.

Fibonacci 시퀀스를 생성하십시오. 시퀀스 시퀀스!

씨#

나는 실제로 시퀀스를 생성하지 않는 많은 답을보고 있지만, 재귀를 사용하여 위치 *n에서 fibonacci 번호 만 제공합니다. N.

using System;
static void Main()
{
  var x = Math.Sqrt(5);
  for (int n = 0; n < 10; n++)
    Console.WriteLine((Math.Pow((1 + x) / 2, n) - Math.Pow((1 - x) / 2, n)) / p) ;
}
let rec f l a b =function 0->a::l|1->b::l|n->f (a::l) b (a+b) (n-1) in f [] 1 1;;

80 자이지만 선형 시간에 시퀀스를 실제로 생성합니다.

루비 (30 자) :

def f(n)n<2?n:f(n-1)+f(n-2)end

@andrea ambu

반복적 인 피티닉 fibonacci()의 버전은 다음과 같이 보일 것입니다.

def fibonacci(a=0, b=1):
    while True:
        yield b
        a, b = b, a+b

루아 -49 숯

function f(n)return n<2 and n or f(n-1)+f(n-2)end

Befunge-93

31 숯

탭으로 분리 된 피보나치 번호의 무한한 목록을 0에서 0에서 출력합니다 (삭제하여 29 숯으로 줄일 수 있습니다. 9, 첫 번째 행에서 숫자 사이의 공백이없는 비용으로).

불행히도, 내가 시도한 모든 Befunge-93 통역사는 65k 이후에 오버플로 보이는 것처럼 보이므로 출력은 46368 ( 에프24).

#v::1p1>01g:.\:01p+9,#
 >     ^

(위의 경고와 함께)로 확인되었습니다 JavaScript의 Befunge-93 통역사 그리고 시각적 인 Befunge 애플릿 가득.

나는 이것이 완전히 독창적 인 작품이라고 말한 것을 자랑스럽게 생각합니다 (즉, 나는이 코드를 다른 사람에게서 복사하지 않았습니다). 현재 Rosetta 코드에있는 Befunge 솔루션.

brainf ** k :

>+++++>+>+<[[>]<<[>>+>+<<<-]>>>[<<<+>>>-]<<[>+>+<<-]>>[<<+>>-]<[<]>-]

첫 번째 5를 생성합니다. 더 많은 것을 생성하려면 처음에 5 +를 추가로 교체합니다.

>++++++++++++++++++++++>+>+<[[>]<<[>>+>+<<<-]>>>[<<<+>>>-]<<[>+>+<<-]>>[<<+>>-]<[<]>-]

가장 짧은 것은 아니지만 게시 당시 가장 빠릅니다. :-)

float f(float n) {
    return (pow(1+sqrt(5.0))/2.0),n) - pow(1+sqrt(5.0))/2.0),n)/sqrt(n));
}

C의 33 자 :

F(n){return n<2?n:F(n-1)+F(n-2);}

델파이 프리즘 (.NET 용 델파이)

f:func<int32,int32>:=n->iif(n>1,f(n-1)+f(n-2),n)

49 숯

이전 루비 예제는 세미콜론이나 신축성과 함께 작동하지 않으므로 실제로 32 개의 숯입니다. 지정된 인덱스의 값을 반환하는 것이 아니라 시퀀스를 실제로 출력하는 첫 번째 예는 다음과 같습니다.

루비:
Newlines를 포함한 53 숯 :

def f(n);n<2?1:f(n-1)+f(n-2);end
0.upto 20 {|n|p f n}

또는 사용 가능한 데이터 구조를 출력하는 기능을 원한다면 71 chars :

def f(n);n<2?1:f(n-1)+f(n-2);end
def s(n);(0..n).to_a.map {|n| f(n)};end

또는 명령 줄 Args 수락, 70 숯 :

def f(n);n<2?1:f(n-1)+f(n-2);end
p (0..$*[0].to_i).to_a.map {|n| f(n)}

PDP-11 어셈블러 (원천)

    .globl  start
    .text
start:
    mov $0,(sp)
    mov $27,-(sp)
    jsr pc, lambda
print_r1:
    mov $outbyte,r3
div_loop:
    sxt r0
    div $12,r0
    add $60,r1
    movb    r1,-(r3)
    mov r0,r1
    tst r1
    jne div_loop
    mov $1,r0
    sys 4; outtext; 37
    mov $1,r0
    sys 1
lambda:
    mov 2(sp),r1
    cmp $2,r1
    beq gottwo
    bgt gotone
    sxt r0
    div $2,r0
    tst r1
    beq even
odd:
    mov 2(sp),r1
    dec r1
    sxt r0
    div $2,r0
    mov r0,-(sp)
    jsr pc,lambda
    add $2,sp
    mov r0,r3
    mov r1,r2
    mov r3,r4
    mul r2,r4
    mov r5,r1
    mov r3,r4
    add r2,r4
    mul r2,r4
    add r5,r1
    mul r3,r3
    mov r3,r0
    mul r2,r2
    add r3,r0
    rts pc
even:
    mov 2(sp),r1
    sxt r0
    div $2,r0
    dec r0
    mov r0,-(sp)
    jsr pc,lambda
    add $2,sp
    mov r0,r3
    mov r1,r2
    mov r2,r4
    mul r2,r4
    mov r5,r1
    mov r2,r4
    add r3,r4
    mul r4,r4
    add r5,r1
    mov r2,r4
    add r3,r4
    mul r2,r4
    mov r5,r0
    mul r2,r3
    add r3,r0
    rts pc
gotone:
    mov $1,r0
    mov $1,r1
    rts pc
gottwo:
    mov $1,r0
    mov $2,r1
    rts pc

    .data
outtext:
    .byte 62,63,162,144,40,106,151,142,157,156
    .byte 141,143,143,151,40,156,165,155
    .byte 142,145,162,40,151,163,40
    .byte 60,60,60,60,60
outbyte:
    .byte 12
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top