Ви дізналися свій fib-abc?


31

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

Будь ласка, прочитайте одне ціле число n від STDIN та виведіть n- го числа Фібоначчі в базі 26 ( abcdefghijklmnopqrstuvwxyzзамість 0123456789) до STDOUT.

Перше число Фібоначчі дорівнює 0. Друге - 1. число n- го рівня - це сума n- 2-го і n- го числа Фібоначчі.

Перші 32 номери fib-abc:

fib(0) = a
fib(1) = b
fib(2) = b
fib(3) = c
fib(4) = d
fib(5) = f
fib(6) = i
fib(7) = n
fib(8) = v
fib(9) = bi
fib(10) = cd
fib(11) = dl
fib(12) = fo
fib(13) = iz
fib(14) = on
fib(15) = xm
fib(16) = blz
fib(17) = cjl
fib(18) = dvk
fib(19) = gev
fib(20) = kaf
fib(21) = qfa
fib(22) = baff
fib(23) = bqkf
fib(24) = cqpk
fib(25) = egzp
fib(26) = gxoz
fib(27) = leoo
fib(28) = scdn
fib(29) = bdgsb
fib(30) = bvivo
fib(31) = cypnp

Це код гольфу, тому найкоротший код у байтах виграє!


3
@ l0b0 ви все ще називатимете її базовою 26, оскільки вибір символів для представлення цифр повністю довільний, а загальні шістнадцяткові цифри - лише умова.
Мартін Ендер

2
Це все ще база26. Які символи ви використовуєте довільно, і тут ми використовуємо az (в алфавітному порядку).
Філіп Хаглунд

Правильно, це відмінні позначення бази-26 від звичайних, але це все-таки позначення бази-26.
Гонки легкості з Монікою

5
Навіщо використовувати їх неприємні цифри для введення?
угорен

Пропозиція щодо імені: Fibona-bc
Matthew Roh

Відповіді:


12

CJam, 18 байт

UXri{_@+}*;26b'af+

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

Як це працює

UX    e# Push 0 and 1.
ri{   e# Read an integer and execute the loop that many times.
  _   e#   Push a copy the topmost integer.
  @   e#   Rotate the bottom-most integer on top of the stack.
  +   e#   Pop the two topmost integers and push their sum.
}*    e#
;     e# Discard the topmost integer from the stack.
26b   e# Convert the remaining integer to base 26.
'af+  e# Add the character 'a' to each base-26 digit.

8

TeaScript , 34 байти 37 51 54

TeaScript - це JavaScript для гольфу. Він також приносить функції ES2015 середньому браузеру.

F(x)b(26)l(#C(lc()+(l<'a'?49:10)))

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

Пояснення

          // x is the input
F(x)      // Fibonacci from input
.b(26)    // To Base-26 string but with 0-9, a-p
          // instead of a-z, to fix this...
.l(#      // Loops through each char
   C(          // Charcode from...
       l.c()+  // Charcode from char
       (l<'a'? // If number
           49  // Add 49 to char code
          :10  // Else add 10
       )
   )
)

* Ця відповідь є неконкурентною


1
Гарна гольф-версія JS! Я створив власну версію близько місяця тому, але ще не запустив перекладача. Без вбудованого або неявного введення Фібоначчі ця сама програма мала б 48 байт. Однак , якби я створив вбудований і додавав неявне введення, це було б 34. Можливо, я повинен почати роботу над перекладачем. ;)
ETHproductions

