Fibonacci + Fizz Buzz = Fibo Nacci!


74

Fibonacci + FizzBuzz = Fibo Nacci!


Twoim wyzwaniem jest stworzenie programu Fibo Nacci!

  • Program Fibo Nacci generuje pierwsze 100 liczb Fibonacciego (od 1).
  • Jeśli liczba Fibonacciego jest podzielna przez 2 i 3 (tzn. Jest podzielna przez 6), to wypisz FiboNacci zamiast liczby.
  • W przeciwnym razie, jeśli liczba Fibonacciego jest podzielna przez 2, to wypisz Fibo zamiast liczby.
  • W przeciwnym razie, jeśli liczba Fibonacciego jest podzielna przez 3, następnie wypisz Nacci zamiast liczby.

Zasady

  • Program nie powinien pobierać danych wejściowych.
  • Program powinien wypisywać nową linię ( \n) po każdym wpisie.
  • Program nie powinien drukować niczego do STDERR.
  • Program musi wypisać pierwszych 100 wpisów Fibo Nacci (od 1).
  • Standardowe luki są niedozwolone (domyślnie).
  • To jest więc wygrywa najkrótszy kod w bajtach!

Oto oczekiwany wynik:

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

Katalog

Przekąskowy Stos krótkiego opisu na dole tego postu generuje katalog z odpowiedziami a) jako listę najkrótszym roztworu na języku oraz b) jako ogólny liderów.

Aby upewnić się, że Twoja odpowiedź się pojawi, zacznij od nagłówka, korzystając z następującego szablonu Markdown:

## Language Name, N bytes

gdzie Njest rozmiar twojego zgłoszenia. Jeśli poprawić swój wynik, to może zachować stare porachunki w nagłówku, uderzając je przez. Na przykład:

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

Jeśli chcesz umieścić w nagłówku wiele liczb (np. Ponieważ twój wynik jest sumą dwóch plików lub chcesz osobno wymienić kary za flagi tłumacza), upewnij się, że rzeczywisty wynik jest ostatnią liczbą w nagłówku:

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

Możesz także ustawić nazwę języka jako link, który pojawi się we fragmencie:

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


