Fibonacci + Fizz Buzz = Fibo Nacci!


74

Fibonacci + FizzBuzz = Fibo Nacci!


Ihre Herausforderung besteht darin, ein Fibo Nacci-Programm zu erstellen!

  • Ein Fibo Nacci-Programm gibt die ersten 100 Fibonacci-Zahlen aus (beginnend mit 1).
  • Wenn die Fibonacci-Zahl sowohl durch 2 als auch durch 3 teilbar ist (dh durch 6 teilbar ist), wird anstelle der Zahl FiboNacci ausgegeben.
  • Andernfalls, wenn die Fibonacci-Zahl durch 2 teilbar ist, wird Fibo anstelle der Zahl ausgegeben.
  • Andernfalls wird Nacci anstelle der Zahl ausgegeben, wenn die Fibonacci-Zahl durch 3 teilbar ist.

Regeln

  • Das Programm sollte keine Eingabe annehmen.
  • Das Programm sollte \nnach jeder Eingabe eine neue Zeile ( ) ausgeben .
  • Das Programm sollte nicht etwas zu STDERR drucken.
  • Das Programm muss die ersten 100 Fibo Nacci-Einträge ausgeben (ab 1).
  • Standardlücken sind nicht erlaubt (Standardeinstellung).
  • Das ist also gewinnt der kürzeste Code in Bytes!

Hier ist die erwartete Ausgabe:

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

Der Katalog

Das Snackstapel- Snippet am Ende dieses Beitrags generiert den Katalog aus den Antworten a) als Liste der kürzesten Lösungen pro Sprache und b) als Gesamt-Bestenliste.

Um sicherzustellen, dass Ihre Antwort angezeigt wird, beginnen Sie Ihre Antwort mit einer Überschrift. Verwenden Sie dazu die folgende Markdown-Vorlage:

## Language Name, N bytes

Wo Nist die Größe Ihres Beitrags? Wenn Sie Ihren Score zu verbessern, Sie können alte Rechnungen in der Überschrift halten, indem man sich durch das Anschlagen. Zum Beispiel:

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

Wenn Sie mehrere Zahlen in Ihre Kopfzeile aufnehmen möchten (z. B. weil Ihre Punktzahl die Summe von zwei Dateien ist oder wenn Sie die Strafen für Interpreter-Flags separat auflisten möchten), stellen Sie sicher, dass die tatsächliche Punktzahl die letzte Zahl in der Kopfzeile ist:

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

Sie können den Namen der Sprache auch als Link festlegen, der dann im Snippet angezeigt wird:

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


