Фібоначчі + Фіз Базз = Фібо Наччі!


74

Фібоначчі + FizzBuzz = Фібо Наччі!


Ваше завдання - створити програму Fibo Nacci!

  • Програма 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

Каталог

Закуска Стек Сніппает в нижній частині цієї посади генерує каталог з відповідей а) у вигляді списку найкоротшого розчину на мову і б) в якості загальних лідерів.

Щоб переконатися, що ваша відповідь відображається, будь ласка, почніть свою відповідь із заголовка, використовуючи наступний шаблон Markdown:

## Language Name, N bytes

де Nрозмір вашого подання. Якщо ви покращите свій рахунок, ви можете зберегти старі бали у заголовку, прокресливши їх. Наприклад:

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

Якщо ви хочете включити у свій заголовок декілька чисел (наприклад, тому що ваш результат становить суму двох файлів або ви хочете окремо перерахувати штрафні санкції для перекладача), переконайтесь, що фактичний бал є останнім номером у заголовку:

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

Ви також можете зробити ім'я мови посиланням, яке з’явиться у фрагменті:

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


6
Що з мовами з найвищим цілим типом всього 64 біта? :( Чи не вистачає 90
фіб. Чисел

3
@Zereges У цьому питанні мені шкода. :(
Kritixi Lithos

28
Можливо, його слід назвати "Fizzo Nacci"
LegionMammal978

4
@SztupY Оскільки вихід у цьому питанні є абсолютно інваріантним, вам взагалі не потрібні цілі числа. Просто ставитесь до цього питання як до питання про складність колгомогоров (я навіть додав тег) і йдіть звідти.
Кріс Єстер-Янг

3
@ ChrisJester-Young це все-таки зайве обмеження, яке може змусити творчих реалізаторів уникнути цієї задачі. І більшість рішень (включаючи 2-е найбільш схвалене) вже порушуються
SztupY

Відповіді:


18

Pyth, 37 байт

Я перебираю цифри Фібоначчі замість того, щоб заздалегідь генерувати їх, оскільки це дійсно мало.

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

Спробуйте в Інтернеті.


Вітаємо за перемогу в цьому виклику! Мені сподобалось, що це рішення було швидко.
Kritixi Lithos

45

Python 2, 62 байти

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

Не сильно відрізняється від стандартного FizzBuzz, насправді.


1
Це дивно.
J Atkin

Мені потрібно запам’ятати цю петлеву конструкцію для мого наступного гольфу Рубі. Це дивно.
плескати

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.
Мего

@Mego я тебе не розумію. Як мені це допоможе обробити значення, які не вписуються в 64 біти. Також вам знадобляться всі цифри, щоб дізнатись, чи число ділиться на 3.
Зерегес

Рядки можуть бути довільно довгими (поки не закінчиться пам'ять). І ти маєш рацію, я зіпсував свій коментар. Тим не менш, ви можете обчислити цифрову суму, щоб визначити подільність на 3.
Мего

@Mego Впровадження додавання цих рядків вимагало б набагато більше зусиль.
Зереги

1
Ви могли б використовувати діалект gnu та використовувати __uint128_t, можливо.

14

C #, 175 171 152 145 байт

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

"за допомогою системи;" дасть ще -1 розмір.
olegz

1
Мені все-таки довелося префіксувати System.Numerics з System, незважаючи на використання: -S, тому я не впевнений, що використання буде працювати.
Jodrell

1
Ви можете зберегти 3 символи, замінивши ==0s >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
Ви можете зберегти ще 7 символів, перейшовши decimal a=1,b=1на, 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

Або з одним записом із послідовності в рядку (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
Wayne Werner

Просто використовуйте останній, оскільки це "еквівалент" виводу "на рядок". І це дійсно прекрасний фрагмент коду. Молодці!
Ісмаїл Мігель

@IsmaelMiguel Якщо це запускається в SQL * Plus (або іншому інтерфейсі командного рядка), після кожного ряду буде виводитися новий рядок (як частина того, як він повідомляє про вихід запиту). Однак це є функцією CLI, а не мовою SQL - щоб відповідати правилу, The program should output a new line (\n) after every entryя залишаю його як довший код, але коротший міг би бути сумісним (не покладаючись на CLI), додаючи ||CHR(13)перед фіналом FROMза 171 крок.
MT0

Ви не можете використовувати "\n"? Здається, працює над MySQL. (Запуск select length("\n")повертає 1, а біг select "\n"не повертається n, як і select "\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
@phase образно. Або це, або ти не придивишся занадто уважно. Або у вас крихітна кішка або гігантська клавіатура. Тому що цій кішці вдалося ввести Фібо і Начі, але в іншому випадку уникайте всіх літерних клавіш, крім одного r.
Іван Дворак

3
@JanDvorak Я думаю, що фаза має налаштування макросів для цього;)
Wayne Werner

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.*замість усієї справи. Використовуйте константи для ONEта ZEROзамість newBigIntegers. Видаліть publicз класу. Упакувати все , крім printlnзатвердження в forтілі всередині декларації петлі і т.д. Я рекомендую дивитися за поради гольф Java в цілому.
Геобіт

@Geobits Готово! "Шкода, що я був незнайомий з BigIntegerрізними методами гольфу.
Носок

Зберігання BigInteger.ZERO, використовуючи flipBit (...) як альтернативу новому BigInteger (...) та деякі інші незначні речі, ви можете 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);}}}ці зміни
зводять