6
Co z językami o najwyższym typie całkowitym wynoszącym tylko 64 bity? :( Czy 90 liczb nie jest wystarczających?
Zereges,

3
@Zereges W tej kwestii przepraszam. :(
Kritixi Lithos

28
Może powinien się nazywać „Fizzo Nacci”
LegionMammal978

4
@SztupY Ponieważ wynik w tym pytaniu jest całkowicie niezmienny, nie potrzebujesz nawet liczb całkowitych. Potraktuj to pytanie jako pytanie o złożoność kolmogorowa (nawet dodałem tag) i stamtąd.
Chris Jester-Young,

3
@ ChrisJester-Young to wciąż niepotrzebne ograniczenie, które może sprawić, że kreatywni realizatorzy unikną tego zadania. A większość rozwiązań (w tym druga najbardziej uprzywilejowana) już się
psuje

Odpowiedzi:


18

Pyth, 37 bajtów

Przeglądam liczby Fibonacciego zamiast generować je wcześniej, ponieważ jest to naprawdę bardzo krótkie.

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

Wypróbuj online.


Gratulujemy wygranej w tym wyzwaniu! Podobało mi się, że to rozwiązanie było szybkie.
Kritixi Lithos

45

Python 2, 62 bajty

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

Naprawdę niewiele różni się od standardowego FizzBuzz.


1
To jest niesamowite.
J Atkin,

Muszę pamiętać ten zapętlony konstrukt dla mojego następnego golfa Ruby. To jest niesamowite.
klaskać

21

C ++ 11 metaprogramowanie, 348 bajtów

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

Bo czemu nie. Kompiluje się z warning C4307: '+': integral constant overflow, działa dobrze, ale 93+ numery Fibonacciego nie są wyświetlane poprawnie (z powodu przepełnienia), więc jest to niepoprawny wpis (ale nie mogłem go wygrać z taką ilością bajtów)

Nie golfił

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

Możesz użyć rozstrzelonych łańcuchów ( template <char H, char ...T>) w swoich szablonach do (teoretycznie) obsługi wartości o dowolnej długości. Wtedy byłoby tylko kwestią zbadania ostatnich 2 znaków w każdym ciągu, aby określić podzielność przez 2 i / lub 3.
Mego

@Mego Nie rozumiem cię. Jak pomogłoby mi to obsługiwać wartości, które nie pasują do 64 bitów. Ponadto potrzebujesz wszystkich cyfr, aby dowiedzieć się, czy liczba jest podzielna przez 3.
Zereges

Ciągi mogą być dowolnie długie (dopóki nie zabraknie pamięci). I masz rację, pomieszałem swój komentarz. Mimo to można obliczyć sumę cyfrową, aby określić podzielność przez 3.
Mego

@Mego Wdrożenie tych ciągów wymagałoby znacznie więcej wysiłku.
Zereges,

1
Możesz użyć dialektu GNU i __uint128_tbyć może użyć .

14

C #, 175 171 152 145 bajtów

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

Nieskompresowane:

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

Nawet skompresowanie wyniku za pomocą DeflateStream, najniższy jaki mogłem uzyskać, to 191 znaków, więc jest to prawdopodobnie bardzo blisko najlepszej możliwej odpowiedzi c #. Szkoda, że ​​BigInteger jest wymagany.
Jodrell,

„using System;” da kolejne -1.
olegz,

1
Nadal musiałem prefiksować System.Numerics z Systemem pomimo użycia: -S, więc nie jestem pewien, czy użycie będzie działać.
Jodrell,

1
Możesz zapisać 3 znaki, zastępując litery ==0s >0trójkami i odwracając je: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
Możesz zapisać kolejne 7 znaków, zmieniając decimal a=1,b=1na, dynamic a=1m,b=aa następnie możesz stracić (object):)
Timwi

13

Oracle SQL, 212 bajtów

Nie jest to język golfowy, ale musiałem spróbować ...

Łączenie wszystkich wierszy z \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

Lub z jednym wpisem z sekwencji na wiersz (162 bajty):

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
Niesamowite, tylko do używania SQL
Wayne Werner

Wystarczy użyć ostatniego, ponieważ jest to „odpowiednik” wypisywania „na linię”. I to naprawdę dobry kawałek kodu. Dobra robota!
Ismael Miguel

@ IsmaelMiguel Jeśli jest uruchamiany w SQL * Plus (lub innym interfejsie wiersza poleceń), po każdym wierszu pojawi się nowy wiersz (jako część sposobu raportowania wyniku zapytania). Jest to jednak funkcja interfejsu CLI, a nie języka SQL - aby zachować zgodność z regułą The program should output a new line (\n) after every entry, pozostawię go jako dłuższy kod, ale krótszy można by uczynić zgodny (bez polegania na CLI) poprzez dodanie ||CHR(13)przed końcowym FROMdla 171 znaków.
MT0,

Nie mogłeś użyć "\n"? Wydaje się działać na MySQL. (Uruchomienie select length("\n")zwraca 1, a bieganie select "\n"nie wraca n, jak w przypadku select "\p"zwrotów z ppowodu nieprawidłowej ucieczki)
Ismael Miguel

SELECT LENGTH('\n') FROM DUALwyjścia 2w Oracle, ponieważ '\n'nie zostaną przekonwertowane na CHR(13).
MT0,

11

ShapeScript , 83 bajty

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

Wypróbuj online!


15
Dosłownie wygląda na to, że mój kot wskoczył na klawiaturę, gdy próbowałem włączyć lepkie klawisze. Dobra robota.
faza

2
@ faza w przenośni. Albo to, albo nie patrzysz zbyt uważnie. Albo masz małego kota lub gigantyczną klawiaturę. Ponieważ temu kotowi udało się wpisać Fibo i Nacci, ale poza tym unikają wszystkich klawiszy literowych z wyjątkiem jednego r.
John Dvorak,

3
@JanDvorak Myślę, że faza ma skonfigurowane do tego makra;)
Wayne Werner

2
@ faza 1. Dlaczego twój kot jest w twoim pokoju ?; 2. dlaczego chcesz włączyć lepkie klucze? 3? Dlaczego nie masz na biurku pudełka z pułapką na kota, aby uniknąć skoku kota na klawiaturze?
Nzall

7

Java, 407 398 351 308 bajtów

Grał w golfa z pomocą @Geobits i @SyYonnou

Szerz nowinę: 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);}}}

Wersja bez golfa:

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
Można to pograć bardziej w golfa. Importuj java.math.*zamiast całości. Użyj stałych dla ONEi ZEROzamiast newBigIntegers. Usuń publicz klasy. Spakuj wszystko oprócz printlnoświadczenia do fortreści wewnątrz deklaracji pętli itp . Ogólnie polecam przejrzeć wskazówki dotyczące golfa Java .
Geobits,

@Geobits Gotowe! „Szkoda tylko, że nie znałem BigIntegerjej różnych technik golfowych.
Skarpety

Przechowywanie BigInteger.ZERO, użycie flipBit (...) jako alternatywy dla nowego BigInteger (...) i kilka innych drobnych rzeczy, które możesz sprowadzić do 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

Wygląda na to, że BigIntegerzawsze powraca, BigInteger.ZEROgdy jakaś operacja, jak np., add(...)Kończy się na zero, więc możesz użyć ==zamiast .equals(z), możesz też zrezygnować z przechowywania s=t.flipBit‌​(2)(6) i zamiast tego wykonać pewne sprytne wewnętrzne zadanie, takie jak: 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);}}}te zmiany sprowadzają to do 280
SamYonnou,

