Fibonacci + Fizz Buzz = Fibo Nacci!


74

Fibonacci + FizzBuzz = Fibo Nacci!


ความท้าทายของคุณคือการสร้างโปรแกรม Fibo Nacci!

  • โปรแกรม Fibo Nacci แสดงผลตัวเลข100 Fibonacci แรก(เริ่มจาก 1)
  • หากหมายเลข Fibonacci หารด้วย 2 และ 3 (เช่นหารด้วย 6) ให้ส่งออก FiboNacci แทนตัวเลข
  • มิฉะนั้นถ้าจำนวนฟีโบนักชีหารด้วย 2 ให้เอาท์พุท Fibo แทนตัวเลข
  • มิฉะนั้นถ้าจำนวนฟีโบนักชีหารด้วย 3 ให้เอาท์พุท Nacci แทนที่จะเป็นตัวเลข

กฎระเบียบ

  • โปรแกรมไม่ควรรับอินพุต
  • โปรแกรมควรส่งออกบรรทัดใหม่ ( \n) หลังจากทุกรายการ
  • โปรแกรมไม่ควรพิมพ์สิ่งใดไปยัง STDERR
  • โปรแกรมจะต้องส่งออก100 Fibo Nacci รายการแรก (เริ่มจาก 1)
  • ไม่อนุญาตช่องโหว่มาตรฐาน (ตามค่าเริ่มต้น)
  • นี่คือสั้นที่สุดในหน่วยไบต์!

นี่คือผลลัพธ์ที่คาดหวัง:

1
1
Fibo
Nacci
5
Fibo
13
Nacci
Fibo
55
89
FiboNacci
233
377
Fibo
Nacci
1597
Fibo
4181
Nacci
Fibo
17711
28657
FiboNacci
75025
121393
Fibo
Nacci
514229
Fibo
1346269
Nacci
Fibo
5702887
9227465
FiboNacci
24157817
39088169
Fibo
Nacci
165580141
Fibo
433494437
Nacci
Fibo
1836311903
2971215073
FiboNacci
7778742049
12586269025
Fibo
Nacci
53316291173
Fibo
139583862445
Nacci
Fibo
591286729879
956722026041
FiboNacci
2504730781961
4052739537881
Fibo
Nacci
17167680177565
Fibo
44945570212853
Nacci
Fibo
190392490709135
308061521170129
FiboNacci
806515533049393
1304969544928657
Fibo
Nacci
5527939700884757
Fibo
14472334024676221
Nacci
Fibo
61305790721611591
99194853094755497
FiboNacci
259695496911122585
420196140727489673
Fibo
Nacci
1779979416004714189
Fibo
4660046610375530309
Nacci
Fibo
19740274219868223167
31940434634990099905
FiboNacci
83621143489848422977
135301852344706746049
Fibo
Nacci

แคตตาล็อก

สแน็ค Stack โค้ดที่ด้านล่างของโพสต์นี้สร้างแคตตาล็อกจากคำตอบที่) เป็นรายการที่สั้นที่สุดของการแก้ปัญหาต่อภาษา A และ B) เป็นลีดเดอร์โดยรวม

เพื่อให้แน่ใจว่าคำตอบของคุณปรากฏขึ้นโปรดเริ่มคำตอบด้วยหัวข้อโดยใช้เทมเพลต Markdown ต่อไปนี้:

## Language Name, N bytes

ที่Nมีขนาดของส่งของคุณ หากคุณปรับปรุงคะแนนของคุณคุณสามารถเก็บคะแนนเก่าไว้ในพาดหัวโดยการตีพวกเขาผ่าน ตัวอย่างเช่น

## Ruby, <s>104</s> <s>101</s> 96 bytes

หากคุณต้องการรวมหลายตัวเลขไว้ในส่วนหัวของคุณ (เช่นเนื่องจากคะแนนของคุณคือผลรวมของไฟล์สองไฟล์หรือคุณต้องการแสดงรายการบทลงโทษการตั้งค่าสถานะของล่ามแยกต่างหาก) ตรวจสอบให้แน่ใจว่าคะแนนจริงเป็นตัวเลขสุดท้ายในส่วนหัว:

## Perl, 43 + 2 (-p flag) = 45 bytes

คุณยังสามารถตั้งชื่อภาษาให้เป็นลิงค์ซึ่งจะปรากฏในตัวอย่างข้อมูล:

## [><>](http://esolangs.org/wiki/Fish), 121 bytes


