Fibonacci + Fizz Buzz = Fibo Nacci!


74

Fibonacci + FizzBuzz = Fibo Nacci!


¡Su desafío es crear un programa Fibo Nacci!

  • Un programa Fibo Nacci genera los primeros 100 números de Fibonacci (a partir de 1).
  • Si el número de Fibonacci es divisible por 2 y 3 (es decir, es divisible por 6), entonces genera FiboNacci en lugar del número.
  • De lo contrario, si el número de Fibonacci es divisible por 2, entonces genera Fibo en lugar del número.
  • De lo contrario, si el número de Fibonacci es divisible por 3, entonces genera Nacci en lugar del número.

Reglas

  • El programa no debe tomar ninguna entrada.
  • El programa debería generar una nueva línea ( \n) después de cada entrada.
  • El programa no debe imprimir nada en STDERR.
  • El programa debe generar las primeras 100 entradas de Fibo Nacci (a partir de 1).
  • Las lagunas estándar no están permitidas (por defecto).
  • Este es el código más corto en bytes gana!

Aquí está el resultado esperado:

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

El catálogo

El fragmento Snack Stack en la parte inferior de esta publicación genera el catálogo a partir de las respuestas a) como una lista de la solución más corta por idioma yb) como una tabla de clasificación general.

Para asegurarse de que su respuesta se muestre, comience con un título, usando la siguiente plantilla de Markdown:

## Language Name, N bytes

¿Dónde Nestá el tamaño de su envío? Si mejora su puntaje, puede mantener los puntajes antiguos en el título, tachándolos. Por ejemplo:

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

Si desea incluir varios números en su encabezado (por ejemplo, porque su puntaje es la suma de dos archivos o desea enumerar las penalizaciones de la bandera del intérprete por separado), asegúrese de que el puntaje real sea el último número en el encabezado:

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

También puede hacer que el nombre del idioma sea un enlace que luego aparecerá en el fragmento:

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


