سؤال

إنشاء تسلسل فيبوناتشي في أقل كمية من الشخصيات ممكن.أي لغة على ما يرام ، باستثناء واحد التي تحدد مع مشغل واحد ، f, الذي يطبع أرقام فيبوناتشي.

نقطة البداية: 25 14 حرفا في هاسكل:

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

f=0:scanl(+)1f
هل كانت مفيدة؟

المحلول

التوبة ، 9, و 8 أحرف

1↓[2?+1]

أو 10 حرف الطباعة:

1↓[2?+↓£1]

تشغيل باستخدام:

RePeNt "1↓[2?+1]"

التوبة هي كومة لعبة مبنية على لغة كتبت (وأنا لا تزال تحسين) في جميع المشغلين/وظائف/كتل/حلقات استخدام تدوين البولندية العكسي (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 حرف من Golfscript:

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 بنود في المكدس ، بحيث ثالث أعلى في الجزء العلوي (1 1 0)
  4. + ويضيف أعلى 2 البنود في المكدس (ترك 1 1)
  5. . التكرارات أعلى قيمة بحيث do حلقة يمكن أن تحقق truthiness (لتحديد ما إذا كان سيستمر)

تتبع هذه عقليا زوجين من الحلقات يكفي أن أقول لك أن هذا لا يلزم بالإضافة إلى توليد سلسلة فيبوناتشي القيم.

منذ 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; }

بيرل 6 - 22 الشخصيات:

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

x86 (ج-للاستدعاء) realmode, 14 بايت.
المدخلات ن على المكدس ، يعود Fn في الفأس.

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

Brainfuck, و 33 الشخصيات:

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

22 مع شخصيات dc:

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

كريس هو الحق ، أخذت بسيطة متكررة الخوارزمية.في الواقع, الخطية واحد هو أقصر حتى في لوا (بفضل متعددة مهمة)!جافا سكريبت ليست محظوظة جدا و جافا هو أسوأ من ذلك ، بعد أن تعلن فأر...

  • لوا (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;}

أود أن أكتب لوا ل البرمجية local a,b=1,0 وإنما هو أطول, لذلك دعونا تلوث _G!;-) المرجع السابق لشبيبة.

للتأكد من اكتمالها ، وهنا محطة العودية الإصدارات.لوا واحد باستخدام الذيل المكالمة بأسرع خطية واحدة (ولكن 69 حرف ، هو أطول!) - الحاجة إلى الاتصال بهم مع ثلاثة params, n,1,0.

  • لوا (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);}

تصحيح بعد تعليقات (بفضل سيباستيان) لم يكن تسلسل الحل, حتى هنا نذهب مع 42 حرف (يشمل ):

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 أرقام فيبوناتشي و ترجع لهم كسلسلة (دفعة لا يملك في الواقع مجموعات) في متغير %ص% (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

مايكروسوفت دفعة من 15 حرفا

القديمة التحدي ، لكن العالم يجب أن يعرف أنه هو ممكن:

%1
%0 %1%2 %1 #

الإخراج إلى stderr في الأحادية ، عد فقط على # حرفا.اعتمادا على النظام المضيف الفضاء القيود ، قد تنتج فقط أول 14 أرقام أو نحو ذلك.

اللغة:dc, شار العد:20

أقصر dc الحل.

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

F#:

(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 و يفيض إلى #NUM! خطأ على التوالي 1477.

توليد سلسلة فيبوناتشي.تسلسل تسلسل!

C#

أرى الكثير من الإجابات التي لا تولد في الواقع تسلسل, ولكن بدلا من ذلك فقط تعطيك رقم فيبوناتشي في موقف *ن استخدام العودية التي عندما يحلق لتوليد تسلسل يحصل على نحو متزايد أبطأ في أعلى القيم من 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

@أندريا انعاش

تكرارية pythonic fibonacci()'s الإصدار ينبغي أن ننظر بشيء من هذا القبيل:

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 إلى الأعلى ، مفصولة علامات التبويب (يمكن تخفيضها إلى 29 حرف بحذف 9, في الصف الأول على حساب أي فاصل بين الأرقام).

للأسف كل Befunge-93 المترجمين لقد حاولت يبدو أن تجاوز بعد 65 ألف ، وبالتالي فإن الناتج هو الصحيح فقط حتى 46368 (وهو F24).

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

وأكد أن العمل (مع التحذير أعلاه) مع على Befunge-93 مترجم في جافا سكريبت و البصرية Befunge الصغير كامل.

أنا فخور أن أقول هذا هو تماما العمل الأصلي (أيلم نسخ هذا القانون من أي شخص), و هو أقصر بكثير من على 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));
}

33 الشخصيات في C:

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

دلفي بريزم (دلفي ل .صافي)

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

49 حرف

السابق روبي سبيل المثال لن تعمل w/o أما الفاصلة المنقوطة أو أسطر ، حتى انها في الواقع 32 حرف.وإليك المثال الأول في الواقع ناتج تسلسل ، ليس فقط عودة قيمة الفهرس المحدد.

روبي:
53 حرف ، بما في ذلك أسطر:

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

أو إذا كنت تريد وظيفة نواتج قابلة للاستخدام البيانات هيكل ، 71 حرف:

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

أو قبول سطر الأوامر وسائط, 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