피보나치 + 피즈 버즈 = 피보 나치!


74

피보나치 + FizzBuzz = 피보 나치!


당신의 도전은 Fibo Nacci 프로그램을 만드는 것입니다!

  • Fibo Nacci 프로그램은 첫 100 피보나치 수 (1부터 시작)를 출력합니다 .
  • 피보나치 수를 2 3으로 나눌 수있는 경우 (즉, 6으로 나눌 수있는 경우), 숫자 대신 FiboNacci를 출력하십시오.
  • 그렇지 않으면 피보나치 수를 2로 나눌 수 있으면 숫자 대신 피보를 출력하십시오.
  • 그렇지 않으면 피보나치 수를 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

카탈로그

이 게시물의 맨 아래에 있는 스낵 스택 스 니펫은 답변 a) 언어 당 가장 짧은 솔루션 목록으로, b) 전체 리더 보드로 카탈로그를 생성합니다.

답변이 표시되도록하려면 다음 마크 다운 템플릿을 사용하여 헤드 라인으로 답변을 시작하십시오.

## 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 fib. 숫자가 충분하지 않습니까?
Zereges

3
@Zereges 그 문제에 대해, 죄송합니다. :(
Kritixi Lithos

28
어쩌면 그것은 "Fizzo Nacci"라고한다
LegionMammal978

4
@SztupY이 질문의 결과는 완전히 변하지 않기 때문에 정수조차 필요하지 않습니다. 이 질문을 kolmogorov- 복잡성 질문으로 취급하고 (나는 심지어 태그를 추가했습니다) 거기에서 가십시오.
Chris Jester-Young

3
@ ChrisJester-Young 창의적인 구현자가이 작업을 수행하지 못하게하는 불필요한 제한 사항입니다. 그리고 대부분의 솔루션 (두 번째로 많이지지 된 솔루션 포함)은 이미 깨
졌습니다

답변:



45

파이썬 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 메타 프로그래밍, 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 + 피보나치 숫자가 올바르게 표시되지 않으므로 (오버플로로 인해) 유효하지 않은 항목입니다 (그러나 바이트 수는 많지 않습니다)

언 골프

#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 및 / 또는 3으로 나누기를 결정하면됩니다.
Mego

@ Mego 나는 당신을 이해하지 못합니다. 64 비트에 맞지 않는 값을 처리하는 데 어떻게 도움이됩니까? 또한 숫자를 3으로 나눌 수 있는지 확인하려면 모든 숫자가 필요합니다.
Zereges

문자열은 임의로 길 수 있습니다 (메모리가 부족할 때까지). 그리고 당신 말이 맞아, 나는 내 의견을 엉망으로 만들었습니다. 여전히, 디지털 합을 계산하여 분할 성을 3으로 결정할 수 있습니다.
Mego

@Mego이 문자열을 추가하려면 더 많은 노력이 필요합니다.
Zereges

1
gnu 방언을 사용 __uint128_t하고 아마도 사용할 수 있습니다.

14

C #, 175171152145 바이트

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 자이므로 가능한 최고의 C # 답변에 매우 가깝습니다. 부끄러운 BigInteger가 필요합니다.
Jodrell

"시스템 사용;" 또 다른 -1 크기를 줄 것입니다.
olegz

1
using : -S에도 불구하고 여전히 System.Numerics 앞에 System을 붙여야했기 때문에 사용이 확실하지 않습니다.
Jodrell

1
==0s를 >0삼항으로 바꾸고 반전하여 3자를 저장할 수 있습니다 .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=1dynamic 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 (또는 다른 명령 줄 인터페이스)에서 실행되는 경우 각 행 다음에 쿼리 출력을보고하는 방법의 일부로 줄 바꿈이 출력됩니다. 그러나 그것은 SQL 언어가 아닌 CLI의 기능입니다-규칙을 준수하기 The program should output a new line (\n) after every entry위해 더 긴 코드로 남겨 두지 만 더 짧은 코드는 CLI ||CHR(13)앞에 의존하지 않고 코드를 준수하도록 만들 수 있습니다. FROM171 chracters.
MT0

사용할 수 "\n"없습니까? MySQL에서 작동하는 것 같습니다. (실행 select length("\n")반환 일을하고, 실행은 select "\n"반환하지 않습니다 n와 마찬가지로 select "\p"반환 p인해 잘못된 탈출을 것에)
이스마엘 미구엘

SELECT LENGTH('\n') FROM DUAL로 변환되지 않은 2Oracle의 출력 . '\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
비 유적으로 @phase. 그 중 하나이거나 너무 자세히 보지 않습니다. 또는 작은 고양이 나 거대한 키보드가 있습니다. 이 고양이는 Fibo와 Nacci를 입력했지만 다른 문자 키를 사용하여 한 r에 저장하지 않기 때문에.
John Dvorak

3
@ JanDvorak 나는 단계에 매크로 설정이 있다고 생각합니다;)
Wayne Werner

2
@phase 1. 왜 고양이가 방에 있습니까?; 2. 왜 스티커 키를 켜고 싶습니까? 삼? 고양이가 키보드에서 뛰어 내리지 않도록 책상에 고양이 함정 상자가없는 이유는 무엇입니까?
Nzall

7

자바 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.*전체 대신 가져 오기 . BigInteger 대신 ONEZERO대신 상수를 사용하십시오 new. public클래스에서를 제거하십시오 . 루프 선언 등 printlnfor본문에 문장을 제외한 모든 것을 압축하십시오 . 일반적으로 Java 골프 팁 을 살펴 보는 것이 좋습니다 .
Geobits

@Geobits 완료! '저는 유감스럽고 BigInteger다양한 골프 기술 에 익숙하지 않았습니다 .
Sock

