Fibonacci + Fizz Buzz = Fibo Nacci!


74

Fibonacci + FizzBuzz = Fibo Nacci!


La tua sfida è creare un programma Fibo Nacci!

  • Un programma Fibo Nacci genera i primi 100 numeri di Fibonacci (a partire da 1).
  • Se il numero di Fibonacci è divisibile per 2 e 3 (ovvero è divisibile per 6), quindi genera FiboNacci anziché il numero.
  • Altrimenti, se il numero di Fibonacci è divisibile per 2, allora genera Fibo invece del numero.
  • Altrimenti, se il numero di Fibonacci è divisibile per 3, allora genera Nacci invece del numero.

Regole

  • Il programma non dovrebbe ricevere input.
  • Il programma dovrebbe generare una nuova riga ( \n) dopo ogni immissione.
  • Il programma non dovrebbe stampare nulla su STDERR.
  • Il programma deve generare le prime 100 voci di Fibo Nacci (a partire da 1).
  • Non sono consentite scappatoie standard (per impostazione predefinita).
  • Questo è quindi vince il codice più breve in byte!

Ecco l'output previsto:

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

Il catalogo

Lo snippet di snack nella parte inferiore di questo post genera il catalogo dalle risposte a) come un elenco della soluzione più breve per lingua eb) come classifica generale.

Per assicurarti che la tua risposta venga visualizzata, ti preghiamo di iniziare la risposta con un titolo, utilizzando il seguente modello Markdown:

## Language Name, N bytes

dov'è Nla dimensione del tuo invio. Se si migliora il punteggio, è possibile mantenere i vecchi punteggi nel titolo, colpendoli. Per esempio:

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

Se si desidera includere più numeri nell'intestazione (ad es. Perché il punteggio è la somma di due file o si desidera elencare separatamente le penalità del flag dell'interprete), assicurarsi che il punteggio effettivo sia l' ultimo numero nell'intestazione:

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

Puoi anche rendere il nome della lingua un collegamento che verrà quindi visualizzato nello snippet:

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


