Fibonacci + Fizz Buzz = Fibo Nacci!

74

Fibonacci + FizzBuzz = Fibo Nacci!


Seu desafio é criar um programa Fibo Nacci!

  • Um programa Fibo Nacci gera os 100 primeiros números de Fibonacci (começando em 1).
  • Se o número de Fibonacci é divisível por 2 e 3 (ou seja, é divisível por 6), emita o FiboNacci em vez do número.
  • Caso contrário, se o número de Fibonacci for divisível por 2, emita o Fibo em vez do número.
  • Caso contrário, se o número de Fibonacci for divisível por 3, emita Nacci em vez do número.

Regras

  • O programa não deve receber entrada.
  • O programa deve gerar uma nova linha ( \n) após cada entrada.
  • O programa não deve imprimir nada no STDERR.
  • O programa deve gerar as primeiras 100 entradas Fibo Nacci (iniciando em 1).
  • As brechas padrão não são permitidas (por padrão).
  • Este é o pelo que o código mais curto em bytes vence!

Aqui está a saída esperada:

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

O Catálogo

O Snippet de Snack Stack na parte inferior desta postagem gera o catálogo a partir das respostas a) como uma lista da solução mais curta por idioma eb) como uma tabela geral de líderes.

Para garantir que sua resposta seja exibida, inicie-a com um título, usando o seguinte modelo de remarcação:

## Language Name, N bytes

onde Nestá o tamanho do seu envio. Se você melhorar sua pontuação, poderá manter as pontuações antigas no título, identificando-as. Por exemplo:

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

Se você quiser incluir vários números em seu cabeçalho (por exemplo, porque sua pontuação é a soma de dois arquivos ou deseja listar as penalidades de sinalizador de intérprete separadamente), verifique se a pontuação real é o último número no cabeçalho:

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

Você também pode transformar o nome do idioma em um link que será exibido no snippet:

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

Kritixi Lithos
fonte
6
E os idiomas com o tipo inteiro mais alto, de apenas 64 bits? :( Não é suficiente 90 números de fib.?
Zereges
3
@ Zereges Nesse assunto, me desculpe. :(
Kritixi Lithos
28
Talvez ele deve ser chamado "Fizzo Nacci"
LegionMammal978
4
@SztupY Como a saída nesta pergunta é completamente invariável, você nem precisa de números inteiros. Apenas trate essa pergunta como uma questão de complexidade de kolmogorov (eu até adicionei a tag) e prossiga a partir daí.
Chris Jester-Young
3
@ ChrisJester-Young ainda é uma limitação desnecessária, que pode fazer com que os implementadores criativos evitem essa tarefa. E a maioria das soluções (incluindo o segundo mais upvoted) já estão quebrando
SztupY

Respostas:

18

Pitão, 37 bytes

Eu percorro os números de Fibonacci em vez de gerá-los antecipadamente, já que é muito curto.

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

Experimente online.

PurkkaKoodari
fonte
Parabéns por vencer este desafio! Eu gostei que esta solução fosse rápida.
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

Não muito diferente do FizzBuzz padrão, na verdade.

Sp3000
fonte
1
Isso é incrível.
J Atkins
Preciso me lembrar dessa construção em loop para o meu próximo golfe Ruby. Isso é incrível.
clap
21

Metaprogramação em C ++ 11, 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;}

Porque porque não? Ele é compilado com warning C4307: '+': integral constant overflow, é executado bem, mas 93+ dos números de Fibonacci não são mostrados corretamente (devido ao estouro), portanto, essa é uma entrada inválida (mas não consegui vencê-la com tantos bytes)

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;
}
Zereges
fonte
Você pode usar seqüências de caracteres explodidas ( template <char H, char ...T>) em seus modelos para (teoricamente) manipular valores de comprimento arbitrário. Em seguida, ele seria apenas uma questão de examinar os últimos 2 caracteres em cada corda para determinar a divisibilidade por 2 e / ou 3.
Mego
@Ego eu não te entendo. Como isso me ajudaria a lidar com valores, que não cabem em 64 bits. Além disso, você precisa todos os dígitos para descobrir se o número é divisível por 3.
Zereges
As strings podem ser arbitrariamente longas (até você ficar sem memória). E você está certo, eu errei meu comentário. Ainda assim, você pode calcular a soma digital para determinar a divisibilidade em 3.
Mego
Implementar a adição dessas strings exigiria muito mais esforço.
Zereges
1
Você poderia usar o dialeto gnu e usar __uint128_t, talvez.
14

