フィボナッチ+フィズバズ=フィボナッチ!


74

フィボナッチ+ FizzBu​​zz =フィボナッチ!


あなたの課題は、フィボナッチプログラムを作成することです!

  • Fibo Nacciプログラムは、最初の100個のフィボナッチ数(1から始まる)を出力します。
  • フィボナッチ数が2 3の両方で割り切れる(つまり、6で割り切れる)場合、数字の代わりにFiboNacciを出力します。
  • それ以外の場合、フィボナッチ数が2で割り切れる場合、数ではなくFiboを出力します。
  • それ以外の場合、フィボナッチ数が3で割り切れる場合、数の代わりにNacciを出力します。

ルール

  • プログラムは何も入力しないでください。
  • プログラムは、\nエントリごとに新しい行()を出力する必要があります。
  • プログラムは、STDERRに何も印刷しないでください。
  • プログラム、最初の100個の Fibo Nacciエントリ(1から始まる)を出力する必要があります。
  • 標準の抜け穴は許可されていません(デフォルト)。
  • これはので、バイト単位の最短コードが勝ちです!

予想される出力は次のとおりです。

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

カタログ

スナックこの記事の下部にあるスタックスニペットは、言語ごとの最短ソリューションのリストとして答えa)およびb)は、全体的なリーダーボードなどからカタログを生成します。

回答が表示されるようにするには、次のマークダウンテンプレートを使用して、見出しから回答を開始してください。

## Language Name, N bytes

N提出物のサイズはどこですか。スコアを改善する場合、古いスコアを打つことで見出しに残すことができます。例えば:

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

ヘッダーに複数の数字を含める場合(たとえば、スコアが2つのファイルの合計であるか、インタープリターフラグペナルティーを個別にリストする場合)、実際のスコアがヘッダーの最後の数字であることを確認します。

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

言語名をリンクにして、スニペットに表示することもできます。

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


