Fibonacci + Fizz Buzz = Fibo Nacci!

74

Fibonacci + FizzBuzz = Fibo Nacci!


Tantangan Anda adalah membuat program Fibo Nacci!

  • Program Fibo Nacci menghasilkan 100 angka Fibonacci pertama (mulai dari 1).
  • Jika angka Fibonacci dapat dibagi oleh 2 dan 3 (yaitu dibagikan dengan 6), maka output FiboNacci bukan nomor.
  • Jika tidak, jika angka Fibonacci dibagi 2, maka output Fibo bukan angka.
  • Jika tidak, jika angka Fibonacci dibagi dengan 3, maka output Nacci bukan angka.

Aturan

  • Program seharusnya tidak menerima input.
  • Program harus menampilkan baris baru ( \n) setelah setiap entri.
  • Program seharusnya tidak mencetak apa pun ke STDERR.
  • Program harus menampilkan 100 entri Fibo Nacci pertama (mulai dari 1).
  • Celah standar tidak diizinkan (secara default).
  • Ini adalah sehingga kode terpendek dalam byte menang!

Inilah output yang diharapkan:

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

The Snack Stack Snippet di bagian bawah posting ini menghasilkan katalog dari sebuah jawaban) sebagai daftar solusi terpendek per bahasa dan b) sebagai leaderboard keseluruhan.

Untuk memastikan bahwa jawaban Anda muncul, silakan mulai jawaban Anda dengan tajuk utama, menggunakan templat Penurunan harga berikut:

## Language Name, N bytes

di mana Nukuran kiriman Anda. Jika Anda meningkatkan skor Anda, Anda dapat menyimpan skor lama di headline, dengan mencoretnya. Misalnya:

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

Jika Anda ingin memasukkan beberapa angka dalam tajuk Anda (mis. Karena skor Anda adalah jumlah dari dua file atau Anda ingin membuat daftar hukuman penterjemah secara terpisah), pastikan bahwa skor sebenarnya adalah angka terakhir di tajuk:

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

Anda juga dapat membuat nama bahasa menjadi tautan yang kemudian akan muncul di cuplikan:

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