C #, 175 171 152 145 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");}}

Descomprimido:

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");
    }
}
olegz
fonte
Mesmo compactando a saída com um DeflateStream, o menor que eu consegui foi de 191 caracteres, portanto, isso provavelmente está muito próximo da melhor resposta c # possível. É uma pena que BigInteger seja necessário.
precisa
"using System;" dará outro -1 em tamanho.
olegz
1
Eu ainda tinha que prefixar System.Numerics com System apesar do uso: -S, então não tenho certeza se o uso funcionará.
precisa
1
Você pode salvar 3 caracteres substituindo os ==0por >0e invertendo os ternários: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
Você pode economizar mais 7 personagens, alterando decimal a=1,b=1a dynamic a=1m,b=ae, em seguida, você pode perder o (object):)
Timwi
13

Oracle SQL, 212 bytes

Não é uma língua de golfe, mas eu tive que tentar ...

Concatenando todas as linhas com \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 com uma entrada da sequência por linha (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
MT0
fonte
2
Impressionante, apenas para usar o SQL #
Wayne Werner
Basta usar o último, pois é o "equivalente" à saída "por linha". E é realmente um bom pedaço de código. Bem feito!
Ismael Miguel
@IsmaelMiguel Se for executado no SQL * Plus (ou outra interface de linha de comando), haverá uma nova linha de saída após cada linha (como parte de como ele relata a saída da consulta). No entanto, isso é uma função da CLI e não da linguagem SQL - para estar em conformidade com a regra The program should output a new line (\n) after every entry, deixarei como o código mais longo, mas o mais curto poderá ser compatível (sem depender de uma CLI) adicionando ||CHR(13)antes da final FROMpara 171 caracteres.
MT0 11/11
Você não poderia usar "\n"? Parece funcionar no MySQL. (Correndo select length("\n")retorna 1, e em execução select "\n"não retorna n, como acontece com select "\p"os retornos pdevido a ser uma fuga inválido)
Ismael Miguel
SELECT LENGTH('\n') FROM DUALsaídas 2no Oracle, pois '\n'não é convertido em CHR(13).
MT0 11/11/2015
11

ShapeScript , 83 bytes

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

Experimente online!

Dennis
fonte
15
Literalmente, parece que meu gato pulou em cima do meu teclado enquanto eu tentava ativar as teclas de aderência. Bom trabalho.
fase
2
@phase figurativamente. Ou isso, ou você não está olhando muito de perto. Ou você tem um gato pequeno ou um teclado gigante. Como esse gato conseguiu digitar Fibo e Nacci, evita todas as teclas de letras, exceto um r.
John Dvorak
3
@JanDvorak Acho fase tem configuração macros para isso;)
Wayne Werner
2
@ fase 1. Por que seu gato está no seu quarto ?; 2. por que você deseja ativar as teclas adesivas? 3? Por que você não tem uma caixa de armadilha para gatos em sua mesa para evitar que seu gato pule no teclado?
Nzall 11/11
7

Java, 407 398 351 308 bytes

Jogou golfe com a ajuda de @Geobits e @SamYonnou

Espalhe a palavra: 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);}}}

Versão não destruída:

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);
    }
  }
}
Meia
fonte
1
Isso pode ser jogado mais. Importe em java.math.*vez da coisa toda. Use as constantes para ONEe em ZEROvez de newBigIntegers. Remova o publicda classe. Empacote tudo, exceto a printlndeclaração no forcorpo dentro da declaração do loop, etc. Eu recomendo examinar as dicas de golfe em Java em geral.
Geobits
@Geobits Done! Era uma pena que eu não conhecesse BigIntegere suas várias técnicas de golfe.
Sock
Armazenando BigInteger.ZERO, usando flipBit (...) como uma alternativa ao novo BigInteger (...), e algumas outras coisas pequenas que você pode obtê-lo para baixo para 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
Parece que BigIntegersempre retorna BigInteger.ZEROquando alguma operação é add(...)avaliada como zero, para que você possa usar em ==vez de .equals(z), também pode acabar com o armazenamento s=t.flipBit‌​(2)(6) e, em vez disso, 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);}}}executar algumas tarefas internas inteligentes como estas : essas alterações o reduzem para 280
SamYonnou
2
Eu acho que você quer dizerVerbose.isEqualTo(Java)
Cyoce
7

Mathematica, 80 bytes

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

Adaptação da minha solução FizzBuzz mais antiga.