6
แล้วภาษาที่มีจำนวนเต็มสูงสุด 64 บิตเท่านั้นล่ะ :( มีจำนวน 90 เส้นไม่เพียงพอหรือไม่
Zereges

3
@Zereges ในเรื่องนั้นฉันขอโทษ :(
Kritixi Lithos

28
อาจจะเรียกได้ว่า "Fizzo Nacci"
LegionMammal978

4
@SztupY เนื่องจากผลลัพธ์ในคำถามนี้ไม่เปลี่ยนแปลงอย่างสมบูรณ์คุณจึงไม่จำเป็นต้องมีจำนวนเต็มเลย เพียงปฏิบัติต่อคำถามนี้เป็นคำถามที่ซับซ้อน kolmogorov (ฉันยังเพิ่มแท็ก) และไปจากที่นั่น
Chris Jester-Young

3
@ ChrisJester-Young ยังคงมีข้อ จำกัด ที่ไม่จำเป็นซึ่งอาจทำให้ผู้ใช้งานที่สร้างสรรค์ต้องหลีกเลี่ยงงานนี้ และโซลูชั่นส่วนใหญ่ (รวมถึงการ upvoted ที่ 2 ที่มากที่สุด) กำลังแตกหักอยู่แล้ว
SztupY

คำตอบ:


18

Pyth, 37 ไบต์

ฉันวนรอบตัวเลขฟีโบนักชีแทนการสร้างไว้ล่วงหน้าเพราะมันสั้นมากที่จะทำ

K1V100|+*"Fibo"!%=+Z~KZ2*"Nacci"!%Z3Z

ลองออนไลน์


ขอแสดงความยินดีที่ชนะการท้าทายนี้! ฉันชอบที่โซลูชันนี้เร็ว
Kritixi Lithos

45

Python 2, 62 ไบต์

a=b=1;exec"print~a%2*'Fibo'+~a%3/2*'Nacci'or a;a,b=b,a+b;"*100

ไม่แตกต่างจาก FizzBuzz มาตรฐานจริงๆ


1
มันอัศจรรย์มาก.
J Atkin

ฉันจำเป็นต้องจำโครงสร้างลูปนี้สำหรับกอล์ฟรูบี้ต่อไปของฉัน มันอัศจรรย์มาก.
ตบมือ

21

C ++ 11 metaprogramming 348 ไบต์

#include<iostream>
#define D static const unsigned long long v=
template<int L>struct F{D F<L-1>::v+F<L-2>::v;};template<>struct F<2>{D 1;};template<>struct F<1>{D 1;};template<int Z>struct S:S<Z-1>{S(){auto&s=std::cout;auto l=F<Z>::v;s<<(l%2?"":"Fibo")<<(l%3?"":"Nacci");(l%2&&l%3?s<<l:s)<<"\n";}};template<>struct S<0>{S(){}};int main(){S<100>s;}

เพราะเหตุใด มันคอมไพล์ด้วยwarning C4307: '+': integral constant overflow, ทำงานได้ดี, แต่หมายเลขฟีโบนัชชี 93+ นั้นไม่แสดงอย่างถูกต้อง (เนื่องจากล้น), ดังนั้นนี่คือรายการที่ไม่ถูกต้อง (แต่ฉันไม่สามารถชนะได้ด้วยไบต์จำนวนมาก)

Ungolfed

#include <iostream>
#define D static const unsigned long long v = 
template<int L>struct F { D F<L - 1>::v + F<L - 2>::v; };
template<>struct F<2> { D 1; };
template<>struct F<1> { D 1; };

template<int Z>struct S : S<Z - 1>
{
    S()
    {
        auto&s = std::cout;
        auto l = F<Z>::v;
        s << (l % 2 ? "" : "Fibo")
          << (l % 3 ? "" : "Nacci");
        (l % 2 && l % 3 ? s << l : s) << "\n";
    }
};

template<>struct S<0>
{
    S() { }
};

int main()
{
    S<100>s;
}

คุณสามารถใช้สตริงที่ระเบิดได้ ( template <char H, char ...T>) ในเทมเพลตของคุณเพื่อจัดการค่าที่มีความยาวตามอำเภอใจ จากนั้นมันจะเป็นเรื่องของการตรวจสอบอักขระ 2 ตัวสุดท้ายในแต่ละสายอักขระเพื่อกำหนดการหารด้วย 2 และ / หรือ 3
Mego

@ เล็กน้อยฉันไม่เข้าใจคุณ มันจะช่วยฉันจัดการค่าได้อย่างไรซึ่งไม่พอดีกับ 64 บิต นอกจากนี้คุณต้องการตัวเลขทั้งหมดเพื่อดูว่าจำนวนหารด้วย 3 หรือไม่
Zereges

เงื่อนไขอาจยาวโดยพลการ (จนกว่าหน่วยความจำของคุณจะหมด) และคุณพูดถูกฉันทำให้ความคิดเห็นของฉันยุ่ง ยังคุณสามารถคำนวณผลรวมดิจิตอลเพื่อกำหนดการหารด้วย 3
Mego

@Mego การดำเนินการเพิ่มเติมของสตริงเหล่านั้นจะต้องใช้ความพยายามมากขึ้น
Zereges

1
คุณสามารถใช้ภาษา gnu และใช้งาน__uint128_tได้

14

C #, 175 171 152 145 ไบต์

class c{static void Main(){for(dynamic a=1m,b=a,c=0;c++<100;b=a+(a=b))System.Console.WriteLine(a%6>0?a%2>0?a%3>0?a:"Nacci":"Fibo":"FiboNacci");}}

ไม่มีการบีบอัด:

class c {
    static void Main()
    {
        for (dynamic a = 1m, b = a, c = 0; c++ < 100; b = a + (a = b))
            System.Console.WriteLine(a%6>0?a%2>0?a%3>0?a:"Nacci":"Fibo":"FiboNacci");
    }
}

แม้แต่การบีบอัดเอาต์พุตด้วย DeflateStream ที่ต่ำที่สุดที่ฉันจะได้คือ 191 ตัวอักษรดังนั้นนี่น่าจะใกล้เคียงกับคำตอบที่ดีที่สุดเท่าที่จะเป็นไปได้ ต้องมีความอัปยศ BigInteger
Jodrell

"ใช้ระบบ;" จะให้อีกขนาด -1
olegz

1
ฉันยังต้องใช้คำนำหน้า System.Numerics กับระบบแม้จะใช้: -S ดังนั้นฉันจึงไม่แน่ใจว่าการใช้จะทำงานได้หรือไม่
Jodrell

1
คุณสามารถบันทึกได้ 3 ตัวอักษรโดยแทนที่==0s ด้วย>0และสลับเทนเนอร์:class c{static void Main(){for(System.Numerics.BigInteger a=1,b=1,c=0;c++<100;b=a+(a=b))System.Console.WriteLine(a%6>0?a%2>0?a%3>0?a:(object)"Nacci":"Fibo":"FiboNacci");}}
Bob

3
คุณสามารถบันทึกอีก 7 ตัวละครโดยการเปลี่ยนdecimal a=1,b=1ไปdynamic a=1m,b=aและจากนั้นคุณจะสูญเสีย(object):)
Timwi

13

Oracle SQL, 212 ไบต์

ไม่ใช่ภาษากอล์ฟ แต่ฉันต้องลอง ...

การต่อแถวทั้งหมดกับ\n:

WITH F(R,P,C)AS(SELECT 1,0,1 FROM DUAL UNION ALL SELECT R+1,C,P+C FROM F WHERE R<100)SELECT LISTAGG(NVL(DECODE(MOD(C,2),0,'Fibo')||DECODE(MOD(C,3),0,'Nacci'),''||C),CHR(13))WITHIN GROUP(ORDER BY R)||CHR(13)FROM F

SQLFIDDLE

หรือมีหนึ่งรายการจากลำดับต่อแถว (162 ไบต์):

WITH F(R,P,C)AS(SELECT 1,0,1 FROM DUAL UNION ALL SELECT R+1,C,P+C FROM F WHERE R<100)SELECT NVL(DECODE(MOD(C,2),0,'Fibo')||DECODE(MOD(C,3),0,'Nacci'),''||C)FROM F

2
ยอดเยี่ยมเพียงใช้ SQL
Wayne Werner

เพียงใช้อันสุดท้ายเพราะมันคือ "เทียบเท่า" เพื่อเอาท์พุท "ต่อบรรทัด" และมันก็เป็นโค้ดที่ดีจริงๆ ทำได้ดี!
Ismael Miguel

@IsmaelMiguel ถ้ามันทำงานใน SQL * Plus (หรืออินเตอร์เฟสบรรทัดคำสั่งอื่น) จะมีการขึ้นบรรทัดใหม่หลังจากแต่ละแถว (เป็นส่วนหนึ่งของวิธีที่รายงานเอาต์พุตแบบสอบถาม) อย่างไรก็ตามนั่นคือฟังก์ชั่นของ CLI และไม่ใช่ภาษา SQL - เพื่อให้เป็นไปตามกฎThe program should output a new line (\n) after every entryฉันจะปล่อยให้มันเป็นโค้ดที่ยาวกว่า แต่อันที่สั้นกว่านั้นสามารถทำได้ตามมาตรฐาน (โดยไม่ต้องพึ่งพา CLI) โดยเพิ่ม||CHR(13)ก่อนสุดท้ายFROMสำหรับ 171 chracters
MT0

คุณใช้"\n"ไม่ได้เหรอ ดูเหมือนว่าจะทำงานกับ MySQL (Running select length("\n")return 1 และการรันselect "\n"จะไม่ส่งคืนnเช่นเดียวกับการselect "\p"ส่งคืนpเนื่องจากการหลบหนีไม่ถูกต้อง)
Ismael Miguel

SELECT LENGTH('\n') FROM DUALเอาท์พุท2ใน Oracle เป็นไม่ได้รับการแปลงเป็น'\n' CHR(13)
MT0

11

ShapeScript , 83 ไบต์

11'1?1?+'77*2**!""'"%r
"@+@0?2%1<"Fibo"*1?3%1<"Nacci"*+0?_0>"@"*!#%'52*0?**!"'"$""~

ลองออนไลน์!


15
ดูเหมือนว่าแมวของฉันจะกระโดดขึ้นไปบนแป้นพิมพ์ในขณะที่ฉันพยายามเปิดกุญแจ งานที่ดี.
ช่วง

2
@ เฟสเปรียบเปรย ไม่ว่าคุณจะมองอย่างใกล้ชิด หรือคุณมีแมวตัวเล็ก ๆ หรือแป้นพิมพ์ยักษ์ เพราะแมวตัวนี้จัดการเพื่อพิมพ์ Fibo และ Nacci แต่อย่างอื่นหลีกเลี่ยงการคีย์ตัวอักษรทั้งหมดบันทึกไว้สำหรับหนึ่ง r
John Dvorak

3
@JanDvorak ผมคิดว่ามีขั้นตอนการตั้งค่าแมโครที่;)
เวย์นเวอร์เนอร์