Kritixi Lithos
sumber
6
Bagaimana dengan bahasa dengan tipe integer tertinggi hanya 64 bit? :( Bukankah 90 angka cukup?
Zereges
3
@ Zona Dalam hal ini, saya minta maaf. :(
Kritixi Lithos
28
Mungkin itu harus disebut "Fizzo Nacci"
LegionMammal978
4
@SztupY Karena output dalam pertanyaan ini benar-benar invarian, Anda bahkan tidak perlu bilangan bulat sama sekali. Hanya memperlakukan pertanyaan ini sebagai pertanyaan kompleksitas-kolmogorov (saya bahkan menambahkan tag) dan pergi dari sana.
Chris Jester-Young
3
@ ChrisJester-Young ini masih merupakan batasan yang tidak perlu, yang mungkin membuat implementator kreatif menghindari tugas ini. Dan sebagian besar solusi (termasuk yang ke-2 paling mutakhir) sudah mulai
rusak

Jawaban:

18

Pyth, 37 byte

Saya mengulang-ulang angka Fibonacci alih-alih menghasilkannya sebelumnya, karena ini sangat singkat untuk dilakukan.

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

Cobalah online.

PurkkaKoodari
sumber
Selamat telah memenangkan tantangan ini! Saya suka bahwa solusi ini cepat.
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

Tidak jauh berbeda dengan FizzBuzz standar, kok.

Sp3000
sumber
1
Ini luar biasa.
J Atkin
Saya perlu mengingat konstruksi perulangan ini untuk golf Ruby berikutnya. Ini luar biasa.
bertepuk tangan
21

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

Karena kenapa tidak. Ini mengkompilasi dengan warning C4307: '+': integral constant overflow, berjalan dengan baik, tetapi angka Fibonacci 93+ tidak ditampilkan dengan benar (karena melimpah), jadi ini entri yang tidak valid (tapi saya tidak bisa memenangkannya dengan banyak byte meskipun)

Tidak disatukan

#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
sumber
Anda bisa menggunakan string yang meledak ( template <char H, char ...T>) di template Anda untuk (secara teoritis) menangani nilai-nilai panjang sewenang-wenang. Maka itu hanya masalah memeriksa 2 karakter terakhir dalam setiap string untuk menentukan dibagi oleh 2 dan / atau 3.
Mego
@Mego, aku tidak mengerti kamu. Bagaimana itu akan membantu saya untuk menangani nilai-nilai, yang tidak sesuai dengan 64 bit. Selain itu, Anda memerlukan semua digit untuk mengetahui apakah jumlahnya dapat dibagi 3.
Zereges
String bisa panjang secara sewenang-wenang (sampai Anda kehabisan memori). Dan Anda benar, saya mengacaukan komentar saya. Namun, Anda dapat menghitung penjumlahan digital untuk menentukan pembagian dengan 3.
Mego
@Mego Menerapkan penambahan string-string itu akan membutuhkan lebih banyak usaha.
Zereges
1
Anda bisa menggunakan dialek gnu dan menggunakan __uint128_t, mungkin.
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");}}

Terkompresi:

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
sumber
Bahkan mengompresi output dengan DeflateStream yang terendah yang bisa saya dapatkan adalah 191 karakter jadi ini kemungkinan sangat dekat dengan jawaban c # terbaik. Rasa malu BigInteger diperlukan.
Jodrell
"menggunakan Sistem;" akan memberikan -1 dalam ukuran lain.
olegz
1
Saya masih harus awalan System.Numerics dengan System meskipun menggunakan: -S, jadi saya tidak yakin penggunaannya akan berhasil.
Jodrell
1
Anda dapat menyimpan 3 karakter dengan mengganti huruf ==0s dengan >0dan membalikkan terner: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
Anda dapat menyimpan 7 karakter lainnya dengan mengubah decimal a=1,b=1ke dynamic a=1m,b=adan kemudian Anda dapat kehilangan (object):)
Timwi
13

Oracle SQL, 212 byte

Bukan bahasa golf tetapi saya harus mencoba ...

Menggabungkan semua baris dengan \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

Atau dengan satu entri dari urutan per baris (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
MT0
sumber
2
Luar biasa, hanya untuk menggunakan SQL
Wayne Werner
Cukup gunakan yang terakhir, karena ini adalah "setara" dengan keluaran "per baris". Dan itu benar-benar sepotong kode. Sudah selesai dilakukan dengan baik!
Ismael Miguel
@IsmaelMiguel Jika dijalankan di SQL * Plus (atau antarmuka baris perintah lain) maka akan ada output baris baru setelah setiap baris (sebagai bagian dari cara melaporkan output permintaan). Namun, itu adalah fungsi dari CLI dan bukan bahasa SQL - agar sesuai dengan aturan, The program should output a new line (\n) after every entrysaya akan membiarkannya sebagai kode yang lebih panjang tetapi yang lebih pendek dapat dibuat sesuai (tanpa bergantung pada CLI) dengan menambahkan ||CHR(13)sebelum final FROMuntuk 171 chracters.
MT0
Tidak bisa Anda gunakan "\n"? Tampaknya bekerja di MySQL. (Berlari select length("\n")mengembalikan 1, dan berlari select "\n"tidak kembali n, seperti select "\p"pengembalian pkarena menjadi pelarian yang tidak valid)
Ismael Miguel
SELECT LENGTH('\n') FROM DUALoutput 2dalam Oracle karena '\n'tidak dapat dikonversi ke 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?**!"'"$""~

Cobalah online!

Dennis
sumber
15
Secara harfiah terlihat seperti kucing saya melompat di atas keyboard saya ketika saya mencoba untuk menghidupkan tombol lengket. Pekerjaan yang baik.
fase
2
@Fase kiasan. Entah itu atau Anda tidak melihat terlalu dekat. Atau Anda memiliki kucing kecil atau keyboard raksasa. Karena kucing ini berhasil mengetik Fibo dan Nacci tetapi sebaliknya hindari semua tombol huruf kecuali satu r.
John Dvorak
3
@ JanDvorak Saya pikir fase memiliki pengaturan makro untuk itu;)
Wayne Werner
2
@phase 1. Mengapa kucing Anda ada di kamar Anda ?; 2. mengapa Anda ingin menghidupkan kunci lengket? 3? Mengapa Anda tidak memiliki kotak perangkap kucing di meja Anda untuk menghindari kucing Anda melompat pada keyboard Anda?
Nzall
7

Java, 407 398 351 308 byte

Golf dengan bantuan dari @Geobits dan @SamYonnou

Sebarkan berita: 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 tidak disatukan:

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);
    }
  }
}
Kaus kaki
sumber
1
Ini bisa bermain golf lebih banyak. Impor java.math.*alih-alih semuanya. Gunakan konstanta untuk ONEdan ZERObukannya newBigIntegers. Hapus publicdari kelas. Kemas semuanya kecuali printlnpernyataan di forbadan di dalam deklarasi loop, dll. Saya merekomendasikan untuk melihat tips golf Java secara umum.
Geobits
@Geobits Selesai! “Sayang sekali saya tidak terbiasa dengan BigIntegerdan berbagai teknik golfnya.
Sock
Menyimpan BigInteger.ZERO, menggunakan flipBit (...) sebagai alternatif untuk BigInteger baru (...), dan beberapa hal kecil lainnya yang bisa Anda peroleh hingga 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
Sepertinya BigIntegerselalu kembali BigInteger.ZEROketika beberapa operasi seperti add(...)mengevaluasi ke nol sehingga Anda dapat menggunakan ==alih-alih .equals(z), juga Anda dapat menghapus penyimpanan s=t.flipBit‌​(2)(6) dan alih-alih melakukan beberapa tugas pintar seperti: 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);}}}perubahan ini membuatnya menjadi 280
SamYonnou
2
Saya pikir maksud AndaVerbose.isEqualTo(Java)
Cyoce
7