6
最高の整数型が64ビットのみの言語はどうですか :( 90 fib。の数値では十分ではありませんか?
ゼレゲス

3
@Zeregesその点で、すみません。:(
Kritixi Lithos

28
多分それは「Fizzo Nacci」と呼ばれるべき
LegionMammal978

4
@SztupYこの質問の出力は完全に不変であるため、整数さえ必要ありません。この質問をkolmogorov-complexityの質問として扱い(タグを追加しました)、そこから進みます。
クリスジェスターヤング

3
@ ChrisJester-Youngそれはまだ不必要な制限であり、創造的な実装者がこのタスクを明確にするかもしれません。そして、ほとんどのソリューション(2番目に上位のソリューションを含む)は既に壊れています
-SztupY

回答:


18

Pyth、37バイト

フィボナッチ数を前もって生成するのではなく、ループするのは本当に短いので、ループします。

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

オンラインでお試しください。


このチャレンジに勝ちました、おめでとうございます!このソリューションが高速であることが気に入った。
Kritixiリトス

45

Python 2、62バイト

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

実際、標準のFizzBu​​zzとそれほど違いはありません。


1
これは素晴らしいです。
Jアトキン

次のルビーのゴルフのために、このループ構造を覚えておく必要があります。これは素晴らしいです。
拍手

21

C ++ 11メタプログラミング、348バイト

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

なぜなら、なぜだ。でコンパイルしますがwarning C4307: '+': integral constant overflow、正常に実行されますが、93 +番目のフィボナッチ数は正しく表示されません(オーバーフローのため)

非ゴルフ

#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>テンプレートで展開された文字列()を使用して、(理論的に)任意の長さの値を処理できます。そして、それだけで2および/または3で割り切れるを決定するために、各文字列の最後の2つの文字を調べるの問題だろう
MEGO

@Mego私はあなたを理解していません。64ビットに収まらない値を処理するのにどのように役立ちますか。また、数字が3で割り切れるかどうかを調べるには、すべての数字が必要です。
Zereges

文字列は任意に長くすることができます(メモリを使い果たすまで)。そして、あなたは正しいです、私は私のコメントを台無しにしました。それでも、あなたは3で割り切れるを決定するためにデジタル合計を計算することができ
MEGO

@Megoこれらの文字列の追加を実装するには、さらに多くの労力が必要です。
ゼレゲス

1
__uint128_tおそらくgnu方言を使用して、を使用できます。

14

C#、175171152145バイト

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

非圧縮:

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

DeflateStreamで出力を圧縮しても最低の191文字であったため、これは可能な限り最良のc#回答に非常に近い可能性があります。恥ずかしいBigIntegerが必要です。
ジョドレル

「システムを使用して」サイズがさらに-1になります。
オレグ

1
:-Sを使用しているにもかかわらず、System.Numericsの前にSystemを付ける必要があったため、使用できるかどうかはわかりません。
ジョドレル

1
あなたは置き換えることにより、3つの文字を保存することができ==0て、Sを>0し、三元系を反転: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");}}
ボブ

3
に変更decimal a=1,b=1してさらに7文字を保存するdynamic a=1m,b=aと、次の文字を失う可能性があり(object)ます。)
Timwi

13

Oracle SQL、212バイト

ゴルフの言語ではありませんが、試してみました...

すべての行を連結する\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

または、行ごとのシーケンスからの1つのエントリ(162バイト):

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
素晴らしい、SQLを使用するためだけに
ウェインワーナー

「1行ごと」の出力と「同等」であるため、最後のものを使用してください。そして、それは本当にすばらしいコードです。よくやった!
イスマエルミゲル

@IsmaelMiguel SQL * Plus(または別のコマンドラインインターフェイス)で実行すると、各行の後に(クエリ出力のレポート方法の一部として)改行出力があります。ただし、これはCLIの機能であり、SQL言語ではありません-ルールThe program should output a new line (\n) after every entryに準拠するために、長いコードとして残しますが、短いコードは(CLIに依存せずに)||CHR(13)最終コードの前に追加して、FROM171文字
MT0

使えません"\n"か?MySQLで動作するようです。(実行中select length("\n")は1を返し、実行中は戻りselect "\n"ません。無効なエスケープであるためnselect "\p"戻りはそうですp
イスマエルミゲル

SELECT LENGTH('\n') FROM DUALに変換されないため2、Oracleで出力されます。'\n'CHR(13)
MT0

11

ShapeScript、83バイト

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

オンラインでお試しください!


15
文字通り、ネコがキーボードの上に飛びついて、スティッキーキーをオンにしようとしたようです。良くやった。
フェーズ

2
比fig的に@フェーズ。それともあなたがあまりにもよく見ていません。または、小さな猫または巨大なキーボードを持っています。この猫は、なんとかフィボとナッチを入力することができましたが、そうでない場合は、1つのrで保存されるすべての文字キーを避けました。
ジョン・ドヴォルザーク

3
@JanDvorakフェーズにはそのためのマクロがセットアップされていると思う;)
ウェインワーナー

2
@phase 1.猫が部屋にいるのはなぜですか。2.なぜ固定キーをオンにしたいのですか?3?猫がキーボードに飛び乗るのを防ぐために、机の上に猫トラップボックスがないのはなぜですか?
Nzall

7

Java、407 398 351 308バイト

@Geobitsと@SamYonnouの助けを借りてゴルフをしました

言葉を広める: 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);}}}

ゴルフされていないバージョン:

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
これはもっとゴルフすることができます。java.math.*全体ではなくインポート。BigIntegerの代わりに、ONEおよびBigIntegerの定数を使用します。クラスから削除します。ループ宣言内の本体のステートメントなどを除くすべてをパックします。一般的なJavaゴルフのヒントを確認することをお勧めします。ZEROnewpublicprintlnfor
ジオビット

@Geobits完了!「私はなじみのない同情BigIntegerとそのさまざまなゴルフテクニックでした。
ソック

新しいBigInteger(...)の代替としてflipBit(...)を使用してBigInteger.ZEROを格納し、それを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);}}}
まとめる

のような操作がゼロに評価されるとBigInteger常に返さBigInteger.ZEROれるように見えるadd(...)ので、の==代わりに使用すること.equals(z)もできます。また、保存s=t.flipBit‌​(2)(6)を廃止し、代わりに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);}}}次のような巧妙な内部割り当てを行うことができます:これらの変更は280
SamYonnou