2
@ เฟส 1. ทำไมแมวของคุณอยู่ในห้องของคุณ? 2. ทำไมคุณต้องการเปิดใช้งานปุ่มปักหมุด? 3 หรือไม่? ทำไมคุณถึงไม่มีกล่องดักแมวบนโต๊ะทำงานเพื่อหลีกเลี่ยงแมวกระโดดบนคีย์บอร์ด
Nzall

7

Java, 407 398 351 308 ไบต์

นำมารวมกันด้วยความช่วยเหลือจาก @Geobits และ @ SamYonnou

กระจายคำ: Verbose == Java

import java.math.*;class A{public static void main(String[]w){BigInteger a=BigInteger.ZERO,b=a.flipBit(0),c,z=a,t=a.flipBit(1),h=t.flipBit(0),s=t.flipBit(2);for(int i=0;i<100;i++){System.out.println(b.mod(s).equals(z)?"FiboNacci":b.mod(t).equals(z)?"Fibo":b.mod(h).equals(z)?"Nacci":b);c=a;a=b;b=c.add(b);}}}

เวอร์ชันที่ไม่ถูกปรับแต่ง:

import java.math.*;

class A
{
  public static void main(String[]w)
  {
    BigInteger a=BigInteger.ZERO,b=a.flipBit(0),c,z=a,t=a.flipBit(1),h=t.flipBit(0),s=t.flipBit‌​(2);
    for(int i=1;i<=100;i++) {
      System.out.println(b.mod(s).equals(z)?"FiboNacci":b.mod(t).equals‌​(z)?"Fibo":b.mod(h).equals(z)?"Nacci":b);                
      c=a;a=b;b=c.add(b);
    }
  }
}