6
Was ist mit Sprachen mit dem höchsten ganzzahligen Typ von nur 64 Bit? :(
Reichen

3
@Zereges In dieser Angelegenheit tut mir leid. :(
Kritixi Lithos

28
Vielleicht sollte es "Fizzo Nacci"
heißen

4
@SztupY Da die Ausgabe in dieser Frage völlig unveränderlich ist, benötigen Sie überhaupt keine ganzen Zahlen. Behandle diese Frage einfach als eine Frage der Kolmogorov-Komplexität (ich habe sogar den Tag hinzugefügt) und gehe von dort aus.
Chris Jester-Young

3
@ ChrisJester-Young Es ist immer noch eine unnötige Einschränkung, die kreative Implementierer von dieser Aufgabe abhalten könnte. Und die meisten Lösungen (einschließlich der zweithöchsten) brechen bereits zusammen
SztupY

Antworten:


18

Pyth, 37 Bytes

Ich gehe die Fibonacci-Zahlen durch, anstatt sie vorher zu generieren, da es sehr kurz ist.

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

Probieren Sie es online aus.


Herzlichen Glückwunsch zum Gewinn dieser Herausforderung! Mir hat gefallen, dass diese Lösung schnell war.
Kritixi Lithos

45

Python 2, 62 Bytes

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

Eigentlich nicht viel anders als der Standard-FizzBuzz.


1
Das ist großartig.
J Atkin

Ich muss mich an dieses Loop-Konstrukt für meinen nächsten Ruby-Golf erinnern. Das ist großartig.
klatschen

21

C ++ 11-Metaprogrammierung, 348 Bytes

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

Weil warum nicht. Kompiliert mit warning C4307: '+': integral constant overflow, läuft gut, aber 93+ Fibonacci-Zahlen werden nicht korrekt angezeigt (wegen Überlauf), daher ist dies ein ungültiger Eintrag (aber ich konnte ihn nicht mit so vielen Bytes gewinnen)

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

Sie können explodierte Zeichenfolgen ( template <char H, char ...T>) in Ihren Vorlagen verwenden, um (theoretisch) Werte beliebiger Länge zu verarbeiten. Dann müsste man nur die letzten 2 Zeichen in jeder Zeichenfolge untersuchen, um die Teilbarkeit durch 2 und / oder 3 zu bestimmen.
Mego

@Mego Ich verstehe dich nicht. Wie es mir helfen würde, mit Werten umzugehen, die nicht in 64-Bit passen. Außerdem benötigen Sie alle Ziffern, um festzustellen, ob die Zahl durch 3 teilbar ist.
Zereges,

Zeichenfolgen können beliebig lang sein (bis Ihnen der Speicher ausgeht). Und du hast recht, ich habe meinen Kommentar durcheinander gebracht. Sie können jedoch die digitale Summe berechnen, um die Teilbarkeit durch 3 zu bestimmen.
Mego

@Mego Das Hinzufügen dieser Zeichenfolgen würde viel mehr Aufwand erfordern.
Zereges

1
Sie könnten den Gnu-Dialekt verwenden __uint128_tund vielleicht verwenden.

14

C # 175 171 152 145 Bytes

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

Unkomprimiert:

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

Selbst wenn ich die Ausgabe mit einem DeflateStream komprimierte, war das niedrigste, was ich bekommen konnte, 191 Zeichen, was wahrscheinlich der bestmöglichen c # -Antwort sehr nahe kommt. Eine schade BigInteger ist erforderlich.
Jodrell

"using System;" wird eine weitere -1 in der Größe geben.
olegz

1
Trotz der Verwendung von: -S musste ich System.Numerics immer noch mit System voranstellen, daher bin ich nicht sicher, ob die Verwendung funktionieren wird.
Jodrell,

1
Sie können 3 Zeichen speichern, indem Sie das ==0s durch ersetzen >0und die Ternaries umkehren: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
Sie können weitere 7 Zeichen speichern, indem Sie zu ändern decimal a=1,b=1, dynamic a=1m,b=aund dann können Sie die verlieren (object):)
Timwi

13

Oracle SQL, 212 Byte

Keine Golfsprache, aber ich musste versuchen ...

Verketten aller Zeilen mit \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

Oder mit einem Eintrag aus der Sequenz pro Zeile (162 Bytes):

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
Genial, nur für die Verwendung von SQL
Wayne Werner

Verwenden Sie einfach die letzte, da dies "gleichbedeutend" mit der Ausgabe "pro Zeile" ist. Und es ist wirklich ein gutes Stück Code. Gut gemacht!
Ismael Miguel

@IsmaelMiguel Wenn es in SQL * Plus (oder einer anderen Befehlszeilenschnittstelle) ausgeführt wird, wird nach jeder Zeile eine Ausgabe in Zeilenumbrüchen (als Teil der Berichterstattung über die Abfrageausgabe) angezeigt. Dies ist jedoch eine Funktion der CLI und nicht der SQL-Sprache. Um der Regel zu entsprechen, The program should output a new line (\n) after every entrybelasse ich sie als längeren Code, aber der kürzere kann ||CHR(13)vor dem Finale hinzugefügt werden (ohne auf eine CLI angewiesen zu sein) FROMfür 171 chracters.
MT0

Könnten Sie nicht verwenden "\n"? Scheint auf MySQL zu arbeiten. (Running select length("\n")gibt 1 zurück und Running select "\n"gibt nicht zurück n, wie bei select "\p"Returns, pda es sich um ein ungültiges Escape handelt)
Ismael Miguel,

SELECT LENGTH('\n') FROM DUALAusgaben 2in Oracle als werden '\n'nicht konvertiert 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?**!"'"$""~

Probieren Sie es online!


15
Es sieht buchstäblich so aus, als ob meine Katze auf meine Tastatur gesprungen wäre, während ich versuchte, klebrige Tasten einzuschalten. Gute Arbeit.
Phase

2
@phase im übertragenen Sinne. Entweder das oder du schaust nicht zu genau hin. Oder du hast eine kleine Katze oder eine riesige Tastatur. Weil diese Katze es geschafft hat, Fibo und Nacci zu tippen, aber sonst alle Buchstabentasten außer einem r meidet.
John Dvorak

3
@ JanDvorak Ich denke, Phase hat Makros dafür eingerichtet;)
Wayne Werner