2
私はあなたが意味すると思うVerbose.isEqualTo(Java)
チョイス

7

Mathematica、80バイト

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

私の古いFizzBu​​zzソリューションの適応。


1
@JacobAkkerboom申し訳ありませんが、修正されました。また、10.3未満のバージョンのため、交換してくださいEchoPrint
LegionMammal978

5

ルビー、71 66バイト

a=b=1;100.times{puts [b,f='Fibo',n='Nacci',f,b,f+n][~b%6];a=b+b=a}

なし:

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
}

私は管理したいと思っているよりも長い間これに取り組んできましたが、改善する方法を見つけることができません。f,n=%w[Fibo Nacci]f,n='Fibbo','Nacci'そしてf='Fibbo';n='Nacci'全てが同じ文字数を持っています。+1
シェルバック

1
を使用して3バイトを節約[b,f='Fibo',n='Nacci',f,b,f+n][~b%6]し、の括弧を削除してさらに2 バイト節約できますa=b+b=a
プリモ

@primoありがとう。これは、~オペレーターにとっては巧妙なトリックです。前に見たことがない。そして今、負のインデックスがルビーの一部である理由を知っています:)
MegaTom

puts [代わりに本当に必要puts[ですか?
エリックアウトゴルファー

1
バラは赤、スミレは青です、HaskellとRubyの場合、私にはわかりません。
エリックアウトゴルファー

5

> <>、116バイト

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^

オンラインでお試しください!


6
サイトへようこそ!:)
DJMcMayhem

おそらく両方の3%セクションを組み合わせることができます
ジョーキング

@JoKingそう思いますが、実際には、n%3!= 0の場合は異なる結果につながります。それらを結合する方法がある確信していますが、それはプログラム全体を再構築することを意味し、実際にはもっと長くなると思います。
hakr14


4

C#、498 392 320バイト

私は本当にlinqでこれをやりたいと思っていましたが、あまりにも悪いので、BigIntegerのために自分でsum関数を書いて、それを本当に殺しました:-(

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

ゴルフをしていない:

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

編集:LegionMammal978の総計の提案と、X%2 && x%3のx%6速記に対するolegzのC#回答、および単一のWriteLineステートメントでの三項演算子の使用により、320バイトまで削減されました。


4
AggregateLINQ関数について聞いたことがありますか?
LegionMammal978

6バイトを削るには、「sum」を「t」に置き換えます。
Xantix

3

Python 2、171 121バイト

「ブルートフォースアプローチ。」

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バイト

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

1
に変更a=[b,b=a+b][0]すると、4バイト節約できますb=a+b,a=b-a。また、まったく関係のないメモで、Stack Overflowで本当に速く答える方法が好きですhehe a nice day
Piyin

2

Python 2、100バイト

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

大きな数字の場合、L最後にa を追加して、長い数字であることを示します。

それが問題であれば、ここに104バイトの解決策があります

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

forこのヒントcodegolf.stackexchange.com/a/5047/42736を使用してループを短縮できます。特に、execヒントは良さそうです。
Jアトキン

exec <program_string>*nトリックのために+1 。いいね!
-agtoever

2

Javascript(ES6)、137 134バイト

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を計算し、それを配列に入れてからFibo、Nacciまたは数値を出力し、それ自体を呼び出して100まで次を計算する再帰関数。

javascriptの数値の精度のために73で中断します。それを回避する唯一の方法は、独自のビット計算を追加することです。


これは機能しません。JavaScriptが16ビット精度の浮動小数点数を使用し、17ビットの精度を必要とするため、本来ある5527939700884757 + 8944394323791464 = 14472334024676220べきタイミングになります14472334024676221。また、12回印刷する必要があります。
ジョージリース

印刷1を2回追加しました。精度を上げるには、コードを細かく変更して機能させる必要があります(NumberではなくUint32Arrayを使用し、ビット
ごとに

2

QBasic、144 141バイト

特に小さいわけではありませんが、C ++や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

宣言はありません。:可能な限り使用しました。これは、の場合よりも1バイト安いためCRLFです。ループカウンターの前に0を付けます:Basicは47番目のフィボナッチ文字でオーバーフローするため、そこにあるべき余分なバイトを補正します。

編集:ニールは私に3バイトを節約しました:141バイト。


最初のa$+文字列は、この時点で空の文字列であることがわかっているため、削除できます。
ニール

2

Wolfram言語、84バイト

組み込まれてFibonacciいるため、もちろん不正行為の種類。

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

スクリプトを実行するコマンドの例

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

2

Perl、74バイト

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

次のコマンドラインオプションが必要です:-lMbigintとしてカウントされます。


サンプルの使用法

$ perl -lMbigint fibo-nacci.pl

Perl、79バイト

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

上記と同じですが、コマンドラインオプションは不要です。


2

GolfScript、47バイト

100,{1.@{.@+}*;..2%!'Fibo'*\3%!'Nacci'*+\or}%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バイト

Mitch Schwartzのご厚意により3バイトを保存しました。

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

サンプルの使用法

$ gp -qf < fibo-nacci.gp

1
組み込みを使用しないほうが短くなります。私は73を獲得しましたfor(i=b=!a=1,99,b=a+a=b; ...
ミッチシュワルツ

1
@MitchSchwartzかつて呼び出されたfibo;)
primo

2

> <>、128 119バイト

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

私は恥知らずに既存のプログラムFizzBu​​zzプログラムを借りて、フィボナッチシーケンスで動作するように修正しました。それは永遠に数字を出力します。現在は修正されています。つまり、100個の数字しか出力されません。ここで試してみてください


2
最初の100個のフィボナッチ数のみを出力する必要があります。
クリティキシリソス

@ΚριτικσιΛίθος私はついに100個の数字しか出力しないようになりました。
DanTheMan

これはTIOで101個の数値を出力しますが、リンクされたサイトでは機能しません
ジョーキング

1

Pyth、51バイト

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

フィボナッチ数列を生成し、印刷するものを決定します。

                    [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

テストするには、これを試してください(最初の20個の数字のみを行います)

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

実際のプログラムを実行するのにどれくらい時間がかかりますか?
クリティキシリソス

わからないが、このような大きな素因数分解を行うことで恐らく大幅に遅くなることを理解するのにかかった30秒ではなかった。
ブルー

1

Clojure、127バイト

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

ゴルフをしていない:

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

使用されるいくつかのトリック:

  • defフィボナッチ数列自体を提供するこの小さなものは、コンラッドガルスから恥知らずに盗まれます。
  • str入力としてシンボルを取ることができます。クレイジーだよね?
  • 場合によっては、マップとデフォルト値が最短の書き込み方法ifです。

なにlazy-cat
Kritixiリトス

@ΚριτικσιΛίθος複数のシーケンスを遅延的に連結します。この場合、フィボナッチ数列の最初の2つの要素([1 1])と、フィボナッチ数列の各要素とそれに続く要素を加算した結果を連結します。
サムエステップ

これは基本的にClojureバージョンのだとfibs = 0 : 1 : zipWith (+) fibs (tail fibs)思いますか?
ソハムチョードリー

@SohamChowdhuryはい、私の知る限りです。
サムエステップ



1

Javascript(ES2015)、99バイト

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

ゴルフをしていない:

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

alert代わりに使用しconsole.logます。いくつかのバイトを削ります。
クリティキシリソス

1

F#、202 163 149バイト

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

これはFSX(F#スクリプト)ファイルです


私はこれがうまくいくことに驚いています
-asibahi

1

PHP、75バイト

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

驚くほど競争力があります。PHP v5.5以降が必要です。.iniがないため、デフォルト設定を想定しています(-nオプションでローカルの.iniを無効にできます)。


サンプルの使用法

$ php -n fibo-nacci.php

をインストールし-n bcaddても機能しませんbcmath-n 多くのものがなければ、stderrに出力されます。
シルウェスター

私のボックスで動作します。
プリモ

1

プロローグ、182バイト

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

ここでオンライン試してみてください
プログラムを実行するには、クエリを使用します:

p.
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.