Fibonacci + Fizz Buzz = Fibo Nacci!


74

Fibonacci + FizzBuzz = Fibo Nacci!


Buradaki zorluk, bir Fibo Nacci programı oluşturmak!

  • Bir Fibo Nacci programı ilk 100 Fibonacci sayısını (1'den başlayarak) verir.
  • Fibonacci sayı 2, her iki ile bölünebilir ise ve 3 (yani, 6 ile bölünebilen), daha sonra çıkış FIBONACCI yerine sayısı.
  • Aksi takdirde, Fibonacci numarası 2 ile bölünebilir ise, sayı yerine Fibo değerini girin.
  • Aksi takdirde, Fibonacci sayısı 3 ile bölünebilirse, sayı yerine Nacci değerini girin.

kurallar

  • Program giriş yapmamalıdır.
  • Program \nher girişten sonra yeni bir satır ( ) vermelidir .
  • Program gerektiğini değil standart hataya bir şey yazdırın.
  • Program şart çıkışı ilk 100 Fibo Nacci girişleri (1 olmak üzere).
  • Standart boşluklara izin verilmez (varsayılan olarak).
  • Bu yani bayt cinsinden en kısa kod kazanır!

Beklenen çıktı şöyle:

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

Katalog

Bu yazının altındaki Snack Stack Snippet, cevapları a) dil başına en kısa çözümün bir listesi olarak ve b) genel bir lider tablosu olarak oluşturur.

Cevabınızın göründüğünden emin olmak için, lütfen aşağıdaki Markdown şablonunu kullanarak cevabınızı bir başlık ile başlatın:

## Language Name, N bytes

nerede NGönderinizden boyutudur. Puanınızı artırmak varsa, olabilir onları içinden vurarak, başlığa eski hesapları tutmak. Örneğin:

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

Başlığınıza birden fazla sayı eklemek istiyorsanız (örneğin, puanınız iki dosyanın toplamı olduğundan veya tercüman bayrağı cezalarını ayrı ayrı listelemek istediğiniz için), gerçek puanın başlıktaki son sayı olduğundan emin olun :

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

Dil adını, daha sonra pasajda görünecek bir bağlantı da yapabilirsiniz:

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


