Fibros + Fizz Buzz = Fibo Nacci!


74

Fibonacci + FizzBuzz = Fibo Nacci!


Thử thách của bạn là tạo ra một chương trình Fibo Nacci!

  • Một chương trình Fibo Nacci xuất ra 100 số Fibonacci đầu tiên (bắt đầu từ 1).
  • Nếu số Fibonacci chia hết cho cả 2 3 (tức là nó chia hết cho 6), thì hãy xuất FiboNacci thay vì số.
  • Mặt khác, nếu số Fibonacci chia hết cho 2, thì hãy xuất Fibo thay vì số.
  • Mặt khác, nếu số Fibonacci chia hết cho 3, thì hãy xuất Nacci thay vì số.

Quy tắc

  • Chương trình sẽ không có đầu vào.
  • Chương trình sẽ xuất ra một dòng mới ( \n) sau mỗi lần nhập.
  • Chương trình không nên in bất cứ điều gì sang STDERR.
  • Chương trình phải xuất 100 mục nhập Fibo Nacci đầu tiên (bắt đầu từ 1).
  • Các lỗ hổng tiêu chuẩn không được phép (theo mặc định).
  • Đây là để mã ngắn nhất tính theo byte thắng!

Đây là đầu ra dự kiến:

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

Danh mục

Các Snack stack Snippet ở dưới cùng của bài đăng này tạo ra các cửa hàng từ các câu trả lời a) là một danh sách các giải pháp ngắn nhất cho mỗi ngôn ngữ và b) như là một bảng dẫn tổng thể.

Để đảm bảo rằng câu trả lời của bạn hiển thị, vui lòng bắt đầu câu trả lời của bạn bằng một tiêu đề, sử dụng mẫu Markdown sau:

## Language Name, N bytes

nơi Nlà kích thước của trình của bạn. Nếu bạn cải thiện điểm số của mình, bạn có thể giữ điểm số cũ trong tiêu đề, bằng cách đánh bại chúng thông qua. Ví dụ:

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

Nếu bạn muốn bao gồm nhiều số trong tiêu đề của mình (ví dụ: vì điểm của bạn là tổng của hai tệp hoặc bạn muốn liệt kê riêng các hình phạt cờ của thông dịch viên), hãy đảm bảo rằng điểm thực tế là số cuối cùng trong tiêu đề:

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

Bạn cũng có thể đặt tên ngôn ngữ thành liên kết sau đó sẽ hiển thị trong đoạn trích:

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


6
Còn các ngôn ngữ có loại số nguyên cao nhất chỉ 64 bit thì sao? :( Không đủ số lượng 90
sợi

3
@Zereges Trong vấn đề đó, tôi xin lỗi. :(
Kritixi Lithos

28
Có lẽ nó nên được gọi là "Fizzo Nacci"
LegionMammal978

4
@SztupY Vì đầu ra trong câu hỏi này hoàn toàn bất biến, bạn thậm chí không cần số nguyên. Chỉ cần coi câu hỏi này là một câu hỏi phức tạp kolmogorov (tôi thậm chí đã thêm thẻ) và đi từ đó.
Chris Jester-Young

3
@ ChrisJester-Young vẫn còn một hạn chế không cần thiết, điều đó có thể khiến những người thực hiện sáng tạo tránh xa nhiệm vụ này. Và hầu hết các giải pháp (bao gồm cả giải pháp được nâng cấp thứ 2) đã bị phá vỡ
SztupY

Câu trả lời:


18

Bình thường, 37 byte

Tôi lặp qua các số Fibonacci thay vì tạo chúng trước, vì nó thực sự ngắn.

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

Hãy thử trực tuyến.


Chúc mừng bạn đã chiến thắng thử thách này! Tôi thích rằng giải pháp này là nhanh chóng.
Kritixi Lithos

45

Python 2, 62 byte

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

Không khác nhiều so với FizzBuzz tiêu chuẩn, thực sự.


1
Thật đáng kinh ngạc.
J Atkin

Tôi cần phải nhớ cấu trúc lặp này cho sân golf Ruby tiếp theo của mình. Thật đáng kinh ngạc.
vỗ tay

21

Siêu lập trình C ++ 11, 348 byte

#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;}

Bởi vì, tại sao không. Nó biên dịch với warning C4307: '+': integral constant overflow, chạy tốt, nhưng các số Fibonacci 93+ không được hiển thị chính xác (do tràn), vì vậy đây là mục nhập không hợp lệ (nhưng tôi không thể giành được nó với nhiều byte như vậy)

Ung dung

#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;
}

Bạn có thể sử dụng các chuỗi đã nổ ( template <char H, char ...T>) trong các mẫu của mình để (về mặt lý thuyết) xử lý các giá trị độ dài tùy ý. Sau đó, sẽ chỉ là vấn đề kiểm tra 2 ký tự cuối cùng trong mỗi chuỗi để xác định mức chia hết cho 2 và / hoặc 3.
Mego

@Mego Tôi không hiểu bạn. Làm thế nào nó sẽ giúp tôi xử lý các giá trị, không phù hợp với 64 bit. Ngoài ra, bạn cần tất cả các chữ số để tìm hiểu xem số đó có chia hết cho 3.
Zereges

Chuỗi có thể dài tùy ý (cho đến khi bạn hết bộ nhớ). Và bạn nói đúng, tôi đã nhầm lẫn nhận xét của mình. Tuy nhiên, bạn có thể tính tổng kỹ thuật số để xác định mức chia hết cho 3.
Mego

@Mego Việc thực hiện bổ sung các chuỗi đó sẽ đòi hỏi nhiều nỗ lực hơn.
Zereges

1
Bạn có thể sử dụng phương ngữ gnu và sử dụng __uint128_t, có thể.

14

C #, 175 171 152 145 byte

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");}}

Không nén

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");
    }
}