2
Myślę, że masz na myśliVerbose.isEqualTo(Java)
Cyoce

7

Mathematica, 80 bajtów

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

Dostosowanie mojego starszego rozwiązania FizzBuzz.


1
@JacobAkkerboom Przepraszamy, naprawiono. Również w wersji mniej niż 10.3, należy wymienić Echoz Print.
LegionMammal978,

5

Rubin, 71 66 bajtów

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

bez golfa:

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
}

Pracowałem nad tym dłużej niż chciałbym administrować i nie mogę znaleźć sposobu, aby to poprawić. f,n=%w[Fibo Nacci], f,n='Fibbo','Nacci'I f='Fibbo';n='Nacci'wszystkie mają taką samą liczbę znaków. +1
Shelvacu,

1
Możesz zapisać trzy bajty, używając [b,f='Fibo',n='Nacci',f,b,f+n][~b%6], a dwa kolejne, usuwając nawiasy a=b+b=a.
primo

Dziękuję @primo. To fajna sztuczka z ~operatorem. Nigdy wcześniej tego nie widziałem. A teraz wiem, dlaczego indeksy ujemne są częścią rubinu :)
MegaTom

Naprawdę potrzebujesz puts [zamiast puts[?
Erik the Outgolfer,

1
Róże są czerwone, Fiołki są niebieskie, dla Haskella i Ruby nie mam pojęcia.
Erik the Outgolfer

5

> <> , 116 bajtów

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^

Wypróbuj online!


6
Witamy na stronie! :)
DJMcMayhem

Prawdopodobnie można połączyć obie 3%sekcje
Jo King

@JoKing Tak byś pomyślał, ale w rzeczywistości prowadzą one do różnych rezultatów, jeśli n% 3! = 0. Jestem pewien, że jest to sposób, aby je połączyć, ale oznaczałoby to restrukturyzację całego programu, a ja sobie wyobrazić, że rzeczywiście być dłuższy.
hakr14


4

C #, 498 392 320 bajtów

Po prostu bardzo chciałem to zrobić z linq, szkoda, że ​​musiałem napisać własną funkcję sumy dla BigInteger, która naprawdę to zabiła :-(

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

Nie golfowany:

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

Edycja: Do 320 bajtów dzięki LegionMammal978 za sugestię zagregowaną i dzięki odpowiedzi C # olegza dla skrótu x% 6 dla X% 2 i& x% 3, a także użycia operatorów trójskładnikowych w pojedynczej instrukcji WriteLine.


4
Czy słyszałeś o Aggregatefunkcji LINQ?
LegionMammal978,

Zamień „sum” na „t”, aby ogolić 6 bajtów.
Xantix,

3

Python 2, 171 121 bajtów

„Brutalne podejście”.

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 bajtów

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

1
Możesz zapisać cztery bajty, zmieniając a=[b,b=a+b][0]na b=a+b,a=b-a. Ponadto, w całkowicie niezwiązanej notatce, podoba mi się sposób, w jaki odpowiadasz jak bardzo szybko w Stack Overflow hehe Miłego dnia
Piyin

2

Python 2, 100 bajtów

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

W przypadku dużych liczb dodaje Lna końcu a, pokazując, że jest to długa liczba.

Jeśli to jest problem, oto 104 bajtowe rozwiązanie

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

Możesz skrócić forpętlę za pomocą tej wskazówki: codegolf.stackexchange.com/a/5047/42736 . W szczególności execkońcówka wygląda dobrze.
J Atkin,

+1 za exec <program_string>*nlewę. Miły!
agtoever,

2

JavaScript (ES6), 137 134 bajtów

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

Funkcja rekurencyjna, która oblicza Fibonnacciego, umieść ją w tablicy, a następnie wypisz Fibo, Nacci lub liczbę i wywołaj się, aby obliczyć następne do 100.

Uszkadza się w 73 z powodu precyzji liczby javascript. Jedynym sposobem na obejście tego byłoby dodanie własnej kalkulacji bitowej.


To nie działa, po jakimś 5527939700884757 + 8944394323791464 = 14472334024676220czasie powinno się nie udać, 14472334024676221ponieważ JavaScript używa 16-bitowych liczb zmiennoprzecinkowych, a to wymaga 17 bitów precyzji. Powinieneś także wydrukować 1dwa razy.
George Reith,

Dodano wydruk 1 dwa razy. Dla precyzji muszę zmienić wszystko w kodzie, aby działał (nie używając Number, ale Uint32Array i wykonując bity obliczeniowe po bitach)
Naouak

2

QBasic, 144 141 bajtów

Niezbyt mały, ale pokonuje C ++ i 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

Bez deklaracji, :wszędzie tam, gdzie to możliwe, ponieważ jest o 1 bajt tańszy niż CRLF. Przedrostek 0 w liczniku pętli: Basic przepełni się na 47 znaku Fibonacciego, więc skompensowano dodatkowy bajt, który powinien tam być.

EDYCJA: Neil zapisał mi 3 bajty: 141 bajtów.


Możesz usunąć pierwszy, a$+ponieważ wiadomo, że w tym momencie jest to pusty ciąg.
Neil,

2

Wolfram Language, 84 bajtów

Oczywiście rodzaj oszustwa z powodu wbudowanego Fibonacci.

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

Przykładowa komenda do uruchomienia skryptu

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

2

Perl, 74 bajty

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

Wymaga następującej opcji wiersza poleceń:, -lMbigintliczony jako 8.


Przykładowe użycie

$ perl -lMbigint fibo-nacci.pl

Perl, 79 bajtów

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

Taki sam jak powyżej, bez wymagania żadnych opcji wiersza poleceń.


2

GolfScript, 47 bajtów

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

Wyjaśnienie

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 bajtów

Zaoszczędzono trzy bajty dzięki uprzejmości Mitcha Schwartza .

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

Przykładowe użycie

$ gp -qf < fibo-nacci.gp

1
Krótiej nie używać wbudowanego; Mam 73 zfor(i=b=!a=1,99,b=a+a=b; ...
Mitch Schwartz

1
@MitchSchwartz to się kiedyś nazywało fibo;)
primo

2

> <>, 128 119 bajtów

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

I bezczelnie ukradł pożyczył istniejącego programu FizzBuzz program i modyfikować go do pracy dla sekwencji Fibo Nacci. Wyprowadza liczby na zawsze. Teraz jest naprawiony, tzn. Wyświetla tylko 100 liczb. Wypróbuj tutaj .


2
Musisz podać tylko pierwsze 100 liczb Fibo Nacci, nie więcej, nie mniej.
Kritixi Lithos

@ ΚριτικσιΛίθος W końcu udało mi się sprawić, że wypisuje tylko 100 liczb.
DanTheMan,

Daje to 101 liczb w TIO, ale nie działa na połączonej stronie
Jo King

1

Pyth, 51 bajtów

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

Generuje sekwencję Fibonacciego, a następnie decyduje, co wydrukować.

                    [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

Aby przetestować, spróbuj tego (robi tylko pierwsze 20 liczb)

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

Jak długo trwa uruchomienie programu?
Kritixi Lithos

Nie mam pojęcia, że ​​w ciągu 30 sekund nie doszło do wniosku, że wypracowanie tak dużych faktoryzacji pierwotnych prawdopodobnie bardzo spowolniłoby to.
Niebieski,

1

Clojure, 127 bajtów

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

Nie golfowany:

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

Niektóre zastosowane sztuczki:

  • To niewiele, defco daje samą sekwencję Fibonacciego, zostaje bezwstydnie skradzione Konradowi Garusowi .
  • strmoże przyjmować symbole jako dane wejściowe. Szalony, prawda?
  • Mapy i wartości domyślne są ifw niektórych przypadkach najkrótszym sposobem na napisanie .

Co to jest lazy-cat?
Kritixi Lithos

@ ΚριτικσιΛίθος Leniwie łączy wiele sekwencji. W tym przypadku konkatenuje pierwsze dwa elementy sekwencji Fibonacciego ( [1 1]) z wynikiem sumowania każdego elementu w sekwencji Fibonacciego z elementem następującym po nim.
Sam Estep,

Czy mam rację, zgadując, że jest to w zasadzie wersja Clojure fibs = 0 : 1 : zipWith (+) fibs (tail fibs)?
Soham Chowdhury

@SohamChowdhury Tak, o ile mogę powiedzieć.
Sam Estep,



1

JavaScript (ES2015), 99 bajtów

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

Nie golfowany:

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

Użyj alertzamiast console.log; goli niektóre bajty.
Kritixi Lithos

1

F #, 202 163 149 bajtów

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

To jest plik FSX (skrypt F #)


Dziwi mnie, że to działa
asibahi

1

PHP, 75 bajtów

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

Zaskakująco konkurencyjny. Wymaga PHP w wersji 5.5 lub nowszej. Przyjmuję ustawienia domyślne, ponieważ nie mają one pliku .ini (możesz wyłączyć lokalne .ini z -nopcją).


Przykładowe użycie

$ php -n fibo-nacci.php

WIth -n bcaddnie działa, nawet jeśli bcmathjest zainstalowany. Bez -n wielu rzeczy jest wysyłany na stderr.
Sylwester,

Działa na moich urządzeniach.
primo

1

Prolog, 182 bajty

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

Wypróbuj online tutaj
Aby uruchomić program, użyj zapytania:

p.
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.