66
¿Qué pasa con los idiomas con el tipo entero más alto de solo 64 bits? :( ¿No son suficientes 90 números fib.?
Zereges

3
@ Zereges En ese asunto, lo siento. :(
Kritixi Lithos

28
Tal vez debería llamarse "Fizzo Nacci"
LegionMammal978

44
@SztupY Debido a que el resultado en esta pregunta es completamente invariable, ni siquiera necesita números enteros. Simplemente trate esta pregunta como una pregunta de complejidad kolmogorov (incluso agregué la etiqueta) y continúe desde allí.
Chris Jester-Young

3
@ ChrisJester-Young sigue siendo una limitación innecesaria, que podría hacer que los implementadores creativos se alejen de esta tarea. Y la mayoría de las soluciones (incluida la segunda más votada) ya se están rompiendo
SztupY

Respuestas:


18

Pyth, 37 bytes

Recorro los números de Fibonacci en lugar de generarlos de antemano, ya que es muy corto de hacer.

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

Pruébalo en línea.


¡Felicitaciones por ganar este desafío! Me gustó que esta solución fuera 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

No muy diferente del FizzBuzz estándar, realmente.


1
Esto es increíble.
J Atkin

Necesito recordar esta construcción en bucle para mi próximo golf Ruby. Esto es increíble.
aplauso

21

C ++ 11 metaprogramación, 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 no. Se compila con warning C4307: '+': integral constant overflow, funciona bien, pero los números 93+ de Fibonacci no se muestran correctamente (debido al desbordamiento), por lo que esta entrada no es válida (pero no pude ganarla con esa cantidad de bytes)

Sin golf

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

Podría usar cadenas explotadas ( template <char H, char ...T>) en sus plantillas para (teóricamente) manejar valores de longitud arbitraria. Entonces solo sería cuestión de examinar los últimos 2 caracteres en cada cadena para determinar la divisibilidad entre 2 y / o 3.
Mego

@Mego, no te entiendo. Cómo me ayudaría a manejar valores, que no caben en 64 bits. Además, necesita todos los dígitos para averiguar si el número es divisible por 3.
Zereges

Las cadenas pueden ser arbitrariamente largas (hasta que se quede sin memoria). Y tienes razón, estropeé mi comentario. Aún así, podría calcular la suma digital para determinar la divisibilidad entre 3.
Mego

@Mego Implementar la adición de esas cadenas requeriría mucho más esfuerzo.
Zereges

1
Podrías usar el dialecto gnu y usar __uint128_t, tal vez.

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

Sin comprimir:

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

Incluso al comprimir la salida con un DeflateStream, lo más bajo que pude obtener fue 191 caracteres, por lo que es muy probable que sea la mejor respuesta de C #. Es una pena que BigInteger sea requerido.
Jodrell

"usando el sistema"; dará otro -1 de tamaño.
olegz

1
Todavía tenía que prefijar System.Numerics con System a pesar del uso: -S, por lo que no estoy seguro de que el uso funcione.
Jodrell

1
Puede guardar 3 caracteres reemplazando los ==0s con >0e invirtiendo los terrarios: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
Puede guardar otros 7 caracteres cambiando decimal a=1,b=1a dynamic a=1m,b=ay luego se puede perder el (object):)
Timwi

13

Oracle SQL, 212 bytes

No es un lenguaje de golf, pero tuve que intentarlo ...

Concatenando todas las filas 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 entrada de la secuencia por fila (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
Impresionante, solo por usar SQL
Wayne Werner

Simplemente use el último, ya que es el "equivalente" a la salida "por línea". Y realmente es un buen código. ¡Bien hecho!
Ismael Miguel

@IsmaelMiguel Si se ejecuta en SQL * Plus (u otra interfaz de línea de comando), habrá una salida de nueva línea después de cada fila (como parte de cómo informa la salida de la consulta). Sin embargo, esa es una función de la CLI y no del lenguaje SQL: para cumplir con la regla, The program should output a new line (\n) after every entrylo dejaré como el código más largo, pero el más corto podría hacerse compatible (sin depender de una CLI) agregando ||CHR(13)antes de la final FROMpara 171 personajes.
MT0

¿No podrías usar "\n"? Parece funcionar en MySQL. (La ejecución select length("\n")devuelve 1 y la ejecución select "\n"no regresa n, como ocurre con las select "\p"devoluciones pdebido a un escape no válido)
Ismael Miguel

SELECT LENGTH('\n') FROM DUALsalidas 2en Oracle como '\n'no se convierte a CHR(13).
MT0

11

ShapeScript , 83 bytes

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

Pruébalo en línea!


15
Literalmente parece que mi gato saltó sobre mi teclado mientras trataba de encender las teclas adhesivas. Buen trabajo.
fase

2
@fase figurativamente. O eso o no estás mirando de cerca. O tienes un gato pequeño o un teclado gigante. Debido a que este gato logró escribir Fibo y Nacci, pero evitó todas las teclas de letras, excepto por una r.
John Dvorak

3
@ JanDvorak Creo que la fase tiene macros configuradas para eso;)
Wayne Werner

2
@phase 1. ¿Por qué está tu gato en tu habitación ?; 2. ¿por qué quieres activar las teclas adhesivas? 3? ¿Por qué no tienes una caja de trampa para gatos en tu escritorio para evitar que tu gato salte sobre tu teclado?
Nzall

7

Java, 407 398 351 308 bytes

Lo jugué con la ayuda de @Geobits y @SamYonnou

Difundir la palabra: 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);}}}

Versión sin golf:

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
Esto se puede jugar más al golf. Importar en java.math.*lugar de todo. Use las constantes para ONEy en ZEROlugar de newBigIntegers. Eliminar el publicde la clase. Empaque todo, excepto la printlndeclaración en el forcuerpo dentro de la declaración del bucle, etc. Recomiendo revisar los consejos de golf de Java en general.
Geobits

@Geobits hecho! Fue una pena que no estuviera familiarizado BigIntegery sus diversas técnicas de golf.
Calcetín

Al almacenar BigInteger.ZERO, usando flipBit (...) como alternativa al nuevo BigInteger (...), y algunas otras cosas menores, puede 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);}}}
reducirlo