Ngay cả việc nén đầu ra với DeflateStream, mức thấp nhất tôi có thể nhận được là 191 ký tự, vì vậy đây có thể rất gần với câu trả lời c # tốt nhất có thể. Một BigInteger xấu hổ là bắt buộc.
Jodrell

"sử dụng hệ thống;" sẽ cho kích thước -1 khác.
olegz

1
Tôi vẫn phải thêm tiền tố System.N Numics với System mặc dù sử dụng: -S, vì vậy tôi không chắc việc sử dụng sẽ hoạt động.
Jodrell

1
Bạn có thể lưu 3 ký tự bằng cách thay thế ==0s bằng >0và đảo ngược các chú chim nhạn: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
Bạn có thể lưu thêm 7 ký tự bằng cách thay đổi decimal a=1,b=1thành dynamic a=1m,b=avà sau đó bạn có thể mất (object):)
Timwi

13

Oracle SQL, 212 byte

Không phải ngôn ngữ chơi gôn nhưng tôi phải thử ...

Nối tất cả các hàng với \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

Hoặc với một mục từ chuỗi trên mỗi hàng (162 byte):

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
Thật tuyệt vời, chỉ khi sử dụng SQL
Wayne Werner

Chỉ cần sử dụng cái cuối cùng, vì nó là "tương đương" để xuất ra "mỗi dòng". Và nó thực sự là một đoạn mã tốt. Làm tốt!
Ismael Miguel

@IsmaelMiguel Nếu nó chạy trong SQL * Plus (hoặc giao diện dòng lệnh khác) thì sẽ có một đầu ra dòng mới sau mỗi hàng (như một phần trong cách báo cáo đầu ra truy vấn). Tuy nhiên, đó là chức năng của CLI chứ không phải ngôn ngữ SQL - để tuân thủ quy tắc The program should output a new line (\n) after every entryTôi sẽ để nó dưới dạng mã dài hơn nhưng mã ngắn hơn có thể được tuân thủ (mà không cần dựa vào CLI) bằng cách thêm ||CHR(13)trước khi kết thúc FROMcho 171 người thu hút.
MT0

Bạn không thể sử dụng "\n"? Có vẻ như để làm việc trên MySQL. (Chạy select length("\n")trả về 1 và chạy select "\n"không trả lại n, cũng như select "\p"trả về pdo thoát không hợp lệ)
Ismael Miguel

SELECT LENGTH('\n') FROM DUALđầu ra 2trong Oracle như '\n'không được chuyển đổi thành CHR(13).
MT0