LegionMammal978
fonte
1
@JacobAkkerboom Desculpe, corrigido. Além disso, para versões inferiores a 10.3, substitua Echopor Print.
precisa
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
}
MegaTom
fonte
Eu trabalhei nisso por mais tempo do que gostaria de administrar e não consigo encontrar nenhuma maneira de melhorá-lo. f,n=%w[Fibo Nacci], f,n='Fibbo','Nacci'e f='Fibbo';n='Nacci'todos têm a mesma contagem de caracteres. +1
Shelvacu 10/11/2015
1
Você pode salvar três bytes usando [b,f='Fibo',n='Nacci',f,b,f+n][~b%6]e mais dois removendo os parênteses a=b+b=a.
primo
Obrigado @primo. Esse é um truque interessante com o ~operador. Nunca vi isso antes. E agora eu sei porque índices negativos fazem parte do rubi :)
MegaTom
Realmente precisa em puts [vez de puts[?
Erik the Outgolfer
1
Rosas são vermelhas, violetas são azuis, para Haskell e Ruby, não faço ideia.
Erik the 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^

Experimente online!

hakr14
fonte
6
Bem vindo ao site! :)
DJMcMayhem
Você provavelmente poderia combinar as duas 3%seções
Jo King
@JoKing Você acha que sim, mas eles realmente levam a resultados diferentes se n% 3! = 0. Eu tenho certeza que é uma maneira de combiná-los, mas isso significaria reestruturação de todo o programa, e eu imagino que seria realmente mais tempo.
hakr14
4

Pyth, 39

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

Muito semelhante à solução fizzbuzz padrão, apenas com um gerador para os números de Fibonacci.

Experimente aqui

FryAmTheEggman
fonte
4

C #, 498 392 320 bytes

Eu realmente queria fazer isso com o linq, pena que tive que escrever minha própria função de soma para o BigInteger que realmente a matou :-(

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: Até 320 bytes, graças a LegionMammal978 pela sugestão agregada e graças à resposta C # da olegz para a abreviação x% 6 para X% 2 && x% 3, bem como o uso de operadores ternários em uma única instrução WriteLine.

Jakotheshadows
fonte
4
Você já ouviu falar da Aggregatefunção LINQ?
LegionMammal978
Substitua "soma" por "t" para barbear 6 bytes.
Xantix
3

Python 2, 171 121 bytes

"Abordagem de força 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]
Hannes Karppila
fonte
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)
Nina Scholz
fonte
1
Você pode salvar quatro bytes mudando a=[b,b=a+b][0]para b=a+b,a=b-a. Além disso, em uma nota completamente alheios, eu gosto da maneira como você responder como muito rápido no Stack Overflow hehe Tenha um bom dia
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])

Para os números grandes, adiciona um Lao final, mostrando que é um número longo.

Se isso for um problema, aqui está uma solução de 104 bytes

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])
Azul
fonte
Você pode reduzir o forloop usando esta dica: codegolf.stackexchange.com/a/5047/42736 . Em particular, a execdica parece boa.
precisa
+1 para o exec <program_string>*ntruque. Agradável!
agtoever
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))

Função recursiva que calcula fibonnacci, coloca-a em uma matriz, emite saída Fibo, Nacci ou o número e chama-se para calcular a seguir até 100.

Ele quebra em 73 por causa da precisão do número javascript. A única maneira de contornar isso seria adicionar meu próprio cálculo de bits.

Naouak
fonte
Isso não funciona, ocorre um erro depois de 5527939700884757 + 8944394323791464 = 14472334024676220quando deveria ser, 14472334024676221porque o JavaScript usa flutuadores de precisão de 16 bits e isso requer 17 bits de precisão. Você também deve imprimir 1duas vezes.
George Reith
Adicionada a impressão 1 duas vezes. Para a precisão, eu preciso mudar everythin sobre o código para fazê-lo funcionar (sem uso de número, mas Uint32Array e fazer pedaços de computação por bits)
Naouak
2

QBasic, 144 141 bytes

Não é particularmente pequeno, mas supera 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

Nenhuma declaração, usada :sempre que possível, porque é 1 byte mais barato que CRLF. Prefixo um 0 ao contador de loop: o Basic transbordará no 47º caractere de Fibonacci, portanto compensado pelo byte extra que deveria estar lá.

EDIT: Neil me salvou 3 bytes: 141 bytes.

steenbergh
fonte
Você pode remover o primeiro, a$+já que é conhecido como a sequência vazia neste momento.
Neil
2