1
นี้สามารถเล่นกอล์ฟได้มากขึ้น นำเข้าjava.math.*แทนทุกสิ่ง ใช้ค่าคงที่ONEและZEROแทนnewBigIntegers ลบออกpublicจากชั้นเรียน แพ็คทุกอย่างยกเว้นprintlnคำสั่งในforร่างกายภายในการประกาศวนรอบ ฯลฯ ฉันขอแนะนำให้ดูที่เคล็ดลับการเล่นกอล์ฟ Javaโดยทั่วไป
Geobits

@Geobits เสร็จสิ้น! 'น่าเสียดายที่ฉันไม่คุ้นเคยกับBigIntegerเทคนิคการตีกอล์ฟที่หลากหลาย
ถุงเท้า

กำลังจัดเก็บ BigInteger.ZERO โดยใช้ flipBit (... ) เพื่อเป็นทางเลือกแทน BigInteger (... ) ใหม่และบางสิ่งเล็กน้อยอื่น ๆ ที่คุณสามารถทำได้จนถึง 308:import java.math.*;class A{public static void main(String[]w){BigInteger a=BigInteger.ZERO,b=a.flipBit(0),c,z=a,t=a.flipBit(1),h=t.flipBit(0),s=t.flipBit(2);for(int i=0;i<100;i++){System.out.println(b.mod(s).equals(z)?"FiboNacci":b.mod(t).equals(z)?"Fibo":b.mod(h).equals(z)?"Nacci":b);c=a;a=b;b=c.add(b);}}}
SamYonnou

ดูเหมือนว่าBigIntegerจะส่งคืนเสมอBigInteger.ZEROเมื่อการดำเนินการบางอย่างadd(...)ประเมินเป็นศูนย์เพื่อให้คุณสามารถใช้==แทน.equals(z)และคุณสามารถทำได้ด้วยการจัดเก็บs=t.flipBit‌​(2)(6) และมอบหมายงานภายในที่ฉลาดเช่นนั้น: import java.math.*;class A{public static void main(String[]w){BigInteger a=BigInteger.ZERO,b=a.flipBit(0),c,d,z=a,t=a.flipBit(1),h=t.flipBit(0);for(int i=0;i<100;i++){System.out.println((c=b.mod(t)).add(d=b.mod(h))==z?"FiboNacci":c==z?"Fibo":d==z?"Nacci":b);c=a;a=b;b=c.add(b);}}}การเปลี่ยนแปลงเหล่านี้ทำให้มันลดลงถึง 280
SamYonnou