flipBit (...)를 새로운 BigInteger (...)의 대안으로 사용하여 BigInteger.ZERO 저장 및 기타 사소한 것들을 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

루비, 71 66 바이트

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

언 골프 :

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
을 사용하여 3 바이트를 절약 [b,f='Fibo',n='Nacci',f,b,f+n][~b%6]하고에서 괄호를 제거하여 2 바이트를 더 절약 할 수 있습니다 a=b+b=a.
primo

@primo 감사합니다. 그것은 ~운영자 에게 깔끔한 요령입니다 . 전에 본 적이 없습니다. 그리고 이제 음수 색인이 루비의 일부인 이유를 알고 있습니다.
MegaTom

puts [대신에 정말로 필요 puts[합니까?
아웃 골퍼 에릭

1
장미는 빨간색, 보라색은 파란색, Haskell 및 Ruby의 경우 단서가 없습니다.
아웃 골퍼 에릭

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%부분을
조 왕에게

@JoKing 당신은 그렇게 생각할 것입니다, 그러나 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());});}}

언 골프 드 :

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

편집 : 집계 제안에 대한 LegionMammal978 및 X % 2 && x % 3의 x % 6 속기에 대한 olegz의 C # 응답과 단일 WriteLine 문에서 삼항 연산자의 사용 덕분에 320 바이트까지 줄였습니다.


4
AggregateLINQ 기능에 대해 들어 보셨습니까 ?
LegionMammal978

6 바이트를 면도하려면 "sum"을 "t"로 바꾸십시오.
Xantix

3

파이썬 2, 171121 바이트

"Bruute force approach."

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

자바 스크립트, 93 90 86 바이트

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

1
당신은 변경하여 4 바이트를 절약 할 수 a=[b,b=a+b][0]b=a+b,a=b-a. 또한 완전히 관련이없는 메모에서 Stack Overflow에서 정말 빠르게 답변하는 방식이 좋습니다. 좋은 하루 되세요
Piyin

2

파이썬 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])

큰 숫자의 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])

codegolf.stackexchange.com/a/5047/42736for 팁을 사용 하여 루프를 줄일 수 있습니다 . 특히 팁이 좋아 보인다. exec
J Atkin

exec <program_string>*n트릭에 +1 좋은!
agtoever

2

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

피보나치를 계산하는 재귀 함수는 배열에 넣은 다음 피보, 나치 또는 숫자를 출력하고 100까지 다음을 계산하도록 자체 호출합니다.

자바 스크립트 숫자 정밀도로 인해 73에서 끊어집니다. 그것을 해결하는 유일한 방법은 내 자신의 비트 계산을 추가하는 것입니다.


이것은 작동하지 않습니다. JavaScript는 16 비트 정밀도 부동 소수점을 사용하고 17 비트 정밀도가 필요하기 때문에 나중에 잘못 5527939700884757 + 8944394323791464 = 14472334024676220됩니다 14472334024676221. 또한 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을 접두사로 추가 : 기본은 47 번째 피보나치 문자에서 오버플로되므로 추가 바이트가 있어야합니다.

편집 : Neil은 3 바이트 : 141 바이트를 저장했습니다.


a$+이 시점에서 첫 번째 문자열은 빈 문자열로 알려져 있으므로 제거 할 수 있습니다 .
Neil

2

볼프람 언어, 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

펄, 74 바이트

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

다음과 같은 명령 행 옵션이 필요합니다 -lMbigint.


샘플 사용법

$ perl -lMbigint fibo-nacci.pl

펄, 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 바이트

Mitch Schwartz가 3 바이트를 절약했습니다 .

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; ...
미치 슈워츠

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 개의 피보 나치 숫자 만 출력해야합니다.
Kritixi Lithos

@ ΚριτικσιΛίθος 나는 마침내 100 개의 숫자 만 출력하게되었습니다.
DanTheMan

TIO에서는 101 개의 숫자를 출력하지만 연결된 사이트에서는 작동하지 않습니다.
Jo King

1

Pyth, 51 바이트

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

피보나치 수열을 생성 한 다음 인쇄 할 내용을 결정합니다.

                    [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 초 안에 알지 못했습니다.
Blue

1

클로저, 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)))))

언 골프 드 :

(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피보나치 시퀀스 자체를 제공 즉 콘라드 Garus에서 뻔뻔하게 도난 .
  • str기호를 입력으로 사용할 수 있습니다. 미쳤지?
  • 경우에 따라 가장 짧은 방법은지도와 기본값 if입니다.

무엇입니까 lazy-cat?
Kritixi Lithos

@ ΚριτικσιΛίθος 여러 서열을 느리게 연결합니다. 이 경우 피보나치 시퀀스의 첫 두 요소 ( [1 1])를 피보나치 시퀀스 의 각 요소와 그 뒤에 오는 요소를 합한 결과와 연결합니다.
Sam Estep

이것이 기본적으로 Clojure 버전이라는 것을 추측하는 데 맞 fibs = 0 : 1 : zipWith (+) fibs (tail fibs)습니까?
Soham Chowdhury

@SohamChowdhury 예, 제가 알 수있는 한.
Sam Estep



1

자바 스크립트 (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))

언 골프 드 :

// 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 바이트

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가 없기 때문에 기본 설정을 가정합니다 ( -n옵션으로 로컬 .ini를 비활성화 할 수 있습니다).


샘플 사용법

$ php -n fibo-nacci.php

와 함께 -n bcadd경우에도 작동하지 않습니다 bcmath설치됩니다. 없이 -n 물건을 많이 표준 에러에 출력됩니다.
Sylwester 2019

내 상자에서 작동합니다.
primo

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.