11

ShapeScript , 83 byte

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

Hãy thử trực tuyến!


15
Theo nghĩa đen, con mèo của tôi nhảy lên trên bàn phím trong khi tôi cố gắng bật các phím dính. Công việc tốt.
giai đoạn

2
@phase theo nghĩa bóng. Hoặc là hoặc bạn không nhìn quá kỹ. Hoặc bạn có một con mèo nhỏ hoặc một bàn phím khổng lồ. Bởi vì con mèo này đã quản lý để gõ Fibo và Nacci nhưng nếu không thì tránh tất cả các phím chữ cái lưu trong một r.
John Dvorak

3
@JanDvorak Tôi nghĩ rằng giai đoạn có thiết lập macro cho điều đó;)
Wayne Werner

2
@phase 1. Tại sao con mèo của bạn ở trong phòng của bạn?; 2. tại sao bạn muốn bật phím dính? 3? Tại sao bạn không có hộp bẫy mèo trên bàn để tránh con mèo của bạn nhảy trên bàn phím?
Nzall

7

Java, 407 398 351 308 byte

Chơi gôn với sự giúp đỡ từ @Geobits và @SamYonnou

Thông báo: 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);}}}

Phiên bản bị đánh cắp:

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
Điều này có thể được chơi golf nhiều hơn. Nhập khẩu java.math.*thay vì toàn bộ. Sử dụng các hằng số cho ONEZEROthay vì newBigIntegers. Loại bỏ publickhỏi lớp. Đóng gói tất cả mọi thứ trừ printlncâu lệnh trong phần forthân bên trong khai báo vòng lặp, v.v. Tôi khuyên bạn nên xem qua các mẹo chơi gôn Java nói chung.
Geobits 10/11/2015

@Geobits Xong! 'Thật tiếc khi tôi không quen BigIntegervà các kỹ thuật chơi gôn khác nhau.
Sock

Lưu trữ BigInteger.ZERO, sử dụng flipBit (...) để thay thế cho BigInteger mới (...) và một số điều nhỏ khác bạn có thể tải xuống tới 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 10/11/2015

Có vẻ như BigIntegerluôn luôn trả về BigInteger.ZEROkhi một số thao tác như add(...)ước tính bằng 0 để bạn có thể sử dụng ==thay vì .equals(z), bạn cũng có thể loại bỏ việc lưu trữ s=t.flipBit‌​(2)(6) và thay vào đó thực hiện một số nhiệm vụ bên trong thông minh như vậy: 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);}}}những thay đổi này giảm xuống còn 280
SamYonnou

2
Tôi nghĩ ý bạn làVerbose.isEqualTo(Java)
Cyoce

7

Toán học, 80 byte

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

Điều chỉnh giải pháp FizzBuzz cũ của tôi.


1
@JacobAkkerboom Xin lỗi, đã sửa. Ngoài ra, đối với các phiên bản dưới 10.3, thay thế Echobằng Print.
LegionMammal978

5

Ruby, 71 66 byte

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

vô dụng:

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
}

Tôi đã làm việc này lâu hơn tôi muốn quản trị viên và không thể tìm ra cách nào để cải thiện nó. f,n=%w[Fibo Nacci], f,n='Fibbo','Nacci'f='Fibbo';n='Nacci'tất cả đều có số ký tự giống nhau. +1
Shelvacu

1
Bạn có thể lưu ba byte bằng cách sử dụng [b,f='Fibo',n='Nacci',f,b,f+n][~b%6]và hai byte nữa bằng cách xóa dấu ngoặc đơn trong a=b+b=a.
primo

Cảm ơn bạn @primo. Đó là một mẹo gọn gàng với các ~nhà điều hành. Chưa bao giờ nhìn thấy nó trước đây. Và bây giờ tôi biết tại sao các chỉ số tiêu cực là một phần của ruby ​​:)
MegaTom