Mathematica, 80 byte

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

Adaptasi solusi FizzBuzz lama saya.

LegionMammal978
sumber
1
@JacobAkkerboom Maaf, sudah diperbaiki. Juga, untuk versi yang kurang dari 10.3, ganti Echodengan Print.
LegionMammal978
5

Ruby, 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
}
MegaTom
sumber
Saya telah mengerjakan ini lebih lama dari yang saya ingin admin dan tidak dapat menemukan cara untuk memperbaikinya. f,n=%w[Fibo Nacci], f,n='Fibbo','Nacci'dan f='Fibbo';n='Nacci'semua memiliki jumlah karakter yang sama. +1
Shelvacu
1
Anda dapat menyimpan tiga byte dengan menggunakan [b,f='Fibo',n='Nacci',f,b,f+n][~b%6], dan dua lagi dengan menghapus tanda kurung a=b+b=a.
Primo
@Primo terima kasih. Itu adalah trik yang rapi dengan ~operator. Belum pernah melihatnya sebelumnya. Dan sekarang saya tahu mengapa indeks negatif adalah bagian dari ruby ​​:)
MegaTom
Benar-benar membutuhkan, puts [bukan puts[?
Erik the Outgolfer
1
Mawar berwarna merah, violet berwarna biru, untuk Haskell dan Ruby, aku tidak tahu.
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^

Cobalah online!

hakr14
sumber
6
Selamat datang di situs ini! :)
DJMcMayhem
Anda mungkin dapat menggabungkan kedua 3%bagian
Jo King
@ JoKing Anda akan berpikir begitu, tetapi mereka benar-benar mengarah pada hasil yang berbeda jika n% 3! = 0. Aku yakin ada adalah cara untuk menggabungkan mereka, tapi itu berarti restrukturisasi seluruh program, dan aku membayangkan itu akan benar-benar menjadi lebih lama.
hakr14
4

Pyth, 39

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

Sangat mirip dengan solusi fizzbuzz standar, hanya dengan generator untuk angka-angka Fibonacci.

Coba di sini

FryAmTheEggman
sumber
4

C #, 498 392 320 byte

Saya hanya benar-benar ingin melakukan ini dengan LINQ, sayang sekali saya harus menulis fungsi jumlah saya sendiri untuk BigInteger yang benar-benar membunuhnya :-(

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

Tidak Disatukan:

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

Sunting: Turun hingga 320 byte, terima kasih kepada LegionMammal978 untuk saran agregat dan terima kasih kepada jawaban C # olegz untuk singkatan x% 6 untuk X% 2 && x% 3 serta penggunaan operator ternary dalam satu pernyataan WriteLine.

Jakotheshadows
sumber
4
Pernahkah Anda mendengar tentang Aggregatefungsi LINQ?
LegionMammal978
Ganti "jumlah" dengan "t" untuk mencukur 6 byte.
Xantix
3

Python 2, 171 121 byte

"Pendekatan kekerasan."

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
sumber
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
sumber
1
Anda dapat menyimpan empat byte dengan mengubah a=[b,b=a+b][0]ke b=a+b,a=b-a. Juga, dalam nada yang sama sekali tidak terkait, saya suka cara Anda menjawab sangat cepat di Stack Overflow hehe Selamat
bersenang
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])