2
@phase 1. Warum ist deine Katze in deinem Zimmer ?; 2. Warum solltest du klebrige Tasten einschalten? 3? Warum hast du keine Katzenfalle auf deinem Schreibtisch, damit deine Katze nicht auf deine Tastatur springt?
Nzall

7

Java, 407 398 351 308 Bytes

Golfen mit Hilfe von @Geobits und @SamYonnou

Verbreiten Sie das Wort: 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);}}}

Ungolfed-Version:

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
Hier kann mehr golfen werden. Import java.math.*statt der ganzen Sache. Verwenden Sie die Konstanten für ONEund ZEROanstelle von newBigIntegers. Entfernen Sie die publicaus der Klasse. Packen Sie alles ein, mit Ausnahme der printlnAnweisung im forBody in der Loop-Deklaration usw. Ich empfehle, die Java-Golftipps im Allgemeinen zu lesen .
Geobits

@Geobits Fertig! Schade, dass ich mit BigIntegerden verschiedenen Golftechniken nicht vertraut war.
Sock

Speichern Sie BigInteger.ZERO, indem Sie flipBit (...) als Alternative zu New BigInteger (...) und einige andere kleinere Dinge verwenden, die Sie bis auf 308 bringen können: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

Sieht so aus, als ob er BigIntegerimmer dann zurückkehrt, BigInteger.ZEROwenn eine Operation wie add(...)ausgewertet wird, sodass Sie ==stattdessen verwenden .equals(z)können. Außerdem können Sie das Speichern von 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);}}}
aufheben

2
Ich denke du meinstVerbose.isEqualTo(Java)
Cyoce

7

Mathematica, 80 Bytes

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

Anpassung meiner älteren FizzBuzz-Lösung.


1
@JacobAkkerboom Entschuldigung, behoben. Ersetzen Sie Echobei Versionen unter 10.3 auch durch Print.
LegionMammal978

5

Ruby, 71 66 Bytes

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
}

Ich habe länger daran gearbeitet, als ich es gerne administrieren möchte, und kann es nicht verbessern. f,n=%w[Fibo Nacci], f,n='Fibbo','Nacci'und f='Fibbo';n='Nacci'alle haben die gleiche Zeichenanzahl. +1
Shelvacu

1
Sie können mit drei Bytes [b,f='Fibo',n='Nacci',f,b,f+n][~b%6]und mit zwei weiteren Bytes sparen , indem Sie die Klammern in entfernen a=b+b=a.
Primo

Vielen Dank an @primo. Das ist ein ordentlicher Trick mit dem ~Bediener. Ich habe es noch nie gesehen. Und jetzt weiß ich, warum negative Indizes Teil von Ruby sind :)
MegaTom