2
ฉันคิดว่าคุณหมายถึงVerbose.isEqualTo(Java)
Cyoce

7

Mathematica, 80 ไบต์

a=b_/;#∣b&;Print/@(Fibonacci@Range@100/.{%@6->FiboNacci,%@2->Fibo,%@3->Nacci})

การปรับโซลูชัน FizzBuzz ที่เก่ากว่าของฉัน


1
@JacobAkkerboom ขออภัยแก้ไขแล้ว นอกจากนี้สำหรับรุ่นน้อยกว่า 10.3 แทนที่ด้วยEcho Print
LegionMammal978

5

Ruby, 71 66 ไบต์

a=b=1;100.times{puts [b,f='Fibo',n='Nacci',f,b,f+n][~b%6];a=b+b=a}

ungolfed:

a = b = 1 #starting values
100.times{
  # create an array, and selects a value depending on the current number
  puts([b, 'Fibo', 'Nacci', 'Fibo', b, 'FiboNacci'][~b%6])
  a=b+b=a # magic
}

ฉันทำงานนี้มานานกว่าที่ฉันต้องการดูแลและไม่สามารถหาวิธีปรับปรุงได้ f,n=%w[Fibo Nacci], f,n='Fibbo','Nacci'และf='Fibbo';n='Nacci'ทุกคนมีนับตัวอักษรเดียวกัน +1
Shelvacu

1
คุณสามารถบันทึกสามไบต์โดยใช้และอีกสองคนโดยการลบวงเล็บใน[b,f='Fibo',n='Nacci',f,b,f+n][~b%6] a=b+b=a
โม่

ขอบคุณ @primo นั่นเป็นกลลวงที่เรียบร้อยกับ~ผู้ใช้งาน ไม่เคยเห็นมาก่อน และตอนนี้ฉันรู้แล้วว่าเหตุใดดัชนีด้านลบจึงเป็นส่วนหนึ่งของทับทิม :)
MegaTom