О, це набагато краще. Один із прийомів моєї мови, який може бути застосований тут, - це зробити всі змінні великими літерами (включаючи математику, дату тощо) і всі методи малі, що знімає потребу в періодах. Це лише пропозиція; це може бути не найкращою ідеєю для цієї мови, але я дозволю вам визначитися. (Любіть ім'я,
Дорога

@ETHproductions цікава ідея. Я побачу, чи можу я реалізувати його для деяких випадків, але на сьогоднішній день я реалізую більшість функцій за допомогою простого методу пошуку-заміни, що ускладнює реалізацію більш складної семантики.
Downgoat

6

Математика, 67 61 байт

Print[""<>Alphabet[][[Fibonacci@Input[]~IntegerDigits~26+1]]]

Обчислює f(1000000)приблизно 51 мілісекунд.


Ах, не бачив, що вже була відповідь Mathematica! Шахта використовується IntegerStringдля форматування цифр:IntegerString[Fibonacci@#~IntegerDigits~26+10,36]<>""&

Я її видалив; використовуючи Input[]і Print[]для справедливого порівняння, моє рішення складе 66 байт. Але Alphabet[]це 10.1 особливість, тому я подумав, що залишу це як коментар.

@ user5254 Я вперше використав, FromLetterNumberперш ніж побачив, що він використовував внутрішньо Alphabetз, Partі використовував це, за винятком переліку індексів.
LegionMammal978

5

Simplex v.0.6 , 35 байт

Іноді я зітхаю і думаю: "Це навіть варто подати? Це не виграє, то чому б це турбувати?" У відповідь, я думаю, "Чорт. Це було весело. До того ж, це все-таки придумується мозком *** Так чи інакше. Не надто пошарпаним".

5_*Ij1~SRpRi@T[Uj&ERp]pSR5_Vj26@pWo
5_                                  ~~ sqrt(5)
  *                                 ~~ copy to next byte, move right
   I                                ~~ increment [sqrt(5),sqrt(5)+1]
    j1                              ~~ insert a new cell and set it to one 
                                    ~~ [sqrt(5),1,sqrt(5)+1]
      ~                             ~~ switch the previous with the current byte
                                    ~~ [1,sqrt(5),sqrt(5)+1]
       S                            ~~ perform subtraction [1-sqrt(5),0,sqrt(5)+1]
        Rp                          ~~ remove next cell [1-sqrt(5),sqrt(5)+1]
          Ri@                       ~~ take numeric input (n) into register
             T[      ]              ~~ applies the following to every cell
               U                    ~~ halves the current cell
                j&                  ~~ dumps and restores the value to the register
                  ERp               ~~ raises cell to the nth power, remove cell made
                      p             ~~ remove last cell
                       S            ~~ subtract the two values
                        R5_         ~~ goes right and sets sqrt(5)
                           V        ~~ divides the prev. two cells
                            j       ~~ inserts new cell
                             26@    ~~ puts 26 into the register
                                p   ~~ removes cell
                                 Wo ~~ converts the current to base 26 and outputs as number

О, і, вбік, Wкоманда інтерпретує базу 26 як алфавіт з малих літер, основу 52 як верхній і малий алфавіт, а база 64 - це по суті btoaфункція JavaScripts .
Conor O'Brien


3

Міньколанг 0,9 , 40 байт

10n[0c+r]$x'26'r(d0c%1G0c:d$)xrx("a"+O).

Спробуйте тут.

Пояснення

10n[0c+r]                                   Calculates f(n) where n is taken from input
         $x'26'r                            Dumps the addend I don't need and pushes a 26
                (d0c%1G0c:d$)               Base-encodes f(n) in base 26
                             xrx            Dumps the 0, reverses, dumps the 26
                                ("a"+O).    Outputs the letters

Дійсно приємно! Чудово підходить для величезних входів!
Філіп Хаглунд

3

Python 2.7, 82 байти

a=0
b=1
s=''
exec"a,b=b,a+b;"*input()
while a:s=chr(a%26+97)+s;a/=26
print s or'a'

1

Хаскелл, 114 годин.

Це несподівано довго. Будь-яка допомога, ласкаво просимо. Раніше знайшла помилку для fib (0)

f=scanl(+)0$1:f
k 0=[]
k x=k(x`div`26)++[toEnum$97+x`mod`26]
l 0=0
l x=k x
main=interact$l.(f!!).read.head.lines

fявляє собою нескінченний перелік Фібаначы. toEnumте ж саме chr, за винятком того, що колишньому не потрібно імпортувати Data.Char.



0

Матлаб, 133 байт

n=input('');if n<2,y=n;else
f=0;g=1;for k=2:n
h=f+g;f=g;g=h;end
y=fix(mod(g./26.^(fix(log(g)/log(26)):-1:0),26));end
disp(char(y+97))

0

Рубін, 125 байт

Не скоро виграю, але це було весело і мій перший гольф-код: ')

def f(n);n<3?(n>0?1:0):f(n-1)+f(n-2);end
def a(s);s.bytes.map{|n|n<58?n+49:n+10}.pack("C*");end
puts a(f(gets.to_i).to_s(26))

Перший рядок - це функція для обчислення поля, другий перетворює з вбудованої базової кодування 26 Ruby (0-9, потім ap) у az-кодування, третій отримує рядок від STDIN і запускає його через обидва.


-1

Python 2, 112 байт

n=input()
if n<1:print'a';exit()
a,f=0,1
while n>1:a,f,n=f,a+f,n-1
r=''
while f:r,f=chr(f%26+97)+r,f//26
print r

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


Для великих значень це здається злегка відключеним; перший перелив на 71. Ось для fib (1337): diffchecker.com/bwjpg7bb, де правильна відповідь закінчується на "win".
Філіп Хаглунд

4
@FilipHaglund Ймовірно, дурниця з плаваючою точкою. Я повернусь до ітеративної формули.
Mego
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.