Parece que BigIntegersiempre regresa BigInteger.ZEROcuando alguna operación como add(...)evalúa a cero para que pueda usar en ==lugar de .equals(z), también puede eliminar el almacenamiento s=t.flipBit‌​(2)(6) y en su lugar hacer una asignación interna inteligente como esta: 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);}}}estos cambios lo reducen a 280
SamYonnou

2
Creo que te refieresVerbose.isEqualTo(Java)
Cyoce

7

Mathematica, 80 bytes

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

Adaptación de mi antigua solución FizzBuzz.


1
@JacobAkkerboom Lo siento, arreglado. Además, para versiones inferiores a 10.3, reemplace Echocon 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}

sin golf:

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
}

He trabajado en esto durante más tiempo del que me gustaría administrar y no puedo encontrar ninguna manera de mejorarlo. f,n=%w[Fibo Nacci], f,n='Fibbo','Nacci'y f='Fibbo';n='Nacci'todos tienen el mismo número de caracteres. +1
Shelvacu

1
Puede guardar tres bytes usando [b,f='Fibo',n='Nacci',f,b,f+n][~b%6]y dos más quitando los paréntesis a=b+b=a.
primo

Gracias @primo. Ese es un buen truco con el ~operador. Nunca lo había visto antes. Y ahora sé por qué los índices negativos son parte de ruby ​​:)
MegaTom

Realmente necesita en puts [lugar de puts[?
Erik the Outgolfer

1
Las rosas son rojas, las violetas son azules, para Haskell y Ruby, no tengo idea.
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^

Pruébalo en línea!


66
Bienvenido al sitio! :)
DJMcMayhem

Probablemente podría combinar ambas 3%secciones
Jo King,

@JoKing Pensarías que sí, pero en realidad conducen a resultados diferentes si n% 3! = 0. Estoy seguro de que es una manera de combinarlos, pero significaría la reestructuración de todo el programa, y me imagino que en realidad sería más largo.
hakr14

4

Pyth, 39

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

Muy similar a la solución estándar de fizzbuzz, solo con un generador para los números de Fibonacci.

Pruébalo aquí


4

C #, 498 392 320 bytes

Solo quería hacer esto con linq, lástima que tuve que escribir mi propia función de suma para BigInteger que realmente lo mató :-(

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

Sin golf:

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

Editar: hasta 320 bytes gracias a LegionMammal978 por la sugerencia agregada y gracias a la respuesta de C # de olegz para la taquigrafía x% 6 para X% 2 && x% 3, así como el uso de operadores ternarios en una sola declaración WriteLine.


44
¿Has oído hablar de la Aggregatefunción LINQ?
LegionMammal978

Reemplace "sum" con "t" para reducir 6 bytes.
Xantix

3

Python 2, 171 121 bytes

"Enfoque de fuerza 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 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
Puede guardar cuatro bytes cambiando a=[b,b=a+b][0]a b=a+b,a=b-a. Además, en una nota completamente no relacionada, me gusta la forma en que respondes como realmente rápido en Stack Overflow jeje Que tengas un buen día
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 los números grandes, agrega un Lal final que muestra que es un número largo.

Si eso es un problema, aquí hay una solución 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])

Puede acortar el forciclo con este consejo: codegolf.stackexchange.com/a/5047/42736 . En particular, la execpunta se ve bien.
J Atkin

+1 por el exec <program_string>*ntruco. ¡Agradable!
2015

2

Javascript (ES6), 137134 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))

Función recursiva que calcula fibonnacci, la coloca en una matriz y luego genera Fibo, Nacci o el número y se llama a sí mismo para calcular el siguiente hasta 100.

Se rompe en 73 debido a la precisión del número de JavaScript. La única forma de evitarlo sería agregar mi propio cálculo de bits.


Esto no funciona, sale mal después de 5527939700884757 + 8944394323791464 = 14472334024676220lo que debería ser 14472334024676221porque JavaScript usa flotadores de precisión de 16 bits y eso requiere 17 bits de precisión. También debe imprimir 1dos veces.
George Reith

Se agregó la impresión 1 dos veces. Para la precisión, necesito cambiar todo en el código para que funcione (no usando Number sino Uint32Array y haciendo cómputo bit por bit)
Naouak

