Fibonacci + Fizz Buzz = Fibo Nacci!


74

Fibonacci + FizzBuzz = Fibo Nacci!


Votre défi est de créer un programme Fibo Nacci!

  • Un programme Fibo Nacci génère les 100 premiers nombres de Fibonacci (à partir de 1).
  • Si le nombre de Fibonacci est divisible par 2 et par 3 (c'est-à-dire qu'il est divisible par 6), indiquez FiboNacci à la place du nombre.
  • Sinon, si le nombre Fibonacci est divisible par 2, indiquez Fibo au lieu du nombre.
  • Sinon, si le nombre de Fibonacci est divisible par 3, indiquez alors Nacci au lieu du nombre.

Règles

  • Le programme ne devrait prendre aucune entrée.
  • Le programme devrait afficher une nouvelle ligne ( \n) après chaque entrée.
  • Le programme ne doit rien imprimer sur STDERR.
  • Le programme doit générer les 100 premières entrées Fibo Nacci (à partir de 1).
  • Les failles standard ne sont pas autorisées (par défaut).
  • C'est du donc le code le plus court en octets gagne!

Voici le résultat attendu:

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

Le catalogue

L' extrait de pile de collations au bas de cet article génère le catalogue à partir des réponses a) sous forme de liste des solutions les plus courtes par langue et b) sous forme de classement global.

Pour vous assurer que votre réponse apparaît, commencez votre réponse par un titre, en utilisant le modèle Markdown suivant:

## Language Name, N bytes

Nest la taille de votre soumission. Si vous améliorez votre score, vous pouvez conserver les anciens scores en les effaçant. Par exemple:

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

Si vous souhaitez inclure plusieurs numéros dans votre en-tête (par exemple, parce que votre score est la somme de deux fichiers ou si vous souhaitez répertorier séparément les pénalités d'indicateur d'interprétation), assurez-vous que le score réel est le dernier numéro de l'en-tête:

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

Vous pouvez également faire du nom de la langue un lien qui apparaîtra ensuite dans l'extrait de code:

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