Thực sự cần puts [thay puts[?
Erik the Outgolfer

1
Hoa hồng có màu đỏ, Hoa violet có màu xanh, đối với Haskell và Ruby, tôi không có manh mối.
Erik the Outgolfer

5

> <> , 116 byte

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^

Hãy thử trực tuyến!


6
Chào mừng đến với trang web! :)
DJMcMayhem

Bạn có thể có thể kết hợp cả hai 3%phần
Jo King

@JoKing Bạn sẽ nghĩ như vậy, nhưng chúng thực sự dẫn đến các kết quả khác nhau nếu n% 3! = 0. Tôi chắc rằng có một cách để kết hợp chúng, nhưng nó sẽ có nghĩa là cơ cấu lại toàn bộ chương trình, và tôi tưởng tượng nó sẽ thực sự được lâu hơn.
hakr14


4

C #, 498 392 320 byte

Tôi thực sự muốn làm điều này với linq, thật tệ là tôi đã phải viết hàm tổng của riêng mình cho BigInteger đã thực sự giết nó :-(

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());});}}

Ung dung:

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());
        });
    }
}

Chỉnh sửa: Xuống tới 320 byte nhờ LegionMammal978 cho đề xuất tổng hợp và nhờ câu trả lời C # của olegz cho tốc ký x% 6 cho X% 2 && x% 3 cũng như việc sử dụng các toán tử ternary trong một câu lệnh WriteLine duy nhất.


4
Bạn đã nghe nói về Aggregatechức năng LINQ?
LegionMammal978

Thay thế "tổng" bằng "t" để cạo 6 byte.
Xantix

3

Python 2, 171 121 byte

"Phương pháp tiếp cận vũ phu."

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 byte

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

1
Bạn có thể lưu bốn byte bằng cách thay đổi a=[b,b=a+b][0]thành b=a+b,a=b-a. Ngoài ra, trong một ghi chú hoàn toàn không liên quan, tôi thích cách bạn trả lời rất nhanh trong Stack Overflow hehe Chúc một ngày tốt lành
Piyin

2

Python 2, 100 byte

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])

Đối với các số lớn, thêm Lvào cuối cho thấy đó là một số dài.

Nếu đó là một vấn đề, đây là một giải pháp 104 byte

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])

Bạn có thể rút ngắn forvòng lặp bằng mẹo này: codegolf.stackexchange.com/a/5047/42736 . Đặc biệt là execđầu có vẻ tốt.
J Atkin

+1 cho exec <program_string>*nmánh khóe. Đẹp!
bất cứ lúc nào

2

Javascript (ES6), 137 134 byte

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))

Hàm đệ quy tính toán kết nối sợi, đặt nó vào một mảng sau đó xuất Fibo, Nacci hoặc số và gọi chính nó để tính toán tiếp theo cho đến 100.

Nó phá vỡ ở 73 vì độ chính xác Số javascript. Cách duy nhất để vượt qua đó là thêm phép tính bit của riêng tôi.


Điều này không hoạt động, nó sẽ sai sau 5527939700884757 + 8944394323791464 = 14472334024676220khi nó nên 14472334024676221bởi vì JavaScript sử dụng số float chính xác 16 bit và yêu cầu độ chính xác 17 bit. Bạn cũng nên in 1hai lần.
George Reith

Đã thêm in 1 lần. Để chính xác, tôi cần thay đổi mọi thứ trên mã để làm cho nó hoạt động (không sử dụng Số mà là Uint32Array và thực hiện các bit tính toán theo bit)
Naouak

2

QBasic, 144 141 byte

Không đặc biệt nhỏ, nhưng nó đánh bại C ++ và 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

Không có khai báo, được sử dụng :bất cứ nơi nào có thể bởi vì nó rẻ hơn 1 byte so với CRLF. Tiền tố 0 đến bộ đếm vòng lặp: Cơ bản sẽ tràn vào ký tự Fibonacci thứ 47, do đó được bù cho byte bổ sung cần có ở đó.

EDIT: Neil đã lưu cho tôi 3 byte: 141 byte.


Bạn có thể xóa chuỗi đầu tiên a$+vì nó được biết là chuỗi rỗng tại thời điểm này.
Neil

2

Ngôn ngữ Wolfram, 84 byte

Tất nhiên là loại gian lận, vì được xây dựng trong Fibonacci.

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

Lệnh ví dụ để chạy tập lệnh

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

2

Perl, 74 byte

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