6
Che dire delle lingue con il tipo intero più alto di soli 64 bit? :( I numeri di 90 fib non sono abbastanza?
Zereges,

3
@Zereges In questo caso, mi dispiace. :(
Kritixi Lithos

28
Forse dovrebbe essere chiamato "Fizzo Nacci"
LegionMammal978,

4
@SztupY Poiché l'output in questa domanda è completamente invariante, non hai nemmeno bisogno di numeri interi. Basta considerare questa domanda come una domanda di complessità kolmogorov (ho anche aggiunto il tag) e andare da lì.
Chris Jester-Young,

3
@ ChrisJester-Young è ancora una limitazione non necessaria, che potrebbe fare in modo che gli implementatori creativi evitino questo compito. E la maggior parte delle soluzioni (inclusa la seconda più votata) si stanno già rompendo
SztupY

Risposte:


18

Pyth, 37 byte

Cerco i numeri di Fibonacci invece di generarli in anticipo, poiché è davvero breve da fare.

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

Provalo online.


Congratulazioni per aver vinto questa sfida! Mi è piaciuto che questa soluzione fosse veloce.
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

Non molto diverso dallo standard FizzBuzz, davvero.


1
Questo è fantastico
J Atkin,

Devo ricordare questo costrutto ciclico per il mio prossimo golf Ruby. Questo è fantastico
applaude il

21

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

Perché, perché no. Si compila warning C4307: '+': integral constant overflow, funziona bene, ma 93+ numeri di Fibonacci non sono mostrati correttamente (a causa di overflow), quindi questa è una voce non valida (ma non sono riuscito a vincerlo con così tanti byte)

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

È possibile utilizzare stringhe esplose ( template <char H, char ...T>) nei modelli per (teoricamente) gestire valori di lunghezza arbitraria. Quindi sarebbe solo questione di esaminare gli ultimi 2 caratteri in ciascuna stringa per determinare la divisibilità per 2 e / o 3.
Mego

@Mego non ti capisco. Come mi aiuterebbe a gestire i valori, che non rientrano in 64 bit. Inoltre, hai bisogno di tutte le cifre per scoprire se il numero è divisibile per 3.
Zereges

Le stringhe possono essere arbitrariamente lunghe (fino a quando non si esaurisce la memoria). E hai ragione, ho incasinato il mio commento. Tuttavia, è possibile calcolare la somma digitale per determinare la divisibilità per 3.
Mego

@Mego L'implementazione di queste stringhe richiederebbe molto più sforzo.
Zereges,

1
Potresti usare il dialetto gnu e usare __uint128_t, forse.

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

Non compresso:

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

Anche comprimendo l'output con un DeflateStream il più basso che ho potuto ottenere era di 191 caratteri, quindi questo è probabilmente molto vicino alla migliore risposta c # possibile. È necessario un peccato BigInteger.
Jodrell,

"utilizzo del sistema;" darà un altro -1 in termini di dimensioni.
olegz,

1
Ho dovuto aggiungere il prefisso System.Numerics a System nonostante l'utilizzo: -S, quindi non sono sicuro che funzionerà.
Jodrell,

1
Puoi salvare 3 caratteri sostituendo la ==0s con >0e invertendo i ternari: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
Puoi salvare altri 7 caratteri cambiando decimal a=1,b=1in dynamic a=1m,b=ae quindi puoi perdere (object):)
Timwi

13

Oracle SQL, 212 byte

Non è una lingua da golf ma ho dovuto provare ...

Concatenare tutte le righe con \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

O con una voce dalla sequenza per riga (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
Fantastico, solo per l'utilizzo di SQL
Wayne Werner,

Basta usare l'ultimo, poiché è "equivalente" all'output di "per riga". Ed è davvero un bel pezzo di codice. Molto bene!
Ismael Miguel,

@IsmaelMiguel Se viene eseguito in SQL * Plus (o in un'altra interfaccia della riga di comando), ci sarà un output di nuova riga dopo ogni riga (come parte del modo in cui riporta l'output della query). Tuttavia, questa è una funzione della CLI e non del linguaggio SQL: per essere conforme alla regola The program should output a new line (\n) after every entry, la lascerò come il codice più lungo ma quello più breve potrebbe essere reso conforme (senza fare affidamento su una CLI) aggiungendo ||CHR(13)prima della finale FROMper 171 caratteri.
MT0,

Non potresti usare "\n"? Sembra funzionare su MySQL. (La corsa select length("\n")restituisce 1 e la corsa select "\n"non ritorna n, come per i select "\p"resi a pcausa di una fuga non valida)
Ismael Miguel,

SELECT LENGTH('\n') FROM DUALoutput 2in Oracle in quanto '\n'non vengono convertiti in 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?**!"'"$""~

Provalo online!


15
Sembra letteralmente che il mio gatto sia saltato sulla tastiera mentre cercavo di attivare i tasti appiccicosi. Bel lavoro.
fase

2
@phase in senso figurato. O quello o non stai guardando troppo da vicino. Oppure hai un gatto piccolo o una tastiera gigante. Perché questo gatto è riuscito a digitare Fibo e Nacci ma altrimenti evita tutti i tasti delle lettere, salvo uno.
John Dvorak,

3
@JanDvorak Penso che la fase abbia delle macro configurate per questo;)
Wayne Werner,

2
@phase 1. Perché il tuo gatto è nella tua stanza ?; 2. perché dovresti voler attivare le chiavi adesive? 3? Perché non hai una trappola per gatti sulla scrivania per evitare che il tuo gatto salti sulla tastiera?
Nzall,

7

Java, 407 398 351 308 byte

Giocato a golf con l'aiuto di @Geobits e @SamYonnou

Diffondere la parola: 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);}}}

Versione non golfata:

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
Questo può essere giocato a golf di più. Importa java.math.*invece di tutto. Usa le costanti per ONEe ZEROinvece di newBigIntegers. Rimuovi il publicdalla classe. Imballare tutto tranne l' printlnistruzione nel forcorpo all'interno della dichiarazione del ciclo, ecc. Raccomando di dare un'occhiata ai suggerimenti sul golf di Java in generale.
Geobits,

@Geobits Fatto! "Peccato che non avessi familiarità con le BigIntegersue varie tecniche di golf.
Calza il

Memorizzando BigInteger.ZERO, usando flipBit (...) come alternativa al nuovo BigInteger (...), e alcune altre cose minori puoi arrivare a 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,