2
Я думаю, ти маєш на увазіVerbose.isEqualTo(Java)
Кіос

7

Математика, 80 байт

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

Адаптація мого старшого рішення FizzBuzz.


1
@JacobAkkerboom Вибачте, виправлено. Також для версій менше 10,3 замініть Echoна Print.
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
Ви можете зберегти три байти за допомогою [b,f='Fibo',n='Nacci',f,b,f+n][~b%6], і ще два, видаливши дужки в 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, яка насправді її вбила :-(

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

Редагувати: до 320 байт завдяки LegionMammal978 за сукупну пропозицію і завдяки Cleg відповіді olegz для скорочення x% 6 для X% 2 && x% 3, а також використання потрійних операторів в одному операторі WriteLine.


4
Ви чули про функцію AggregateLINQ?
LegionMammal978

Замініть "суму" на "t", щоб голити 6 байт.
Ксантікс

3

Пітон 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]на b=a+b,a=b-a. Крім того, у абсолютно незв’язаній замітці мені подобається те, як ти дуже швидко відповідаєш у Stack Overflow hehe Приємного дня
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кінець до кінця, показуючи, що це довге число.

Якщо це проблема, ось рішення на 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 Atkin

+1 за exec <program_string>*nтрюк. Приємно!
жовтня

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

Рекурсивна функція, яка обчислює фібоначі, поміщає її в масив, потім виводить Fibo, Nacci або число і викликає себе для обчислення наступного до 100.

Він працює на 73 через точність чисельності javascript. Єдиний спосіб обійти це - додати власний обчислення бітів.


Це не працює, воно піде не так, 5527939700884757 + 8944394323791464 = 14472334024676220коли це повинно бути, 14472334024676221тому що JavaScript використовує 16-бітові плавки точності, і для цього потрібно 17 біт точності. Ви також повинні надрукувати 1двічі.
Джордж Рейт

Додано друк 1 двічі. Для точності мені потрібно змінити що-небудь над кодом, щоб він працював (не використовуючи Number, але Uint32Array і виконуючи обчислення бітами)
Naouak

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-м символом Фібоначчі, так що компенсується додатковий байт, який повинен бути там.

EDIT: Ніл врятував мене 3 байти: 141 байт.


Ви можете видалити перший, a$+оскільки в цьому моменті це порожній рядок.
Ніл

2

Мова Вольфрам, 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вважається 8.


Використання зразків

$ 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 байт

Збережено три байти з люб’язності Мітча Шварца .

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;)
прим

2

> <>, 128 119 байт

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

Я безсоромно викрав позичену існуючу програму FizzBuzz і змінив її, щоб вона працювала на послідовність Fibo Nacci. Він виводить числа назавжди. Тепер він фіксований, тобто видає лише 100 чисел. Спробуйте тут .


2
Ви повинні вивести лише перші 100 номерів Fibo Nacci, ні більше, ні менше.
Kritixi Lithos

@ ΚριτικσιΛίθος Нарешті я дістався, щоб зробити його лише 100 чисел.
DanTheMan

Це виводить 101 номер на TIO, але не працює на пов'язаному сайті
Jo King

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

Скільки часу потрібно для запуску фактичної програми?
Kritixi Lithos

Я поняття не маю, за 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 Lithos

@ ΚριτικσιΛίθος Це ліниво поєднує кілька послідовностей. У цьому випадку він об'єднує перші два елементи послідовності Фібоначчі ( [1 1]) з результатом підсумовування кожного елемента в послідовності Фібоначчі з наступним за ним елементом.
Сем Естеп

Я прав, здогадуючись, що це в основному версія Clojure fibs = 0 : 1 : zipWith (+) fibs (tail fibs)?
Soham Chowdhury

@SohamChowdhury Так, наскільки я можу сказати.
Сем Естеп


1

постійного струму, 100 89 79 байт

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

Натхненний http://c2.com/cgi/wiki?DeeCee


Ласкаво просимо до головоломки програмування та коду для гольфу!
Денніс

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; він голить кілька байтів.
Kritixi Lithos

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


Я здивований, що це працює
асибахі

1

PHP, 75 байт

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

Дивно конкурентні. Потрібна PHP v5.5 або вище. Я припускаю налаштування за замовчуванням, оскільки вони є без .ini (ви можете відключити локальний .ini за допомогою -nпараметра).


Використання зразків

$ php -n fibo-nacci.php

WIth -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.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.