Yêu cầu tùy chọn dòng lệnh sau : -lMbigint, được tính là 8.


Sử dụng mẫu

$ perl -lMbigint fibo-nacci.pl

Perl, 79 byte

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

Tương tự như trên, mà không yêu cầu bất kỳ tùy chọn dòng lệnh.


2

GolfScript, 47 byte

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

Giải trình

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 byte

Lưu ba byte lịch sự của Mitch Schwartz .

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

Sử dụng mẫu

$ gp -qf < fibo-nacci.gp

1
Nó ngắn hơn không sử dụng tích hợp; Tôi có 73 vớifor(i=b=!a=1,99,b=a+a=b; ...
Mitch Schwartz

1
@MitchSchwartz nó được gọi là fibo;)
primo

2

> <>, 128 119 byte

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

Tôi đã xấu hổ lấy trộm một chương trình FizzBuzz hiện có và sửa đổi nó để hoạt động cho chuỗi Fibo Nacci. Nó xuất ra số mãi mãi. Bây giờ nó đã được sửa, tức là nó chỉ xuất ra 100 số. Hãy thử nó ở đây .


2
Bạn chỉ phải xuất 100 số Fibo Nacci đầu tiên, không hơn, không kém.
Kritixi Lithos

Cuối cùng tôi cũng có thể làm cho nó chỉ xuất ra 100 số.
DanTheMan

Điều này tạo ra 101 số trên TIO nhưng không hoạt động tại trang được liên kết
Jo King

1

Bình thường, 51 byte

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

Tạo chuỗi Fibonacci sau đó quyết định những gì sẽ in.

                    [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

Để kiểm tra, hãy thử điều này (chỉ thực hiện 20 số đầu tiên)

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

Mất bao lâu để chạy chương trình thực tế?
Kritixi Lithos

Tôi không biết, trong 30 giây, không cần phải tìm ra rằng việc xử lý các yếu tố chính lớn như vậy có thể sẽ làm chậm nó đi rất nhiều.
Màu xanh

1

Clojure, 127 byte

(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)))))

Ung dung:

(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)))))

Một số thủ thuật được sử dụng:

  • Đó là một chút khá nhỏ defmà cung cấp cho chính chuỗi Fibonacci bị đánh cắp một cách đáng xấu hổ từ Konrad Garus .
  • strcó thể lấy ký hiệu làm đầu vào. Điên rồi phải không?
  • Bản đồ và giá trị mặc định là cách ngắn nhất để viết iftrong một số trường hợp.

lazy-cat
Kritixi Lithos

@ Κρτκσ Nó kết hợp nhiều chuỗi một cách lười biếng. Trong trường hợp này, nó kết hợp hai phần tử đầu tiên của chuỗi Fibonacci ( [1 1]) với kết quả tổng hợp từng phần tử trong chuỗi Fibonacci với phần tử theo sau nó.
Sam Estep

Tôi có đúng khi đoán rằng về cơ bản đây là phiên bản Clojure fibs = 0 : 1 : zipWith (+) fibs (tail fibs)không?
Soham Chowdhury

@SohamChowdhury Vâng, theo như tôi có thể nói.
Sam Estep



1

Javascript (ES2015), 99 byte

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))

Ung dung:

// 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));
}

Sử dụng alertthay vì console.log; nó tắt một số byte.
Kritixi Lithos

1

F #, 202 163 149 byte

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

Đây là tệp FSX (tập lệnh F #)


Tôi ngạc nhiên khi điều này hoạt động
asibahi

1

PHP, 75 byte

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

Đáng ngạc nhiên cạnh tranh. Yêu cầu PHP v5.5 trở lên. Tôi giả sử cài đặt mặc định, vì chúng không có .ini (bạn có thể tắt .ini cục bộ của mình với -ntùy chọn).


Sử dụng mẫu

$ php -n fibo-nacci.php

WIth -n bcaddkhông hoạt động ngay cả khi bcmathđược cài đặt. Không có -n nhiều thứ là đầu ra trên stderr.
Sylwester

Hoạt động trên hộp của tôi.
primo

1

Prolog, 182 byte

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).

Dùng thử trực tuyến tại đây
Để chạy chương trình, hãy sử dụng truy vấn:

p.
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.