6
Qu'en est-il des langues dont le type entier le plus élevé n'est que de 64 bits? :( N'est-ce pas assez de 90 numéros?
Zereges

3
@ Zereges Dans cette affaire, je suis désolé. :(
Kritixi Lithos

28
Peut-être devrait-il s'appeler "Fizzo Nacci"
LegionMammal978

4
@SztupY Parce que le résultat de cette question est complètement invariant, vous n'avez même pas besoin d'entiers du tout. Traitez simplement cette question comme une question de complexité kolmogorov (j'ai même ajouté la balise) et partez de là.
Chris Jester-Young

3
@ ChrisJester-Young c'est toujours une limitation inutile, ce qui pourrait empêcher les responsables de la création créatifs d'éviter cette tâche. Et la plupart des solutions (y compris la 2e la plus votée) ont déjà
commencé

Réponses:


18

Pyth, 37 octets

Je boucle les numéros de Fibonacci au lieu de les générer à l’avance, car c’est vraiment court.

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

Essayez-le en ligne.


Félicitations pour avoir remporté ce défi! J'ai aimé que cette solution était rapide.
Kritixi Lithos

45

Python 2, 62 octets

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

Pas très différent du FizzBuzz standard, vraiment.


1
Ceci est incroyable.
J Atkin

Je dois me souvenir de cette construction en boucle pour mon prochain golf Ruby. Ceci est incroyable.
applaudir

21

Métaprogrammation C ++ 11, 348 octets

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

Parce que pourquoi pas Il compile avec warning C4307: '+': integral constant overflow, fonctionne bien, mais plus de 93 e nombres de Fibonacci ne sont pas affichés correctement (en raison d'un débordement), il s'agit donc d'une entrée non valide (mais je ne pouvais pas le gagner avec autant d'octets).

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

Vous pouvez utiliser des chaînes éclatées ( template <char H, char ...T>) dans vos modèles pour gérer (théoriquement) des valeurs de longueur arbitraire. Ensuite, il suffirait d'examiner les 2 derniers caractères de chaque chaîne pour déterminer la divisibilité par 2 et / ou 3.
Mego

@ Mego je ne vous comprends pas. Comment cela m'aiderait-il à gérer des valeurs qui ne rentrent pas dans la version 64 bits? De plus, vous devez connaître tous les chiffres pour savoir si le nombre est divisible par 3.
Zereges

Les chaînes peuvent être arbitrairement longues (jusqu'à épuisement de la mémoire). Et vous avez raison, j'ai raté mon commentaire. Vous pouvez néanmoins calculer la somme numérique pour déterminer la divisibilité par 3.
Mégo

@Mego L'ajout de ces chaînes nécessiterait beaucoup plus d'efforts.
Zereges

1
Vous pouvez utiliser le dialecte GNU et utiliser __uint128_t, peut-être.

14

C #, 175 171 152 145 octets

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

Non compressé:

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

Même en comprimant la sortie avec un DeflateStream, le minimum possible était de 191 caractères, ce qui est probablement très proche de la meilleure réponse possible en c #. Une honte BigInteger est nécessaire.
Jodrell

"using System"; donnera un autre -1 en taille.
olegz

1
Je devais toujours préfixer System.Numerics avec System malgré l'utilisation de: -S, je ne suis donc pas sûr que l'utilisation fonctionnera.
Jodrell

1
Vous pouvez sauvegarder 3 caractères en remplaçant le ==0s par >0et en inversant les ternaires: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
Vous pouvez enregistrer un autre 7 caractères en changeant decimal a=1,b=1à dynamic a=1m,b=aet vous pouvez perdre la (object):)
Timwi

13

Oracle SQL, 212 octets

Pas une langue de golf mais je devais essayer ...

Concaténer toutes les lignes avec \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

Ou avec une entrée de la séquence par ligne (162 octets):

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
Génial, juste pour l'utilisation de SQL
Wayne Werner

Il suffit d'utiliser le dernier, car c'est "l'équivalent" de la sortie "par ligne". Et c'est vraiment un bon morceau de code. Bien joué!
Ismael Miguel

@IsmaelMiguel S'il est exécuté dans SQL * Plus (ou une autre interface de ligne de commande), il y aura une sortie en nouvelle ligne après chaque ligne (dans le cadre de la manière dont il rapporte la sortie de la requête). Cependant, c’est une fonction de la CLI et non du langage SQL - pour être conforme à la règle, The program should output a new line (\n) after every entryje le laisse comme code le plus long, mais le code le plus court pourrait être rendu conforme (sans s’appuyer sur une CLI) en ajoutant ||CHR(13)avant la version finale. FROMpour 171 personnes.
MT0

Ne pourriez-vous pas utiliser "\n"? Semble travailler sur MySQL. (Running select length("\n")renvoie 1 et select "\n"ne renvoie pas n, comme pour les select "\p"retours pdus à une évasion non valide)
Ismael Miguel

SELECT LENGTH('\n') FROM DUALles sorties 2dans Oracle en tant que '\n'ne sont pas converties CHR(13).
MT0

11

ShapeScript , 83 octets

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

Essayez-le en ligne!


15
On dirait littéralement que mon chat a sauté sur le dessus de mon clavier pendant que j'essayais d'activer des touches collantes. Bon travail.
phase

2
@phase au sens figuré. Soit ça ou vous ne regardez pas de trop près. Ou vous avez un petit chat ou un clavier géant. Parce que ce chat a réussi à taper Fibo et Nacci mais qu’il évite toutes les lettres sauf un pour un.
John Dvorak

3
@JanDvorak Je pense que phase a une configuration de macros pour cela;)
Wayne Werner

2
@phase 1. Pourquoi votre chat est-il dans votre chambre? 2. pourquoi voudriez-vous activer les touches collantes? 3? Pourquoi n'avez-vous pas de boîte à chat sur votre bureau pour éviter que votre chat ne saute sur votre clavier?
Nzall

7

Java, 407 398 351 308 octets

Il a joué au golf avec l'aide de @Geobits et @SamYonnou

Faire connaitre: 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);}}}

Version non-golfée:

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
Cela peut être joué au golf plus. Importer java.math.*au lieu de tout. Utilisez les constantes pour ONEet à la ZEROplace de newBigIntegers. Retirer le publicde la classe. Emballez tout sauf la printlndéclaration dans le forcorps de la déclaration de boucle, etc. Je vous recommande de regarder par-dessus les astuces de golf Java en général.
Geobits

@ Geobits Fait! 'C'était dommage que je ne connaisse pas BigIntegeret ses différentes techniques de golf.
Chaussette

Stockage de BigInteger.ZERO, en utilisant flipBit (...) comme alternative au nouveau BigInteger (...), et quelques autres petites choses que vous pouvez réduire à 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

On dirait que BigIntegerrevient toujours BigInteger.ZEROquand une opération comme add(...)évalue à zéro alors vous pouvez utiliser à la ==place .equals(z), vous pouvez également supprimer le stockage s=t.flipBit‌​(2)(6) et effectuer une tâche interne intelligente comme celle- 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);}}}ci : ces modifications la
réduisent