6
64 bitlik tamsayı tipinde en yüksek dillere ne dersiniz? :( 90 fib. Sayıları yeterli değil mi?
Zereges

3
@Zereges Bu konuda özür dilerim. :(
Kritixi Lithos

28
Belki de "Fizzo Nacci" olarak adlandırılmalıdır
LegionMammal978

4
@SztupY Bu sorudaki çıktı tamamen değişmez olduğu için tamsayıya bile ihtiyacınız yok. Sadece bu soruyu bir kolmogorov karmaşıklığı sorusu olarak ele alın (etiketi bile ekledim) ve oradan devam edin.
Chris Jester-Young,

3
@ ChrisJester-Young, yaratıcı uygulayıcıları bu işten uzak tutabilecek hala gereksiz bir sınırlama. Ve çözümlerin çoğu (2. en çok oy alanlardan biri de dahil) şimdiden kırılıyor
SztupY

Yanıtlar:


18

Pyth, 37 bayt

Yapmak için gerçekten çok kısa olduğu için önceden üretmek yerine Fibonacci sayıları arasında dolaşıyorum.

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

Çevrimiçi deneyin.


Bu mücadeleyi kazandığın için tebrikler! Bu çözümün hızlı olması hoşuma gitti.
Kritixi Lithos,

45

Python 2, 62 bayt

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

Gerçekten de FizzBuzz standardından çok farklı değil.


1
Bu harika.
J Atkin

Bir sonraki Ruby golf için bu döngü yapısını hatırlamam gerekiyor. Bu harika.
alkış

21

C ++ 11 metaprogramlama, 348 bayt

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

Çünkü neden olmasın. O ile derler warning C4307: '+': integral constant overflow, iyi çalışır, ancak 93+ Fibonacci sayıları inci (taşma nedeniyle) düzgün gösterilmez, bu nedenle bu geçersiz giriştir (ama yine de bayt o kadar onu kazanamadı)

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

template <char H, char ...T>İsteğe bağlı uzunluk değerlerini (teorik olarak) işlemek için şablonlarınızdaki patlatılmış dizeleri ( ) kullanabilirsiniz . Öyleyse, bölünebilirliği 2 ve / veya 3 olarak belirlemek için dizgideki son 2 karakteri incelemesi yeterli olacaktır.
Mego

@Mego Seni anlamıyorum. 64 bit'e uymayan değerleri ele almamda bana nasıl yardımcı olurdu. Ayrıca, Sen sayısı 3'te ile bölünebilir olup olmadığını öğrenmek için tüm rakamları ihtiyaç
Zereges

Dizeler isteğe bağlı olarak uzun sürebilir (bellek tükenene kadar). Ve haklısın, yorumumu bozdum. Yine de, bölünebilirliği belirlemek için dijital toplamı 3 ile hesaplayabilirsiniz.
Mego

@Mego Bu dizgelerin eklenmesi çok daha fazla çaba gerektirir.
Zereges Kasası

1
Gnu lehçesini kullanabilir ve kullanabilirsiniz __uint128_t.

14

C #, 175 171 152 145 bayt

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

sıkıştırılmamış:

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

Çıktıyı bir DeflateStream ile sıkıştırırken bile elde edebileceğim en düşük rakam 191 karakterdi, bu yüzden bu mümkün olan en iyi c # cevabına çok yakındı. Utanç verici bir BigInteger gereklidir.
Jodrell

"Sistem kullanımı;" Başka bir -1 boyutta verecek.
olegz

1
Kullanmaya rağmen hala System.Numerics'i System ile öneklendirmek zorunda kaldım: -S, bu yüzden kullanmanın işe yarayacağından emin değilim.
Jodrell

1
==0S ile değiştirerek >0ve üçlüleri ters çevirerek 3 karakter kaydedebilirsiniz :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
Sen değiştirerek başka 7 karakterleri kaydedebilirsiniz decimal a=1,b=1için dynamic a=1m,b=ave daha sonra kaybedebilir (object):)
Timwi

13

Oracle SQL, 212 bayt

Golf dili değil ama denemek zorunda kaldım ...

Tüm satırları aşağıdakilerle birleştirmek \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

Veya her satırdaki diziden bir girişle (162 bayt):

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
Müthiş, sadece SQL kullandığınız için
Wayne Werner

Sadece sonuncuyu kullanın, çünkü "satır başına" çıktısını almak için "eşdeğer" dir. Ve gerçekten güzel bir kod parçası. Aferin!
Ismael Miguel

@IsmaelMiguel Eğer SQL * Plus'ta (ya da başka bir komut satırı arayüzü) çalıştırılırsa, her satırdan sonra (sorgu çıktısını rapor etme biçiminin bir parçası olarak) yeni bir satır çıktısı olacaktır. Ancak bu, CLI'nin bir işlevidir ve SQL dilinin bir işlevi değildir - kuralla uyumlu olmak için The program should output a new line (\n) after every entryonu daha uzun kod olarak bırakacağım, ancak daha kısa bir ||CHR(13)sonuç finalden önce ekleyerek (bir CLI'ye güvenmeden) uyumlu hale getirilebilir FROM171 chracters için.
MT0

Kullanamaz mısın "\n"? MySQL üzerinde çalışıyor gibi görünüyor. (Koşma select length("\n")1 ile döner ve koşma select "\n", geçersiz bir kaçış nolduğu için select "\p"geri dönüşlerde olduğu gibi geri dönmez p)
Ismael Miguel

SELECT LENGTH('\n') FROM DUAL2Oracle'a '\n'dönüştürülmediği için çıktılar CHR(13).
MT0

11

ShapeScript , 83 bayt

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

Çevrimiçi deneyin!


15
Kelimenin tam anlamıyla, yapışkan tuşları açmaya çalışırken kedimin klavyemin üstüne atladığı görülüyor. İyi iş.
faz

2
mecazi olarak @phase. Ya öyle ya da çok yakından bakmıyorsun. Ya da küçük bir kediniz veya dev bir klavyeniz var. Çünkü bu kedi Fibo ve Nacci yazmayı başardı, ancak aksi takdirde bir harf için saklanan tüm harf tuşlarından kaçının.
John Dvorak

3
@JanDvorak Bence faz bunun için makro kurulumuna sahip;)
Wayne Werner

2
@ faz 1 Kediniz neden odanızda ?; 2. neden yapışkan tuşları açmak istersiniz? 3? Kedinizin klavyenizde zıplamasını önlemek için neden masanızda bir kedi tuzağı kutusu yok?
Nzall 11:15

7

Java, 407 398 351 308 bayt

@Geobits ve @SamYonnou yardımıyla Golf oynadı

Kelimeyi yay. Verbose == Java

import java.math.*;class A{public static void main(String[]w){BigInteger a=BigInteger.ZERO,b=a.flipBit(0),c,z=a,t=a.flipBit(1),h=t.flipBit(0),s=t.flipBit(2);for(int i=0;i<100;i++){System.out.println(b.mod(s).equals(z)?"FiboNacci":b.mod(t).equals(z)?"Fibo":b.mod(h).equals(z)?"Nacci":b);c=a;a=b;b=c.add(b);}}}

Ungolfed versiyonu:

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
Bu daha çok golf oynayabilir. Her java.math.*şey yerine ithalat . BigIntegers yerine ONEve ZEROyerine sabitleri kullanın new. Sınıftan çıkarın public. Vücudun içindeki printlnifade dışında her şeyi fordöngü beyannamesi içinde paketleyin , vb . Genel olarak Java golf ipuçlarına göz atmanızı öneririm .
Geobits

@ Geobits Bitti! 'Aşina olmadığım bir acıma BigIntegerve onun çeşitli golf teknikleri.
Çorap,

BigInteger.ZERO'yu saklamak, flipBit (...) 'ı yeni BigInteger (...)' a alternatif olarak kullanmak, ve diğer bazı küçük şeyleri 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);}}}
308'e

Görünüşe BigIntegerhep döner BigInteger.ZEROgibi bazı operasyon sırasında add(...)sıfıra değerlendirir böylece kullanabilirsiniz ==yerine .equals(z)ayrıca depolama ile uzak yapabilirsiniz s=t.flipBit‌​(2)(6) ve yerine şöyle zekice iç atama yapın: 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);}}}Bu değişiklikler 280 için aşağı olsun
SamYonnou