Sembra BigIntegersempre che ritorni BigInteger.ZEROquando un'operazione come add(...)zero viene valutata in modo da poterla utilizzare ==invece di .equals(z), inoltre è possibile eliminare l'archiviazione s=t.flipBit‌​(2)(6) e invece eseguire un compito interno intelligente in questo modo: 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);}}}queste modifiche portano a 280
SamYonnou

2
Penso che intendiVerbose.isEqualTo(Java)
Cyoce,

7

Mathematica, 80 byte

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

Adattamento della mia soluzione FizzBuzz precedente.


1
@JacobAkkerboom Siamo spiacenti, risolto. Inoltre, per le versioni inferiori a 10.3, sostituire Echocon Print.
LegionMammal978,

5

Rubino, 71 66 byte

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
}

Ci ho lavorato più a lungo di quanto mi piacerebbe amministrare e non riesco a trovare alcun modo per migliorarlo. f,n=%w[Fibo Nacci], f,n='Fibbo','Nacci'E f='Fibbo';n='Nacci'tutti hanno lo stesso numero di caratteri. +1
Shelvacu,

1
È possibile salvare tre byte utilizzando [b,f='Fibo',n='Nacci',f,b,f+n][~b%6]e altri due rimuovendo le parentesi in a=b+b=a.
primo

Grazie @primo. Questo è un bel trucco con l' ~operatore. Non l'ho mai visto prima. E ora so perché gli indici negativi fanno parte del rubino :)
MegaTom,

Davvero bisogno puts [invece di puts[?
Erik the Outgolfer,

1
Le rose sono rosse, le violette sono blu, per Haskell e Ruby, non ne ho idea.
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^

Provalo online!


6
Benvenuti nel sito! :)
DJMcMayhem

Probabilmente si potrebbe combinare entrambe le 3%sezioni
Jo Re

@JoKing Lo penseresti, ma in realtà portano a risultati diversi se n% 3! = 0. Sono sicuro che ci sia un modo di combinarli, ma sarà di ristrutturazione l'intero programma, e immagino che sarebbe in realtà essere più lungo.
hakr14,

4

Pyth, 39

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

Molto simile alla soluzione fizzbuzz standard, solo con un generatore per i numeri di Fibonacci.

Provalo qui


4

C #, 498 392 320 byte

Volevo davvero farlo con Linq, peccato che dovessi scrivere la mia funzione di somma per BigInteger che l'ha davvero uccisa :-(

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

Modifica: fino a 320 byte grazie a LegionMammal978 per il suggerimento aggregato e grazie alla risposta C # di olegz per la scorciatoia x% 6 per X% 2 && x% 3 e l'uso di operatori ternari in una singola istruzione WriteLine.


4
Hai Aggregatemai sentito parlare della funzione LINQ?
LegionMammal978,

Sostituisci "somma" con "t" per radere 6 byte.
Xantix,

3

Python 2, 171 121 byte

"Approccio a forza bruta."

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
È possibile salvare quattro byte cambiando a=[b,b=a+b][0]in b=a+b,a=b-a. Inoltre, in una nota completamente indipendente, mi piace il modo in cui rispondi molto velocemente in Stack Overflow hehe Buona giornata
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])

Per i numeri grandi, aggiunge un Lalla fine mostrando che è un numero lungo.

Se questo è un problema, ecco una soluzione da 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])

Puoi abbreviare il forloop usando questo suggerimento: codegolf.stackexchange.com/a/5047/42736 . In particolare la execpunta sembra buona.
J Atkin,

+1 per il exec <program_string>*ntrucco. Bello!
agtoever,

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

Funzione ricorsiva che calcola i fibonnacci, inseriscili in un array, quindi emetti Fibo, Nacci o il numero e chiama se stesso per calcolare il prossimo fino a 100.

Si rompe a 73 a causa della precisione del numero javascript. L'unico modo per aggirare questo sarebbe quello di aggiungere il mio calcolo bit.


Questo non funziona, va storto dopo 5527939700884757 + 8944394323791464 = 14472334024676220quando dovrebbe essere 14472334024676221perché JavaScript utilizza float di precisione a 16 bit e richiede 17 bit di precisione. Dovresti anche stampare 1due volte.
George Reith,

Aggiunta la stampa 1 due volte. Per la precisione, ho bisogno di cambiare tutto sul codice per farlo funzionare (non usando Number ma Uint32Array e facendo il calcolo bit per bit)
Naouak,