Untuk angka besar, tambahkan a Lke ujung yang menunjukkan angka panjang.

Jika itu masalah, berikut adalah solusi 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])
Biru
sumber
Anda dapat memperpendek forloop menggunakan tip ini: codegolf.stackexchange.com/a/5047/42736 . Secara khusus execujungnya terlihat bagus.
J Atkin
+1 untuk exec <program_string>*ntriknya. Bagus!
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))

Fungsi rekursif yang menghitung fibonnacci, memasukkannya ke dalam array kemudian menampilkan Fibo, Nacci atau nomor dan memanggil dirinya untuk menghitung berikutnya hingga 100.

Itu rusak di 73 karena ketepatan Nomor javascript. Satu-satunya cara untuk menyiasatinya adalah dengan menambahkan perhitungan bit sendiri.

Naouak
sumber
Ini tidak berfungsi, itu salah setelah 5527939700884757 + 8944394323791464 = 14472334024676220kapan seharusnya 14472334024676221karena JavaScript menggunakan float presisi 16 bit dan yang membutuhkan presisi 17 bit. Anda juga harus mencetak 1dua kali.
George Reith
Menambahkan cetakan 1 dua kali. Untuk ketepatannya, saya perlu mengubah semuanya pada kode untuk membuatnya bekerja (tidak menggunakan Angka tetapi Uint32Array dan melakukan perhitungan bit demi bit)
Naouak
2

QBasic, 144 141 byte

Tidak terlalu kecil, tapi ini mengalahkan C ++ dan 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

Tidak ada deklarasi, gunakan :sedapat mungkin karena 1 byte lebih murah daripada CRLF. Awalan 0 ke penghitung lingkaran: Dasar akan meluap pada karakter Fibonacci ke-47, jadi ganti rugi untuk byte tambahan yang seharusnya ada.

EDIT: Neil menyelamatkan saya 3 byte: 141 byte.

steenbergh
sumber
Anda dapat menghapus yang pertama a$+karena dikenal sebagai string kosong pada titik ini.
Neil
2

Bahasa Wolfram, 84 byte

Agak curang tentu saja, karena built in Fibonacci.

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

Contoh perintah untuk menjalankan skrip

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

Perl, 74 byte

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

Membutuhkan opsi baris perintah berikut:, -lMbigintdihitung sebagai 8.


Contoh Penggunaan

$ perl -lMbigint fibo-nacci.pl

Perl, 79 byte

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

Sama seperti di atas, tanpa memerlukan opsi baris perintah apa pun.

primo
sumber
2

GolfScript, 47 byte

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

Penjelasan

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
sumber
2

PARI / GP, 76 73 byte

Disimpan tiga byte milik 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)))