2
Sanırım demek istediğinVerbose.isEqualTo(Java)
Cyoce

7

Mathematica, 80 bayt

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

Eski FizzBuzz çözümümün uyarlanması.


1
@JacobAkkerboom Üzgünüz, düzeltildi. Ayrıca, 10.3'ten düşük sürümler için Echoile değiştirin Print.
LegionMammal978

5

Ruby, 71 66 bayt

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
}

Bu konuda yönetici olmak istediğimden daha uzun süre çalıştım ve iyileştirmenin bir yolunu bulamadım. f,n=%w[Fibo Nacci], f,n='Fibbo','Nacci'Ve f='Fibbo';n='Nacci'hepsi aynı karakter sayısı var. +1
Shelvacu

1
[b,f='Fibo',n='Nacci',f,b,f+n][~b%6]İçindeki parantezleri kaldırarak üç bayt ve iki tane daha kaydedebilirsiniz a=b+b=a.
primo

Teşekkürler @primo. Bu ~operatör ile temiz bir hiledir . Daha önce hiç görmedim. Ve şimdi neden negatif endekslerin yakutun bir parçası olduğunu biliyorum :)
MegaTom 16:15 de

puts [Bunun yerine gerçekten ihtiyacınız var puts[?
Outgolfer Erik,

1
Güller kırmızı, menekşeler mavi, Haskell ve Ruby için hiçbir fikrim yok.
Outgolfer Erik,

5

> <> , 116 bayt

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^

Çevrimiçi deneyin!


6
Siteye Hoşgeldiniz! :)
DJMcMayhem

Muhtemelen her iki 3%bölümü de birleştirebilirsin
Jo King

@JoKing Sen öyle düşünürsün, ama n% 3! Orada eminim olduğunu bunları birleştirmek için bir yol, ancak tüm programı yeniden anlamına gelecektir ve bunu aslında uzun olacağını düşünün.
hakr14

4

Pyth, 39

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

Standart fizzbuzz çözümüne çok benzer, sadece Fibonacci sayıları için bir jeneratör ile.

Burada dene


4

C #, 498 392 320 bayt

Sadece bunu linq ile yapmak istedim, çok kötü, onu öldüren BigInteger için kendi toplama fonksiyonumu yazmak zorunda kaldım :-(

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

Düzenleme: Toplam öneri için LegionMammal978 ve olegz'ın C # cevabı, X% 2 && x% 3 için x% 6 kısa yolunun yanı sıra terner operatörlerinin tek bir WriteLine açıklamasında kullanımı sayesinde 320 bayta kadar.


4
AggregateLINQ işlevini duydunuz mu?
LegionMammal978

6 bayt'ı tıraş etmek için "sum" u "t" ile değiştirin.
Xantix

3

Python 2,171 121 bayt

"Kaba kuvvet yaklaşımı."

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 Bayt

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

1
Sen değiştirerek dört bayt kurtarabilecek a=[b,b=a+b][0]için b=a+b,a=b-a. Ayrıca, tamamen ilgisiz bir notta, Stack Overflow
hehe'de

2

Python 2, 100 bayt

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

Büyük sayılar için, Luzun bir sayı olduğunu gösteren sonuna kadar ekler .

Bu bir problemse, işte 104 baytlık bir çözüm.

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

forBu ipucunu kullanarak döngüyü kısaltabilirsiniz : codegolf.stackexchange.com/a/5047/42736 . Özellikle execucu iyi görünüyor.
J Atkin

exec <program_string>*nHile için +1 . Güzel!
agtoever

2

Javascript (ES6), 137 134 bayt

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

Fibonnacci'yi hesaplayan özyinelemeli işlev, bir diziye koyup Fibo, Nacci veya sayı çıktısını alın ve 100'e kadar bir sonraki hesaplamak için kendisini çağırın.

Javascript Number kesinliği nedeniyle 73'te kırılıyor. Bunu aşmanın tek yolu kendi bit hesaplamamı eklemek.


Bu işe yaramadı, olması 5527939700884757 + 8944394323791464 = 14472334024676220gerektiğinden sonra yanlış gidiyor 14472334024676221çünkü JavaScript 16 bitlik hassas yüzer kullanıyor ve 17 bitlik hassasiyet gerektiriyor. Ayrıca 1iki kez de yazdırmalısınız .
George Reith

Baskıyı 1 iki kez ekledi. Hassasiyet için, kodun çalışmasını sağlamak için her şeyi değiştirmem gerekiyor (Sayı değil Uint32Array kullanmıyor ve hesaplama bitlerini bit yapıyor)
Naouak

2

QBasic, 144 141 bayt

Özellikle küçük değil, ama C ++ ve C # yener

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

Beyan yok, :mümkün olan yerlerde kullanıldı, çünkü 1 byte daha ucuz CRLF. Döngü sayacına 0 eklenir: Basic, 47. Fibonacci karakterinde taşar, bu nedenle olması gereken ekstra bayt için telafi edilir.

EDIT: Neil beni 3 bayt kurtardı: 141 bayt.


a$+Bu noktada ilk olarak boş dize olduğu bilindiğinden ilkini kaldırabilirsiniz .
Neil

2

Wolfram Dili, 84 bayt

Elbette hile yapmak, çünkü yerleşiktir Fibonacci.

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

Komut dosyasını çalıştırmak için örnek komut

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

2

Perl, 74 bayt

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

Aşağıdaki komut satırı seçeneğini gerektirir:, -lMbigint8 olarak sayılır.


Örnek Kullanım

$ perl -lMbigint fibo-nacci.pl

Perl, 79 bayt

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

Herhangi bir komut satırı seçeneği gerektirmeden yukarıdakiyle aynı.


2

GolfScript, 47 bayt

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

açıklama

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 bayt

Mitch Schwartz'ın izni ile üç bayt kurtardı .

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

Örnek Kullanım

$ gp -qf < fibo-nacci.gp

1
Yerleşik kullanmamak daha kısadır; Yanımda 73 varfor(i=b=!a=1,99,b=a+a=b; ...
Mitch Schwartz

1
@MitchSchwartz denirdi fibo;)
primo

2

> <>, 128 119 bayt

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

Ben utanmadan çalan mevcut bir programın FizzBuzz programı ödünç ve Fibo Nacci sekansı için çalışmaya modifiye. Sonsuza dek sayıları çıkarır. Şimdi sabittir, yani sadece 100 sayı çıkarır. Burada dene .


2
Sadece ilk 100 Fibo Nacci numarasını yazmalısınız, daha fazla değil, daha az değil.
Kritixi Lithos

@ ΚριτικσιΛίθος Sonunda sadece 100 sayı çıktısı almak için uğraştım.
DanTheMan

Bu, TIO'da 101 sayı üretiyor ancak bağlantılı sitede çalışmıyor
Jo King

1

Pyth, 51 bayt

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

Fibonacci dizisini oluşturur, sonra ne yazdırılacağına karar verir.

                    [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

Test etmek için bunu deneyin (yalnızca ilk 20 sayıyı yapar)

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

Asıl programı çalıştırmak ne kadar sürer?
Kritixi Lithos 9:15

Hiç bir fikrim yok, 30 saniye içinde böyle büyük ana faktörlemelerin çalışılmasının muhtemelen onu yavaşlatması gerektiğine karar vermedi.
Blue

1

Clojure, 127 bayt

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

Kullanılan bazı püf noktaları:

  • defFibonacci dizisinin kendisini veren o küçük sevimli Konrad Garus'tan utanmadan çalınır .
  • strgiriş olarak sembol alabilir. Çılgın değil mi?
  • Haritalar ve varsayılan değerler ifbazı durumlarda yazmanın en kısa yoludur .

Nedir lazy-cat?
Kritixi Lithos,

@ ΚριτικσιΛίθος Tembelce çoklu dizilimleri birleştirir. Bu durumda, Fibonacci dizisinin ( [1 1]) ilk iki öğesini Fibonacci dizisindeki her bir öğenin onu takip eden öğe ile toplamasıyla birleştirir.
Sam Estep

Bunun temelde Clojure versiyonu olduğunu tahmin etmekte haklı mıyım fibs = 0 : 1 : zipWith (+) fibs (tail fibs)?
Soham Chowdhury

@SohamChowdhury Evet, söyleyebileceğim kadarıyla.
Sam Estep



1

Javascript (ES2015), 99 bayt

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

Yerine alertkullanın console.log; bazı baytları tıraş eder.
Kritixi Lithos 13:15

1

F #, 202 163 149 bayt

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

Bu bir FSX (F # script) dosyasıdır


Bu işe yaradığına şaşırdım
asibahi 19

1

PHP, 75 bayt

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

Şaşırtıcı derecede rekabetçi. PHP v5.5 veya daha yüksek sürümleri gerektirir. Varsayılan ayarları varsayılan bir varsayım olarak kabul ediyorum (.ini olmadan) ( -nseçenekle yerel .ini'nizi devre dışı bırakabilirsiniz ).


Örnek Kullanım

$ php -n fibo-nacci.php

WIth -n bcaddbile çalışmıyor bcmathyüklenir. -n Çok fazla şey olmadan stderr'de çıktı verilir.
Sylwester

Kutularım üzerinde çalışıyor.
primo

1

Prolog, 182 bayt

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

Burada çevrimiçi deneyin
Programı çalıştırmak için sorguyu kullanın:

p.
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.