จริงๆต้องputs [แทนputs[?
Erik the Outgolfer

1
กุหลาบเป็นสีแดงสีม่วงเป็นสีฟ้าสำหรับ Haskell และ Ruby ฉันไม่มีเงื่อนงำ
Erik the Outgolfer

5

> <> , 116 ไบต์

01:n1&61>.
ao:@+:v
vv?%2:<
">:3%?vv^16<
o>:3%?!v~v<&
bov"ci"< 6 ;
io"   n  6~?
Focv1&<   o=
"o">+:aa*!o^
>^>"aN"ooo^

ลองออนไลน์!


6
ยินดีต้อนรับสู่เว็บไซต์! :)
DJMcMayhem

คุณอาจรวมทั้งสอง3%ส่วนเข้าด้วยกัน
Jo King

@ โจกิ้งคุณคิดอย่างนั้น แต่จริง ๆ แล้วพวกเขานำไปสู่ผลลัพธ์ที่แตกต่างกันถ้า n% 3! = 0 ฉันแน่ใจว่าเป็นวิธีการที่จะรวมพวกเขา แต่มันจะหมายถึงการปรับโครงสร้างโปรแกรมทั้งหมดและผมคิดว่ามันจริงจะเป็นอีกต่อไป
hakr14


4

C #, 498 392 320 ไบต์

ฉันแค่อยากจะทำสิ่งนี้กับ linq ไม่ดีฉันต้องเขียนฟังก์ชันผลรวมของตัวเองสำหรับ BigInteger ที่ฆ่ามันจริง ๆ :-(

using System.Linq;using System.Numerics;using System.Collections.Generic;static class a{static void Main(){var f=new List<BigInteger>(){1,1};while(f.Count<100)f.Add(f.Skip(f.Count-2).Take(2).Aggregate((a,b)=>b+a));f.ForEach(x=>{System.Console.WriteLine(x%6==0?"FiboNacci":x%2==0?"Fibo":x%3==0?"Nacci":x.ToString());});}}

Ungolfed:

using System.Linq;
using System.Numerics;
using System.Collections.Generic;
static class a
{
    static void Main()
    {
        var f=new List<BigInteger>(){1,1};
        while(f.Count<100)
            f.Add(f.Skip(f.Count-2).Take(2).Aggregate((a,b)=>b+a));
        f.ForEach(x=>
        {
            System.Console.WriteLine(x%6==0?"FiboNacci":x%2==0?"Fibo":x%3==0?"Nacci":x.ToString());
        });
    }
}

แก้ไข: ลดลงถึง 320 ไบต์ด้วย LegionMammal978 สำหรับคำแนะนำโดยรวมและขอบคุณคำตอบ C # ของ olegz สำหรับคำแนะนำสั้น ๆ ของ x% 6 สำหรับ x% 6 สำหรับ X% 2 && x% 3 เช่นเดียวกับการใช้ตัวดำเนินการประกอบในคำสั่ง WriteLine เดียว


4
คุณเคยได้ยินAggregateฟังก์ชั่น LINQ หรือไม่?
LegionMammal978

แทนที่ "sum" ด้วย "t" เพื่อโกน 6 ไบต์
Xantix

3

Python 2, 171 121 ไบต์

"กำลังใกล้เข้ามา"

a=[1,1]
print 1
for _ in"q"*99:print[a[1],"Fibo","Nacci","FiboNacci"][a.append(a.pop(0)+a[0])or(1-a[0]%2)+(a[0]%3<1)*2]

3

Javascript, 93 90 86 Bytes

for(a=0,b=1,i=100;i--;a=[b,b=a+b][0])console.log((b%2?'':'Fibo')+(b%3?'':'Nacci')||b)

1
คุณสามารถบันทึกสี่ไบต์โดยการเปลี่ยนไปa=[b,b=a+b][0] b=a+b,a=b-aนอกจากนี้ในบันทึกย่อที่ไม่เกี่ยวข้องอย่างสมบูรณ์ฉันชอบวิธีที่คุณตอบเหมือนอย่างรวดเร็วใน Stack Overflow hehe ขอให้มีความสุขมาก ๆ ในวันนี้
Piyin

2

Python 2, 100 ไบต์

x=[1,1]
exec"x+=[x[-1]+x[-2]];"*98
print"\n".join(["Fibo"*(i%2==0)+"Nacci"*(i%3==0)or`i`for i in x])

สำหรับตัวเลขขนาดใหญ่ให้เพิ่ม a Lไปยังท้ายสุดเพื่อแสดงว่าเป็นตัวเลขที่ยาว

หากเป็นปัญหานี่คือวิธีแก้ปัญหา 104 ไบต์

x=[1,1]
exec"x+=[x[-1]+x[-2]];"*98
print"\n".join(["Fibo"*(i%2==0)+"Nacci"*(i%3==0)or str(i)for i in x])

คุณสามารถร่นforวงโดยใช้เคล็ดลับนี้: codegolf.stackexchange.com/a/5047/42736 โดยเฉพาะอย่างยิ่งexecเคล็ดลับดูดี
J Atkin

+1 สำหรับexec <program_string>*nเคล็ดลับ ดี!
agtoever

2

Javascript (ES6), 137 134 ไบต์

g=x=>(a=[1,1],f=(x)=>(a[x]=y=a[x-1]+a[x-2],(y%2&&y%3?y:(!(y%2)?'Fibo':'')+(!(y%3)?'Nacci':''))+'\n'+((++x<99)?f(x):'')),'1\n1\n'+f(2))

ฟังก์ชั่นวนซ้ำที่คำนวณ fibonnacci วางไว้ในอาร์เรย์จากนั้นส่งออก Fibo, Nacci หรือตัวเลขแล้วเรียกตัวเองเพื่อคำนวณถัดไปจนถึง 100

มันหยุดที่ 73 เพราะความแม่นยำของตัวเลขจาวาสคริปต์ วิธีเดียวที่จะหลีกเลี่ยงสิ่งนั้นก็คือการเพิ่มการคำนวณบิตของฉันเอง


สิ่งนี้ใช้ไม่ได้มันผิดไปหลังจากที่5527939700884757 + 8944394323791464 = 14472334024676220ควรจะเป็น14472334024676221เพราะจาวาสคริปต์ใช้ความแม่นยำ 16 บิตลอยตัวและต้องใช้ความแม่นยำ 17 บิต คุณควรพิมพ์1สองครั้ง
George Reith

เพิ่มการพิมพ์ 1 สองครั้ง เพื่อความแม่นยำฉันต้องเปลี่ยนทุก ๆ อย่างบนโค้ดเพื่อให้มันทำงานได้ (ไม่ใช้ Number แต่ Uint32Array และทำการคำนวณบิตเป็นบิต)
Naouak

2

QBasic, 144 141 ไบต์

ไม่เล็กโดยเฉพาะ แต่มันเต้น C ++ และ C #

r=1:FOR i=1 TO 046:a$="":q=p+r
IF q MOD 2=0 THEN a$="Fibo"
IF q MOD 3=0 THEN a$=a$+"Nacci"
IF a$="" THEN a$=STR$(q)
PRINT a$:r=p:p=q:NEXT

ไม่มีการประกาศใช้:เป็นไปได้เพราะมันเป็น 1 CRLFไบต์มีราคาถูกกว่า นำหน้า 0 ไปที่ตัวนับลูป: พื้นฐานจะล้นบนอักขระ Fibonacci ลำดับที่ 47 ดังนั้นจึงต้องชดเชยไบต์พิเศษที่ควรมี

แก้ไข: Neil บันทึกฉัน 3 ไบต์: 141 ไบต์


คุณสามารถลบอันแรกออกได้a$+เนื่องจากมันเป็นสตริงว่าง ณ จุดนี้
Neil

2

ภาษา Wolfram, 84 ไบต์

Fibonacciชนิดของการโกงแน่นอนเพราะของที่สร้างขึ้นใน

t=Fibonacci@Range@100;g=(t[[#;;;;#]]=#2)&;g[3,Fibo]g[4,Nacci]g[12,FiboNacci]Print/@t

ตัวอย่างคำสั่งเพื่อเรียกใช้สคริปต์

/Applications/Mathematica.app/Contents/MacOS/WolframKernel -script ~/Desktop/fibo.wl

2

Perl, 74 ไบต์

map{print+(Fibo)[$_%2].(Nacci)[$_%3]||$_ for$a+=$b||1,$b+=$a}1..50

ต้องใช้ตัวเลือกบรรทัดคำสั่งต่อไปนี้: -lMbigintนับเป็น 8


ตัวอย่างการใช้งาน

$ perl -lMbigint fibo-nacci.pl

Perl, 79 ไบต์

use bigint;map{print+(Fibo)[$_%2].(Nacci)[$_%3]||$_,$/for$a+=$b||1,$b+=$a}1..50

เหมือนกับข้างต้นโดยไม่ต้องใช้ตัวเลือกบรรทัดคำสั่งใด ๆ


2

GolfScript, 47 ไบต์

100,{1.@{.@+}*;..2%!'Fibo'*\3%!'Nacci'*+\or}%n*

คำอธิบาย

100,            # push 0..99
{               # map
  1.@           # push 1 twice, rotate counting var to the top
  {             # apply that many times
    .@+         # copy the top, rotate and add
                # if the stack is [a b], this produces: [a b b] -> [b b a] -> [b b+a]
  }*
  ;..           # discard the top, duplicate twice
  2%!'Fibo'*\   # divisible by 2 ? 'Fibo' : ''
  3%!'Nacci'*   # divisible by 3 ? 'Nacci' : ''
  +\or          # concatenate, if empty use the numeric value instead
}%
n*              # join all with a newline

2

PARI / GP, 76 73 ไบต์

ที่บันทึกไว้สามไบต์มารยาทของมิทช์ชวาร์ตซ์

for(n=b=!a=1,99,b=a+a=b;print(if(b%2,"",Fibo)if(b%3,if(b%2,b,""),Nacci)))

ตัวอย่างการใช้งาน

$ gp -qf < fibo-nacci.gp

1
สั้นกว่าไม่ใช้บิวด์อิน ฉันได้ 73 ด้วยfor(i=b=!a=1,99,b=a+a=b; ...
Mitch Schwartz

1
@MitchSchwartz มันเคยถูกเรียกว่าfibo;)
Primo

2

> <>, 128 119 ไบต์

111&v       >:3%0=?v>  v
?;ao>:2%0=?v :3%0=?v :n>:}+&:1+&aa*=
            ^oooo < ^ooooo <
           >"obiF"^>"iccaN"^

ฉันขโมยขโมยโปรแกรม FizzBuzz ที่มีอยู่เดิมอย่างไร้ยางอายไปแล้วและดัดแปลงมันให้ทำงานกับลำดับ Fibo Nacci มันออกตัวเลขตลอดไป ตอนนี้มันได้รับการแก้ไขคือมันจะส่งออกเพียง 100 หมายเลข ลองมันนี่


2
คุณต้องส่งออกหมายเลข 100 Fibo Nacci แรกเท่านั้นไม่มากไม่น้อย
Kritixi Lithos

@ ΚριτικσιΛίθοςในที่สุดฉันก็ถึงที่จะทำให้มันออกมาเพียง 100 หมายเลข
DanTheMan

ผลลัพธ์นี้มี 101 หมายเลขใน TIO แต่ไม่สามารถใช้งานได้ในไซต์ที่เชื่อมโยง
Jo King

1

Pyth, 51 ไบต์

V.Wn100lHaZ+@Z_1@Z_2[1 1)|+*"Fibo"}2JPN*"Nacci"}3JN

สร้างลำดับ Fibonacci จากนั้นตัดสินใจว่าจะพิมพ์อะไร

                    [1 1)                           - H = [1,1]
  Wn100lH                                           - While len(H)!=100 
         aZ+@Z_1@Z_2                                - H.append(H[-1]+H[-2])
V.                                                  - For N in H:
                                    JPN             - Set J to the prime factorization of H
                           *"Fibo"}2J               - If there is a 2 in the factorization, add "Fibo" to a string
                                       *"Nacci"}3J  - If there is a 3 in the factorization, add "Nacci" to a string
                          +                         - Join them together
                         |                        N - If the string isn't empty (If it isn't divisible by 2 or 3), print N
                                                    - Else print the string