Contoh Penggunaan

$ gp -qf < fibo-nacci.gp
primo
sumber
1
Lebih pendek untuk tidak menggunakan built-in; Saya mendapat 73 denganfor(i=b=!a=1,99,b=a+a=b; ...
Mitch Schwartz
1
@MitchSchwartz dulu namanya 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"^

Saya tanpa malu-malu mencuri meminjam program FizzBuzz program yang ada dan memodifikasinya untuk bekerja untuk urutan Fibo Nacci. Ini menghasilkan angka selamanya. Sekarang sudah diperbaiki, yaitu hanya menghasilkan 100 angka. Coba di sini .

DanTheMan
sumber
2
Anda hanya harus menampilkan 100 nomor Fibo Nacci pertama, tidak lebih, tidak kurang.
Kritixi Lithos
@ ΚριτικσιΛίθος Saya akhirnya berhasil membuatnya hanya menghasilkan 100 angka.
DanTheMan
Ini menghasilkan 101 angka pada TIO tetapi tidak berfungsi di situs tertaut
Jo King
1

Pyth, 51 byte

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

Menghasilkan urutan Fibonacci kemudian memutuskan apa yang akan dicetak.

                    [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

Untuk menguji, coba ini (hanya melakukan 20 angka pertama)

V.Wn20lHaZ+@Z_1@Z_2[1 1)|+*"Fibo"}2JPN*"Nacci"}3JN
Biru
sumber
Berapa lama untuk menjalankan program yang sebenarnya?
Kritixi Lithos
Saya tidak tahu, itu tidak dalam 30 detik yang dibutuhkan untuk menyelesaikan faktorisasi besar seperti itu mungkin akan banyak memperlambatnya.
Biru
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)))))

Tidak Disatukan:

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

Beberapa trik yang digunakan:

  • Itu sedikit cantik defyang memberikan urutan Fibonacci itu sendiri dicuri tanpa malu-malu dari Konrad Garus .
  • strdapat mengambil simbol sebagai input. Gila kan?
  • Peta dan nilai default adalah cara terpendek untuk menulis ifdalam beberapa kasus.
Sam Estep
sumber
Apa lazy-cat?
Kritixi Lithos
@ ΚριτικσιΛίθος Ini dengan malas menggabungkan beberapa urutan. Dalam hal ini, ia menggabungkan dua elemen pertama dari deret Fibonacci ( [1 1]) dengan hasil menjumlahkan setiap elemen dalam deret Fibonacci dengan elemen yang mengikutinya.
Sam Estep
Apakah saya benar menebak bahwa ini pada dasarnya adalah versi Clojure fibs = 0 : 1 : zipWith (+) fibs (tail fibs)?
Soham Chowdhury
@SohamChowdhury Ya, sejauh yang saya tahu.
Sam Estep
1

CJam, 44 byte

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

Cobalah online di juru bahasa CJam .

Dennis
sumber
1

dc, 100 89 79 byte

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

Terinspirasi oleh http://c2.com/cgi/wiki?DeeCee

pengguna47197
sumber
Selamat Datang di Programming Puzzles & Code Golf!
Dennis
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))

Tidak Disatukan:

// 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
sumber
Gunakan alertsebagai ganti console.log; itu memotong beberapa 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

Ini adalah file FSX (F # script)

olegz
sumber
Saya terkejut bahwa ini berhasil
asibahi
1

PHP, 75 byte

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

Sangat kompetitif. Requres PHP v5.5 atau lebih tinggi. Saya menganggap pengaturan default, karena mereka tanpa .ini (Anda dapat menonaktifkan .ini lokal Anda dengan -nopsi).


Contoh Penggunaan

$ php -n fibo-nacci.php
primo
sumber
Dengan -n bcaddtidak berfungsi bahkan ketika bcmathdiinstal. Tanpa -n banyak hal adalah output pada stderr.
Sylwester
Bekerja pada kotak saya (es).
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).

Cobalah online di sini
Untuk menjalankan program, gunakan kueri:

p.
Emigna
sumber