2

QBasic, 144 141 bytes

No es particularmente pequeño, pero supera a C ++ y 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

No hay declaraciones, se usa :siempre que sea posible porque es 1 byte más barato queCRLF . Prefijado un 0 al contador de bucle: Basic se desbordará en el 47. ° carácter de Fibonacci, por lo que compensó el byte adicional que debería estar allí.

EDITAR: Neil me ahorró 3 bytes: 141 bytes.


Puede eliminar el primero a$+ya que se sabe que es la cadena vacía en este punto.
Neil

2

Wolfram Language, 84 bytes

Tipo de trampa, por supuesto, debido a la construcción Fibonacci.

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

Ejemplo de comando para ejecutar el script

/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

Requiere la siguiente opción de línea de comando:, -lMbigintcontada como 8.


Uso de muestra

$ perl -lMbigint fibo-nacci.pl

Perl, 79 bytes

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

Igual que el anterior, sin requerir ninguna opción de línea de comando.


2

GolfScript, 47 bytes

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

Explicación

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

Guardado tres bytes por cortesía 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 de muestra

$ gp -qf < fibo-nacci.gp

1
Es más corto no usar incorporado; Tengo 73 confor(i=b=!a=1,99,b=a+a=b; ...
Mitch Schwartz

1
@MitchSchwartz solía llamarse 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"^

Yo descaradamente robado prestado un programa FizzBuzz programa existente y lo modificó para trabajar por la secuencia de Fibonacci Nacci. Produce números para siempre. Ahora es fijo, es decir, solo genera 100 números. Probarlo aquí .


2
Solo debe generar los primeros 100 números de Fibo Nacci, ni más ni menos.
Kritixi Lithos

@ ΚριτικσιΛίθος Finalmente pude lograr que solo produjera 100 números.
DanTheMan

Esto genera 101 números en TIO pero no funciona en el sitio vinculado
Jo King

1

Pyth, 51 bytes

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

Genera la secuencia de Fibonacci y luego decide qué 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 probar, intente esto (solo los primeros 20 números)

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

¿Cuánto tiempo lleva ejecutar el programa real?
Kritixi Lithos

No tengo idea, no fue así en los 30 segundos que tardó en funcionar, que trabajar con factorizaciones primas tan grandes probablemente lo ralentizaría mucho.
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)))))

Sin golf:

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

Algunos trucos utilizados:

  • Ese pequeño detalle defque le da a la secuencia de Fibonacci en sí es robado descaradamente de Konrad Garus .
  • strpuede tomar símbolos como entrada. Loco, ¿verdad?
  • Los mapas y los valores predeterminados son la forma más corta de escribir ifen algunos casos.

¿Qué es lazy-cat?
Kritixi Lithos

@ ΚριτικσιΛίθος Concatena perezosamente múltiples secuencias. En este caso, concatena los dos primeros elementos de la secuencia de Fibonacci ( [1 1]) con el resultado de sumar cada elemento en la secuencia de Fibonacci con el elemento que le sigue.
Sam Estep

¿Tengo razón al adivinar que esta es básicamente la versión de Clojure fibs = 0 : 1 : zipWith (+) fibs (tail fibs)?
Soham Chowdhury

@SohamChowdhury Sí, por lo que puedo decir.
Sam Estep



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

Sin golf:

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

Usar en alertlugar de console.log; Afeita algunos 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 es un archivo FSX (secuencia de comandos F #)


Estoy sorprendido de que esto funcione
asibahi

1

PHP, 75 bytes

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

Sorprendentemente competitivo. Requiere PHP v5.5 o superior. Asumo la configuración predeterminada, ya que no tienen un .ini (puede deshabilitar su .ini local con la -nopción).


Uso de muestra

$ php -n fibo-nacci.php

Con -n bcaddno funciona incluso cuando bcmathestá instalado. Sin -n muchas cosas se emite en stderr.
Sylwester

Funciona en mi (s) caja (s).
primo

1

Prólogo, 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).

Pruébelo en línea aquí
Para ejecutar el programa, use la consulta:

p.
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.