Fib-abc'nizi öğrendiniz mi?


31

Rakamları sevmiyorum, ama Fibonacci dizisini seviyorum. Eminim bir şeyler çözebiliriz.

Bir tam sayı okuyunuz n STDIN'den ve çıkış n taban 26 (Fibonacci sayısı inci abcdefghijklmnopqrstuvwxyzyerine 0123456789STDOUT).

Birinci Fibonacci sayı ikinci 1. 0'dır N inci Fibonacci sayısı toplamı n ATM'leri -2 ve n Fibonacci sayıları -1st.

İlk 32 fib-abc numarası:

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

Bu kod golf, bayt cinsinden en kısa kod kazanır!


3
@ 10b0, üsse 26 olarak adlandırılır, çünkü rakamları temsil edecek karakter seçimi tamamen keyfidir ve onaltılık rakamların tamamı bir kuraldır.
Martin Ender 24/15

2
Hala üs2. Hangi karakterleri kullandığınızı keyfi ve burada az kullanıyoruz (alfabetik sırayla).
Filip Haglund

Doğru, konvansiyonel olandan farklı bir taban-26 notasyonu, fakat yine de bir taban-26 notasyonu.
Monica ile Hafiflik Yarışları

5
Neden giriş için kötü numaralar kullanıyorsunuz?
ugoren

İsim önerisi: Fibona-bc
Matthew Roh

Yanıtlar:


12

CJam, 18 bayt

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

CJam tercümanında çevrimiçi olarak deneyin .

Nasıl çalışır

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 bayt 37 51 54

TeaScript, golf oynamak için JavaScript'tir. Ayrıca, ES2015 özelliklerini ortalama bir tarayıcıya getirir.

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

Çevrimiçi deneyin

açıklama

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

* Bu cevap rakip değildir


1
JS güzel golf-y versiyonu! Yaklaşık bir ay önce kendi versiyonumu tasarladım, ancak henüz bir tercüman kullanmadım. Bir Fibonacci yerleşik veya örtük girişi olmadan, bu aynı program 48 bayt uzunluğunda olurdu. Bununla birlikte , eğer bir yerleşik oluşturup örtük girdi eklersem, 34 olur. Belki de tercüman üzerinde çalışmaya başlamalıyım. ;)
ETHProductions

Ooh, bu çok daha iyi. Burada uygulayabileceğim püf noktalardan biri de tüm değişkenleri büyük harf (Matematik, Tarih vb.) Ve tüm yöntemleri küçük harf yapmaktır; Bu sadece bir öneri; bu dil için en iyi fikir olmayabilir, ama karar vermene izin vereceğim. (BTW adını seviyorum.)
ETHproductions

@ETHproductions ilginç bir fikir. Bazı durumlar için uygulayabilip uygulayamayacağımı göreceğim, ancak şu an itibariyle, çoğu özelliği basit bir bulma-değiştirme yöntemiyle uyguluyorum, bu da daha karmaşık semantikleri uygulamayı zorlaştırıyor.
Downgoat

6

Mathematica, 67 61 bayt

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

f(1000000)Yaklaşık 51 milisaniyede hesaplar .


Ah, daha önce bir Mathematica cevabı olduğunu görmedim! Mine kullanılan IntegerString: basamak biçimlendirmek içinIntegerString[Fibonacci@#~IntegerDigits~26+10,36]<>""&

Ben onu sildim; kullanarak Input[]ve Print[]adil bir karşılaştırma için, benim çözüm uzun 66 byte olacaktır. Ama Alphabet[]10.1 özelliği, bu yüzden yorum olarak bırakacağımı düşündüm.

@ user5254 İlk kullanılan FromLetterNumberdahili olarak kullanılan görmeden önce Alphabetsahip Partendeksleri listesiyle hariç ve bu kullandı.
LegionMammal978

5

Simplex v.0.6 , 35 bayt

Bazen iç çeker ve düşünüyorum, "Bu bile göndermeye değer mi? Kazanmıyor, neden rahatsız ediyor?" Buna cevaben, "Heck. Eğlenceliydi. Bunun yanında, bu gerçekten hayal kırıklığına uğramış bir beyin.

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

Oh, ve, bir kenara, Wkomut , taban 26'yı küçük harfli alfabe, taban 52, büyük ve küçük harf alfabe olarak yorumlar ve taban 64, esasen JavaScripts btoaişlevidir.
Conor O'Brien,

4

Pyth, 17 bayt

s@LGjhu,eGsGQU2lG

Çevrimiçi deneyin .


Awesome, bunun çalıştığını doğrulayabilirim
Hack-R

3

Minkolang 0.9 , 40 bayt

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

Burada dene.

açıklama

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

Gerçekten hoş! Büyük girdiler için harika çalışıyor!
Filip Haglund

3

Python 2.7, 82 bayt

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

Haskell, 114 karakter.

Beklenmedik bir şekilde uzun. Herhangi bir yardım hoş geldiniz. Daha önce fib için bir hata buldum (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

ffibonacci'nin sonsuz listesidir. toEnumile aynıdır chr, ancak eskisinin Data.Char'ı içe aktarmasına gerek yoktur.


0

Ruby, 67 bayt

a,b=0,1
gets.to_i.times{a,b=b,a+b}
puts a.to_s(26).tr"0-9a-p","a-z"

0

Matlab, 133 bayt

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

Ruby, 125 bayt

Yakında hiçbir zaman kazanmayacağım, ama eğlenceliydi ve ilk kod golf: ')

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

İlk satır fibonacci hesaplamak için bir fonksiyondur, ikincisi Ruby'nin yerleşik taban 26 kodlamasını (0-9 sonra ap) az kodlamaya dönüştürür, üçüncü satır STDIN'den bir satır alır ve her ikisini de yürütür.


-1

Python 2, 112 bayt

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

Çevrimiçi deneyin .


Bu büyük değerler için biraz kapalı görünüyor; ilk önce 71'de taşma. İşte fib (1337) için: diffchecker.com/bwjpg7bb burada doğru cevap "win" ile bitiyor.
Filip Haglund

4
@FilipHaglund Muhtemelen kayan nokta saçma. Yinelemeli formüle geri döneceğim.
Mego
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.