2
Je pense que tu veux direVerbose.isEqualTo(Java)
Cyoce

7

Mathematica, 80 octets

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

Adaptation de mon ancienne solution FizzBuzz.


1
@JacobAkkerboom Désolé, corrigé. En outre, pour les versions inférieures à 10.3, remplacez Echopar Print.
LegionMammal978

5

Ruby, 71 66 octets

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
}

J'ai travaillé dessus plus longtemps que je ne le souhaiterais et je ne trouve aucun moyen de l'améliorer. f,n=%w[Fibo Nacci], f,n='Fibbo','Nacci'Et f='Fibbo';n='Nacci'tous ont le même nombre de caractères. +1
Shelvacu

1
Vous pouvez enregistrer trois octets en utilisant [b,f='Fibo',n='Nacci',f,b,f+n][~b%6], et deux autres en supprimant les parenthèses a=b+b=a.
Primo

Merci @primo. C'est une astuce avec l' ~opérateur. Jamais vu auparavant. Et maintenant je sais pourquoi les index négatifs font partie de ruby ​​:)
MegaTom

Vraiment besoin puts [au lieu de puts[?
Erik the Outgolfer

1
Les roses sont rouges, les violettes sont bleues, pour Haskell et Ruby, je n'en ai aucune idée.
Erik l'Outgolfer

5

> <> , 116 octets

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^

Essayez-le en ligne!


6
Bienvenue sur le site! :)
DJMcMayhem

Vous pourriez probablement combiner les deux 3%sections
Jo King

@JoKing On pourrait le penser, mais ils aboutissent à des résultats différents si n% 3! = 0. Je suis sûr qu'il existe un moyen de les combiner, mais cela impliquerait une restructuration de l'ensemble du programme, et j'imagine qu'il serait en réalité plus long.
hakr14

4

Pyth, 39

Vtu+Gs>2G99U2|+*!%N2"Fibo"*!%N3"Nacci"N

Très similaire à la solution standard de fizzbuzz, juste avec un générateur pour les numéros de Fibonacci.

Essayez-le ici


4

C #, 498 392 320 octets

Je voulais vraiment faire cela avec linq, dommage que je devais écrire ma propre fonction de somme pour BigInteger qui l'a vraiment tué :-(

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

Edit: Réduisez jusqu'à 320 octets grâce à LegionMammal978 pour la suggestion d'agrégat et à la réponse C # d'olegz pour le raccourci x% 6 pour X% 2 && x% 3 ainsi que pour l'utilisation d'opérateurs ternaires dans une seule instruction WriteLine.


4
Avez-vous entendu parler de la Aggregatefonction LINQ?
LegionMammal978

Remplacez "somme" par "t" pour supprimer 6 octets.
Xantix

3

Python 2, 171 121 octets

"Approche de la force brute."

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 Octets

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

1
Vous pourriez économiser quatre octets en changeant a=[b,b=a+b][0]à b=a+b,a=b-a. Aussi, dans une note totalement indépendante, j'aime la façon dont vous répondez très vite dans Stack Overflow hehe Bonne journée
Piyin

2

Python 2, 100 octets

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

Pour les grands nombres, ajoute un Là la fin pour montrer que c'est un nombre long.

Si cela pose problème, voici une solution de 104 octets

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

Vous pouvez raccourcir la forboucle en utilisant cette astuce: codegolf.stackexchange.com/a/5047/42736 . En particulier, la execpointe semble bonne.
J Atkin

+1 pour le exec <program_string>*ntour. Agréable!
agtoever

2

Javascript (ES6), 137 134 octets

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

Fonction récursive qui calcule fibonnacci, la met dans un tableau puis affiche Fibo, Nacci ou le nombre et s’appelle pour calculer la suivante jusqu’à 100.

Il tombe à 73 en raison de la précision du nombre javascript. La seule façon de contourner ce problème serait d’ajouter mon propre calcul de bit.


Cela ne fonctionne pas, il ne va pas après 5527939700884757 + 8944394323791464 = 14472334024676220quand il devrait être 14472334024676221parce que JavaScript utilise des flottants de précision 16 bits et qui nécessite 17 bits de précision. Vous devriez également imprimer 1deux fois.
George Reith

Ajout de l'impression 1 deux fois. Pour la précision, j'ai besoin de changer tout le code pour le faire fonctionner (pas en utilisant Number mais Uint32Array et en effectuant des calculs bit par bit)
Naouak

2

QBasic, 144 141 octets

Pas particulièrement petit, mais il bat C ++ et 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

Aucune déclaration, utilisez le :partout où c'est possible car c'est 1 octet moins cher queCRLF . Préfixé 0 au compteur de boucle: Basic débordera sur le 47ème caractère de Fibonacci, donc compensé pour l'octet supplémentaire qui devrait y figurer.

EDIT: Neil m'a sauvé 3 octets: 141 octets.


Vous pouvez supprimer le premier a$+car il est connu que la chaîne est vide à ce stade.
Neil

2

Wolfram Language, 84 octets

Une sorte de triche bien sûr, à cause de la logique intégrée Fibonacci.

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

Exemple de commande pour exécuter le script

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

2

Perl, 74 octets

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

Requiert l'option de ligne de commande suivante:, -lMbigintconsidérée comme 8.


Exemple d'utilisation

$ perl -lMbigint fibo-nacci.pl

Perl, 79 octets

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

Comme ci-dessus, sans nécessiter d'options de ligne de commande.


2

GolfScript, 47 octets

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

Explication

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 octets

Sauvé trois octets avec la permission de 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)))