Wirklich brauchen puts [statt puts[?
Erik der Outgolfer

1
Rosen sind rot, Veilchen sind blau, für Haskell und Ruby habe ich keine Ahnung.
Erik der Outgolfer

5

> <> 116 Bytes

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^

Probieren Sie es online!


6
Willkommen auf der Seite! :)
DJMcMayhem

Sie könnten wahrscheinlich beide 3%Abschnitte kombinieren
Jo King

@JoKing Du denkst schon, aber sie führen tatsächlich zu unterschiedlichen Ergebnissen, wenn n% 3! = 0 ist. Ich bin sicher, es gibt eine Möglichkeit, sie zu kombinieren, aber das würde eine Umstrukturierung des gesamten Programms bedeuten, und ich stelle mir vor, dass es tatsächlich länger dauern würde.
hakr14


4

C #, 498 392 320 Bytes

Ich wollte das eigentlich nur mit linq machen, schade, dass ich meine eigene Summenfunktion für BigInteger schreiben musste, die es wirklich tötete :-(

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

Bearbeiten: Bis zu 320 Byte dank LegionMammal978 für den aggregierten Vorschlag und dank der C # -Antwort von olegz für die Kurzschreibweise x% 6 für X% 2 und x% 3 sowie der Verwendung von ternären Operatoren in einer einzelnen WriteLine-Anweisung.


4
Haben Sie von der AggregateLINQ-Funktion gehört?
LegionMammal978

Ersetzen Sie "sum" durch "t", um 6 Bytes zu speichern.
Xantix

3

Python 2, 171 121 Bytes

"Brute Force Ansatz."

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
Sie könnten durch Änderung vier Bytes speichern a=[b,b=a+b][0]zu b=a+b,a=b-a. Auch in einer völlig anderen Anmerkung, ich mag die Art und Weisen Sie wie wirklich schnell beantworten in Stack - Überlauf hehe einen schönen Tag
Piyin

2

Python 2, 100 Bytes

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

Fügt bei großen Zahlen Lam Ende ein hinzu, um anzuzeigen , dass es sich um eine lange Zahl handelt.

Wenn dies ein Problem ist, finden Sie hier eine 104-Byte-Lösung

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

Sie können die forSchleife mit diesem Tipp verkürzen : codegolf.stackexchange.com/a/5047/42736 . Insbesondere der execTipp sieht gut aus.
J Atkin

+1 für den exec <program_string>*nTrick. Nett!
voraussichtlich

2

Javascript (ES6), 137 134 Bytes

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

Rekursive Funktion, die Fibonnacci berechnet, es in ein Array einsetzt, dann Fibo, Nacci oder die Zahl ausgibt und sich selbst aufruft, um als nächstes bis 100 zu berechnen.

Es bricht bei 73 wegen der Genauigkeit der Javascript-Nummer. Die einzige Möglichkeit, das zu umgehen, wäre, meine eigene Bitberechnung hinzuzufügen.


Dies funktioniert nicht, es geht dann schief, 5527939700884757 + 8944394323791464 = 14472334024676220wenn es sein sollte, 14472334024676221weil JavaScript Floats mit 16-Bit-Präzision verwendet und das 17-Bit-Präzision erfordert. Sie sollten auch 1zweimal drucken .
George Reith

Fügte den Druck 1 zweimal hinzu. Für die Präzision muss ich alles am Code ändern, damit es funktioniert (nicht mit Number, sondern mit Uint32Array und bitweise Berechnung)
Naouak

2

QBasic, 144 141 Bytes

Nicht besonders klein, aber es schlägt C ++ und 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

Keine Deklarationen, wird :wo immer möglich verwendet, da es 1 Byte billiger ist alsCRLF . Dem Schleifenzähler wird eine 0 vorangestellt: Basic überläuft das 47. Fibonacci-Zeichen, sodass das zusätzliche Byte, das dort sein sollte, ausgeglichen wird.

BEARBEITEN: Neil hat mir 3 Bytes gespart: 141 Bytes.


Sie können die erste entfernen, a$+da bekannt ist, dass es sich an dieser Stelle um die leere Zeichenfolge handelt.
Neil

2

Wolfram-Sprache, 84 Bytes

Art des Betrügens natürlich wegen des eingebauten Fibonacci.

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

Beispielbefehl zum Ausführen des Skripts

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

2

Perl, 74 Bytes

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

Erfordert die folgende Befehlszeilenoption:, -lMbigintals 8 gezählt.


Beispielnutzung

$ perl -lMbigint fibo-nacci.pl

Perl, 79 Bytes

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

Wie oben, ohne dass Befehlszeilenoptionen erforderlich sind.


2

GolfScript, 47 Bytes

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

Erläuterung

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 Bytes

Drei Bytes mit freundlicher Genehmigung von Mitch Schwartz gespeichert .

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

Beispielnutzung

$ gp -qf < fibo-nacci.gp

1
Es ist kürzer, die eingebauten Funktionen nicht zu verwenden. Ich habe 73 mitfor(i=b=!a=1,99,b=a+a=b; ...
Mitch Schwartz

1
@MitchSchwartz es hieß früher fibo;)
Primo

2

> <> 128 119 Bytes

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

Ich habe schamlos ein vorhandenes Programm FizzBuzz entlehnt und es so modifiziert, dass es für die Fibo Nacci-Sequenz funktioniert. Es gibt Zahlen für immer aus. Jetzt ist es fest, dh es werden nur 100 Nummern ausgegeben. Probieren Sie es hier aus .


2
Sie müssen nur die ersten 100 Fibo Nacci-Zahlen ausgeben, nicht mehr und nicht weniger.
Kritixi Lithos

@ ΚριτικσιΛίθος Ich habe es endlich geschafft, nur 100 Zahlen auszugeben.
DanTheMan

Dies gibt 101 Nummern auf TIO aus, funktioniert aber auf der verlinkten Seite nicht
Jo King,

1

Pyth, 51 Bytes

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

Erzeugt die Fibonacci-Sequenz und entscheidet dann, was gedruckt werden soll.

                    [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

Versuchen Sie dies zu testen (nur die ersten 20 Zahlen)

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

Wie lange dauert es, das eigentliche Programm auszuführen?
Kritixi Lithos

Ich habe keine Ahnung, dass es in den 30 Sekunden, die es dauerte, um herauszufinden, dass das Herausarbeiten so großer Primfaktoren wahrscheinlich viel verlangsamen würde.
Blau

1

Clojure, 127 Bytes

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

Einige Tricks verwendet:

  • Das hübsche kleine def, das die Fibonacci-Sequenz selbst gibt , wird Konrad Garus schamlos gestohlen .
  • strkann Symbole als Eingabe nehmen. Verrückt, richtig?
  • Karten und Standardwerte sind ifin einigen Fällen der kürzeste Weg zum Schreiben .

Was ist lazy-cat?
Kritixi Lithos

@ ΚριτικσιΛίθος Es verkettet träge mehrere Sequenzen. In diesem Fall werden die ersten beiden Elemente der Fibonacci-Sequenz ( [1 1]) verkettet, wobei jedes Element in der Fibonacci-Sequenz mit dem darauf folgenden Element summiert wird.
Sam Estep

Habe ich Recht damit, dass dies im Grunde die Clojure-Version von ist fibs = 0 : 1 : zipWith (+) fibs (tail fibs)?
Soham Chowdhury

@SohamChowdhury Ja, soweit ich das beurteilen kann.
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))

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

Verwenden Sie alertanstelle von console.log; Einige Bytes werden abgeschabt.
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

Dies ist eine FSX-Datei (F # -Skript)


Ich bin überrascht, dass dies funktioniert
Asibahi

1

PHP, 75 Bytes

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

Überraschend wettbewerbsfähig. Benötigt PHP v5.5 oder höher. Ich gehe von Standardeinstellungen aus, da diese ohne .ini sind (Sie können Ihre lokale .ini mit der -nOption deaktivieren ).


Beispielnutzung

$ php -n fibo-nacci.php

Mit -n bcaddfunktioniert nicht, auch wenn bcmathinstalliert ist. Ohne -n viel Zeug wird auf stderr ausgegeben.
Sylwester

Funktioniert mit meiner (n) Box (en).
Primo

1

Prolog, 182 Bytes

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

Probieren Sie es hier online aus.
Um das Programm auszuführen, verwenden Sie die Abfrage:

p.
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.