Wolfram Language, 84 bytes

Tipo de trapaça, é claro, por causa do embutido Fibonacci.

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

Exemplo de comando para executar o script

/Applications/Mathematica.app/Contents/MacOS/WolframKernel -script ~/Desktop/fibo.wl
Jacob Akkerboom
fonte
2

Perl, 74 bytes

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

Requer a seguinte opção de linha de comando:, -lMbigintcontada como 8.


Uso da amostra

$ perl -lMbigint fibo-nacci.pl

Perl, 79 bytes

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

O mesmo que acima, sem exigir nenhuma opção de linha de comando.

primo
fonte
2

GolfScript, 47 bytes

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

Explicação

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
primo
fonte
2

PARI / GP, 76 73 bytes

Salvo três bytes, cortesia 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)))

Uso da amostra

$ gp -qf < fibo-nacci.gp
primo
fonte
1
É mais curto para não usar embutido; Eu tenho 73 comfor(i=b=!a=1,99,b=a+a=b; ...
Mitch Schwartz
1
@MitchSchwartz costumava ser chamado 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"^

Eu descaradamente roubei emprestado um programa existente do FizzBuzz e modifiquei-o para funcionar na sequência Fibo Nacci. Emite números para sempre. Agora está fixo, ou seja, gera apenas 100 números. Experimente aqui .

DanTheMan
fonte
2
Você só deve produzir os 100 primeiros números Fibo Nacci, nem mais nem menos.
Kritixi Lithos
@ ΚριτικσιΛίθος Eu finalmente consegui produzir apenas 100 números.
18715 DanTheMan
Isso gera 101 números no TIO, mas não funciona no site vinculado
Jo King
1

Pitão, 51 bytes

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

Gera a sequência de Fibonacci e decide o que imprimir.

                    [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

Para testar, tente isso (apenas os 20 primeiros números)

V.Wn20lHaZ+@Z_1@Z_2[1 1)|+*"Fibo"}2JPN*"Nacci"}3JN
Azul
fonte
Quanto tempo leva para executar o programa real?
Kritixi Lithos
Não faço ideia, nos 30 segundos necessários para descobrir que elaborar grandes fatorações primárias provavelmente atrasaria bastante.
Azul
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)))))

Alguns truques usados:

  • O pouco defque dá a sequência de Fibonacci é roubado descaradamente de Konrad Garus .
  • strpode receber símbolos como entrada. Louco, né?
  • Mapas e valores padrão são a maneira mais curta de escrever ifem alguns casos.
Sam Estep
fonte
O que é lazy-cat?
Kritixi Lithos
@ ΚριτικσιΛίθος Concatena preguiçosamente várias seqüências. Nesse caso, concatena os dois primeiros elementos da sequência de Fibonacci ( [1 1]) com o resultado da soma de cada elemento na sequência de Fibonacci com o elemento a seguir.
Sam Estep
Estou certo em supor que essa seja basicamente a versão do Clojure fibs = 0 : 1 : zipWith (+) fibs (tail fibs)?
Soham Chowdhury
@SohamChowdhury Sim, até onde eu sei.
Sam Estep
1

CJam, 44 bytes

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

Experimente online no intérprete CJam .

Dennis
fonte
1

dc, 100 89 79 bytes

[sG[]]sx[dn]s01df[sbdlb+lbrdd2%d[Fibo]r0!=xnr3%d[Nacci]r0!=xn*0!=0APzZ3>o]dsox

Inspirado em http://c2.com/cgi/wiki?DeeCee

user47197
fonte
Bem-vindo à programação de quebra-cabeças e código de golfe!
Dennis
1

Javascript (ES2015), 99 bytes

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));
}
Sebastian Sandqvist
fonte
Use em alertvez de console.log; remove alguns bytes.
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

Este é um arquivo FSX (script F #)

olegz
fonte
Estou surpreso que isso funciona
asibahi
1

PHP, 75 bytes

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

Surpreendentemente competitivo. Requer PHP v5.5 ou superior. Eu assumo as configurações padrão, pois elas estão sem um .ini (você pode desativar o .ini local com a -nopção).


Uso da amostra

$ php -n fibo-nacci.php
primo
fonte
COM -n bcaddnão funciona mesmo quando bcmathestá instalado. Sem -n muitas coisas, é emitido no stderr.
21418 Sylwester
Funciona em minhas caixas.
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).

Experimente online aqui.
Para executar o programa, use a consulta:

p.
Emigna
fonte