ในการทดสอบให้ลองสิ่งนี้ (ทำเพียง 20 หมายเลขแรกเท่านั้น)

V.Wn20lHaZ+@Z_1@Z_2[1 1)|+*"Fibo"}2JPN*"Nacci"}3JN

ใช้เวลานานแค่ไหนในการรันโปรแกรมจริง?
Kritixi Lithos

ฉันไม่รู้เลยว่ามันไม่ได้เกิดขึ้นใน 30 วินาทีที่ต้องใช้ความพยายามในการจัดการกับความเป็นจริงที่สำคัญขนาดใหญ่ซึ่งอาจทำให้ช้าลงมาก
บลู

1

Clojure, 127 ไบต์

(def f(lazy-cat[1 1](map +' f(rest f))))(doseq[x(take 100 f)](println(str(if(even? x)'Fibo)({0'Nacci}(mod x 3)(if(odd? x)x)))))

Ungolfed:

(def fib (lazy-cat [1 1] (map +' fib (rest fib))))

(doseq [x (take 100 fib)]
  (println (str (if (even? x) 'Fibo)
                ({0 'Nacci}
                 (mod x 3)
                 (if (odd? x) x)))))

เทคนิคบางอย่างที่ใช้:

  • สิ่งเล็ก ๆ น้อย ๆdefที่ทำให้ลำดับฟีโบนักชีนั้นถูกขโมยไปจาก Konrad Garusอย่างไร้ยางอาย
  • strสามารถใช้สัญลักษณ์เป็นอินพุต บ้าจริงมั้ย
  • แผนที่และค่าเริ่มต้นเป็นวิธีที่สั้นที่สุดในการเขียนifในบางกรณี

คือlazy-catอะไร
Kritixi Lithos

@ ΚριτικσιΛίθοςมันเชื่อมโยงหลาย ๆ อย่างเข้าด้วยกันอย่างเกียจคร้าน ในกรณีนี้มันเชื่อมสององค์ประกอบแรกของลำดับฟีโบนักชี ( [1 1]) กับผลลัพธ์ของการสรุปแต่ละองค์ประกอบในลำดับฟีโบนักชีกับองค์ประกอบที่ตามมา
Sam Estep

ฉันคิดถูกfibs = 0 : 1 : zipWith (+) fibs (tail fibs)หรือเปล่าว่านี่เป็นเวอร์ชั่น Clojure ใช่ไหม
Soham Chowdhury

@ShaamChowdhury ใช่เท่าที่ฉันจะบอกได้
Sam Estep



1

Javascript (ES2015), 99 ไบต์

f=n=>n<3?1:f(n-1)+f(n-2);for(i=0;i<100;)console.log((f(++i)%2?'':'Fibo')+(f(i)%3?'':'Nacci')||f(i))

Ungolfed:

// fibonacci function
var fibonacci = (n) => n < 3 ? 1 : fibonacci(n-1) + fibonacci(n-2) // (implicit return)

for (var i = 0; i<100;) {
  var output = fibonacci(++i) % 2 !== 0 ? '' : 'Fibo';
  output += fibonacci(i) % 3 !== 0 ? '' : 'Nacci';
  console.log(output || fibonacci(i));
}

ใช้alertแทนconsole.log; มันโกนหนวดบางส่วนออก
Kritixi Lithos

1

F #, 202 163 149 bytes

Seq.unfold(fun(a,b)->printfn"%s"(a%6m|>function|0m->"FiboNacci"|2m|4m->"Fibo"|3m->"Nacci"|_->string a);Some(1,(b,a+b)))(1m,1m)|>Seq.take 100|>Seq.sum

นี่เป็นไฟล์ FSX (สคริปต์ F #)


ฉันประหลาดใจที่งานนี้
asibahi

1

PHP, 75 ไบต์

<?for(;4e20>$b=bcadd($a,$a=$b)?:1;)echo[Fibo][++$i%3].[Nacci][$i%4]?:$b,~õ;

การแข่งขันที่น่าแปลกใจ ต้องการ PHP v5.5 ขึ้นไป ฉันถือว่าการตั้งค่าเริ่มต้นเนื่องจากไม่มี. ini (คุณอาจปิดการใช้งาน. ini ท้องถิ่นของคุณด้วย-nตัวเลือก)


ตัวอย่างการใช้งาน

$ php -n fibo-nacci.php

ด้วย-n bcaddไม่ทำงานแม้ว่าbcmathจะติดตั้งแล้วก็ตาม หากไม่มี-n สิ่งต่าง ๆ จำนวนมากจะแสดงผลบน stderr
Sylwester

ใช้งานได้กับกล่องของฉัน
โม่

1

ภาษาโปรล็อก 182 ไบต์

f(A,B,X):-X<100,C is A+B,Z is X+1,(Y is B mod 6,Y=0->writeln('FiboNacci');(Y is B mod 2,Y=0->writeln('Fibo');(Y is B mod 3,Y=0->writeln('Nacci');writeln(B)))),f(B,C,Z).
p:-f(0,1,0).

ลองออนไลน์ได้ที่นี่
เพื่อเรียกใช้โปรแกรมใช้แบบสอบถาม:

p.
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.