Exemple d'utilisation

$ gp -qf < fibo-nacci.gp

1
Il est plus court de ne pas utiliser intégré; Je suis 73 avecfor(i=b=!a=1,99,b=a+a=b; ...
Mitch Schwartz

1
@MitchSchwartz il s'appelait autrefois fibo;)
dimanche

2

> <>, 128 119 octets

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

J'ai volé sans vergogne emprunté un programme existant, le programme FizzBuzz, et l'ai modifié pour qu'il fonctionne pour la séquence Fibo Nacci. Il sort des nombres pour toujours. Maintenant, il est fixe, c’est-à-dire qu’il ne sort que 100 numéros. Essayez ici .


2
Vous ne devez sortir que les 100 premiers numéros Fibo Nacci, ni plus, ni moins.
Kritixi Lithos

@ ΡιτικσιΛίθος J'ai finalement réussi à faire en sorte que 100 numéros soient générés.
DanTheMan

Cela génère 101 numéros sur TIO mais ne fonctionne pas sur le site lié
Jo King

1

Pyth, 51 octets

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

Génère la séquence de Fibonacci puis décide quoi imprimer.

                    [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

Pour tester, essayez ceci (seulement les 20 premiers chiffres)

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

Combien de temps faut-il pour exécuter le programme actuel?
Kritixi Lithos

Je ne sais pas du tout, il n'a pas fallu attendre en 30 secondes pour comprendre que le fait de travailler avec des facteurs de taille aussi importants ralentirait probablement beaucoup le processus.
Bleu

1

Clojure, 127 octets

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

Quelques astuces utilisées:

  • Ce joli petit defdétail de la séquence de Fibonacci est volé sans vergogne à Konrad Garus .
  • strpeut prendre des symboles en entrée. Fou, non?
  • Les cartes et les valeurs par défaut sont le moyen le plus rapide d'écrire ifdans certains cas.

C'est quoi lazy-cat?
Kritixi Lithos

@ ΚριτικσιΛίθος Il concatène paresseusement plusieurs séquences. Dans ce cas, il concatène les deux premiers éléments de la séquence de Fibonacci ( [1 1]) avec le résultat de la somme de chaque élément de la séquence de Fibonacci et de l'élément qui le suit.
Sam Estep

Ai-je raison de supposer qu'il s'agit essentiellement de la version Clojure fibs = 0 : 1 : zipWith (+) fibs (tail fibs)?
Soham Chowdhury

@ SohamChowdhury Oui, autant que je sache.
Sam Estep



1

Javascript (ES2015), 99 octets

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

Utilisez alertau lieu de console.log; il supprime quelques octets.
Kritixi Lithos

1

F #, 202 163 149 octets

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

Ceci est un fichier FSX (script F #)


Je suis surpris que cela fonctionne
asibahi

1

PHP, 75 octets

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

Étonnamment compétitif. Requres PHP version 5.5 ou supérieure. J'assume les paramètres par défaut, car ils sont sans .ini (vous pouvez désactiver votre .ini local avec l' -noption).


Exemple d'utilisation

$ php -n fibo-nacci.php

Avec -n bcaddne fonctionne pas même quand bcmathest installé. Sans -n beaucoup de choses est sorti sur stderr.
Sylwester

Fonctionne sur ma (mes) boîte (s).
Primo

1

Prolog, 182 octets

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

Essayez-le en ligne ici
Pour exécuter le programme, utilisez la requête:

p.
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.