fib-abcを学習しましたか?


31

数字は好きではありませんが、フィボナッチ数列は好きです。何か解決できると確信しています。

STDINから1つの整数nを読み取り、ベース26のn番目のフィボナッチ数(のabcdefghijklmnopqrstuvwxyz代わりに0123456789)をSTDOUTに出力してください。

最初のフィボナッチ数は0です。2 番目のフィボナッチ数は1です。n番目のフィボナッチ数は、n -2 番目とn -1 番目のフィボナッチ数の合計です。

最初の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でも、数字を表す文字の選択は完全に任意であり、一般的な16進数は単なる慣習であるため、これをベース26と呼びます。
マーティンエンダー

2
まだbase26です。使用する文字は任意であり、ここではaz(アルファベット順)を使用します。
フィリップハグランド

右、それは従来とは異なるbase-26表記ですが、まだbase-26表記です。
モニカとの軽さレース

5
なぜ入力に厄介な数字を使用するのですか?
-ugoren

名前の提案:Fibona-BC
マタイ盧

回答:


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の素敵なゴルフバージョン!約1か月前に独自のバージョンを設計しましたが、まだ通訳を開始していません。フィボナッチ組み込みまたは暗黙的な入力がなければ、この同じプログラムは48バイト長になります。ただし、組み込みを作成して暗黙的な入力を追加する場合、34になります。おそらくインタープリターで作業を開始する必要があります。;)
ETHproductions

ああ、それはずっと良い。ここで適用できる私の言語のトリックの1つは、すべての変数を大文字(Math、Dateなどを含む)およびすべてのメソッドを小文字にすることです。これにより、ピリオドが不要になります。これは単なる提案です。それはこの言語にとって最良のアイデアではないかもしれませんが、あなたに決めさせてあげましょう。(名前を愛して、BTW。)
ETHproductions

@ETHproductionsの面白いアイデア。場合によっては実装できるかどうかを確認しますが、現時点では、ほとんどの機能を単純なfind-replaceメソッドで実装しているため、より複雑なセマンティクスを実装することは困難です。
ダウンゴート

6

Mathematica、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内部で使用AlphabetPart、それを使用することを確認する前に、最初に使用しました。
LegionMammal978

5

シンプレックス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をJavaScript btoa関数として解釈します。
コナーオブライエン



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

Haskell、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フィボナッチの無限リストです。toEnumchr、前者がData.Charをインポートする必要がないことを除いて、と同じです。


0

ルビー、67バイト

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

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

1行目はフィボナッチを計算する関数で、2行目はRubyの組み込みのベース26エンコード(0-9、ap)からzエンコードに変換し、3行目は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おそらく浮動小数点ナンセンス。反復式に戻ります。
メゴ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.