2

QBasic, 144 141 byte

Non particolarmente piccolo, ma batte C ++ e 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

Nessuna dichiarazione, utilizzata :laddove possibile perché costa 1 byte in meno di CRLF. Prefisso uno 0 sul contatore del loop: Basic trabocca sul 47 ° carattere di Fibonacci, quindi compensato per il byte extra che dovrebbe essere lì.

EDIT: Neil mi ha salvato 3 byte: 141 byte.


Puoi rimuovere il primo a$+poiché è noto per essere la stringa vuota a questo punto.
Neil,

2

Wolfram Language, 84 byte

Tipo di barare, ovviamente, a causa del built-in Fibonacci.

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

Esempio di comando per eseguire lo script

/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

Richiede la seguente opzione della riga di comando:, -lMbigintconteggiato come 8.


Esempio di utilizzo

$ perl -lMbigint fibo-nacci.pl

Perl, 79 byte

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

Come sopra, senza richiedere alcuna opzione da riga di comando.


2

GolfScript, 47 byte

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

Spiegazione

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

Salvato tre byte per gentile concessione di 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)))

Esempio di utilizzo

$ gp -qf < fibo-nacci.gp

1
È più breve di non usare il built-in; Ne ho 73 confor(i=b=!a=1,99,b=a+a=b; ...
Mitch Schwartz il

1
@MitchSchwartz si chiamava in precedenza 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"^

Ho spudoratamente rubato in prestito un programma FizzBuzz esistente e l'ho modificato per funzionare con la sequenza Fibo Nacci. Emette numeri per sempre. Ora è fisso, ovvero produce solo 100 numeri. Provalo qui .


2
Devi solo produrre i primi 100 numeri di Fibo Nacci, né più né meno.
Kritixi Lithos,

@ ΚριτικσιΛίθος Sono finalmente riuscito a produrre solo 100 numeri.
DanTheMan,

Questo genera 101 numeri su TIO ma non funziona sul sito collegato
Jo King,

1

Pyth, 51 byte

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

Genera la sequenza di Fibonacci, quindi decide cosa stampare.

                    [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

Per provare, prova questo (fanno solo i primi 20 numeri)

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

Quanto tempo ci vuole per eseguire il programma attuale?
Kritixi Lithos,

Non ne ho idea, nei 30 secondi non ci sono voluti per capire che elaborare così grandi prime realizzazioni probabilmente avrebbe rallentato molto.
Blu,

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

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

Alcuni trucchi utilizzati:

  • Quel piccolo grazioso defche dà la stessa sequenza di Fibonacci viene rubato spudoratamente da Konrad Garus .
  • strpuò prendere simboli come input. Pazzo vero?
  • Mappe e valori predefiniti sono il modo più breve per scrivere ifin alcuni casi.

Che cosa è lazy-cat?
Kritixi Lithos,

@ ΚριτικσιΛίθος Concatena pigramente più sequenze. In questo caso, concatena i primi due elementi della sequenza di Fibonacci ( [1 1]) con il risultato della somma di ciascun elemento nella sequenza di Fibonacci con l'elemento che la segue.
Sam Estep,

Ho ragione nell'indovinare che questa è fondamentalmente la versione Clojure di fibs = 0 : 1 : zipWith (+) fibs (tail fibs)?
Soham Chowdhury,

@SohamChowdhury Sì, per quanto ne so.
Sam Estep,

1

CJam, 44 byte

XX{_2$+}98*]{_B4bf%:!"Fibo Nacci"S/.*s\e|N}/

Provalo online nell'interprete CJam .



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

Usa alertinvece di console.log; si rade alcuni 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

Questo è un file FSX (script F #)


Sono sorpreso che
funzioni

1

PHP, 75 byte

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

Sorprendentemente competitivo. Richiede PHP v5.5 o versione successiva. Presumo le impostazioni predefinite, in quanto sono senza un .ini (è possibile disabilitare il proprio .ini locale con l' -nopzione).


Esempio di utilizzo

$ php -n fibo-nacci.php

WIth -n bcaddnon funziona anche quando bcmathè installato. Senza -n molta roba viene emesso su stderr.
Sylwester,

Funziona sulla mia scatola (e).
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).

Provalo online qui
Per eseguire il programma, usa la query:

p.
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.