Hast du dein Fib-ABC gelernt?


31

Ich mag keine Zahlen, aber ich mag die Fibonacci-Sequenz. Ich bin sicher, wir könnten etwas ausarbeiten.

Bitte lesen Sie eine ganze Zahl n aus STDIN und geben Sie die n- te Fibonacci-Zahl in Basis 26 ( abcdefghijklmnopqrstuvwxyzanstelle von 0123456789) an STDOUT aus.

Die erste Fibonacci-Zahl ist 0. Die zweite ist 1. Die n- te Fibonacci-Zahl ist die Summe der n- 2ten und n- 1ten Fibonacci-Zahlen.

Erste 32 Fib-ABC-Nummern:

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

Das ist Code Golf, also gewinnt der kürzeste Code in Bytes!


3
@ l0b0 Sie würden es immer noch Basis 26 nennen, da die Auswahl der Zeichen zur Darstellung der Ziffern völlig willkürlich ist und die üblichen hexadezimalen Ziffern nur eine Konvention sind.
Martin Ender

2
Es ist immer noch base26. Welche Zeichen Sie verwenden, ist willkürlich und hier verwenden wir az (in alphabetischer Reihenfolge).
Filip Haglund

Richtig, es ist eine andere Basis-26-Notation als konventionell, aber es ist immer noch eine Basis-26-Notation.
Leichtigkeit Rennen mit Monica

5
Warum sollte man sie für die Eingabe verwenden?
Ugoren

Namensvorschlag: Fibona-bc
Matthew Roh

Antworten:


12

CJam, 18 Bytes

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

Probieren Sie es online im CJam-Interpreter aus .

Wie es funktioniert

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

TeaScript ist JavaScript zum Golfen. Es bringt auch ES2015-Funktionen zum durchschnittlichen Browser.

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

Probieren Sie es online aus

Erläuterung

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

* Diese Antwort ist nicht konkurrierend


1
Schöne Golf-Version von JS! Ich habe meine eigene Version vor ungefähr einem Monat entworfen, aber noch keinen Dolmetscher gestartet. Ohne eine eingebaute oder implizite Fibonacci-Eingabe wäre dasselbe Programm 48 Byte lang. Allerdings , wenn ich eine eingebaute und fügen implizite Eingabe erstellen, würde es sein 34. Vielleicht soll ich die Arbeit an einem Dolmetscher starten. ;)
ETHproductions

Oh, das ist viel besser. Einer der Tricks in meiner Sprache, die hier angewendet werden können, besteht darin, alle Variablen in Großbuchstaben (einschließlich Mathematik, Datum usw.) und alle Methoden in Kleinbuchstaben zu schreiben, sodass keine Punkte erforderlich sind. Dies ist nur ein Vorschlag. Es ist vielleicht nicht die beste Idee für diese Sprache, aber ich lasse Sie entscheiden. (
Ich

@ETHproductions interessante Idee. Ich werde sehen, ob ich es in einigen Fällen implementieren kann, aber ab sofort implementiere ich die meisten Funktionen über eine einfache Find-Replace-Methode, wodurch es schwierig wird, die komplexere Semantik zu implementieren.
Downgoat

6

Mathematica, 67 61 Bytes

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

Berechnet f(1000000)in ca. 51 Millisekunden.


Ah, ich habe nicht gesehen, dass es bereits eine Mathematica-Antwort gibt! Meine verwendet, IntegerStringum die Ziffern zu formatieren:IntegerString[Fibonacci@#~IntegerDigits~26+10,36]<>""&

Ich habe es gelöscht; Unter Verwendung von Input[]und Print[]für einen fairen Vergleich wäre meine Lösung 66 Bytes lang. Da Alphabet[]es sich aber um eine 10.1-Funktion handelt, dachte ich, ich lasse es als Kommentar.

@ user5254 Ich habe zuerst verwendet, FromLetterNumberbevor ich gesehen habe, dass es intern Alphabetmit Partund verwendet wird, außer mit einer Liste von Indizes.
LegionMammal978

5

Simplex v.0.6 , 35 Bytes

Manchmal seufze ich und denke: "Lohnt es sich überhaupt, dies einzureichen? Es gewinnt nicht. Warum also?" Als Antwort denke ich: "Mist. Es hat Spaß gemacht. Außerdem ist das sowieso ein ausgefallener Geistesblitz. Nicht zu schäbig."

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

Abgesehen davon Winterpretiert der Befehl die Basis 26 als Kleinbuchstaben, die Basis 52 als Groß- und Kleinbuchstaben und die Basis 64 ist im Wesentlichen eine JavaScripts- btoaFunktion.
Conor O'Brien


3

Minkolang 0,9 , 40 Bytes

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

Probieren Sie es hier aus.

Erläuterung

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

Wirklich nett! Funktioniert hervorragend für große Eingaben!
Filip Haglund

3

Python 2.7, 82 Bytes

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

Es ist unerwartet lang. Jede Hilfe willkommen. Zuvor einen Bug für fib gefunden (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

fist eine unendliche Liste von Fibonacci. toEnumist dasselbe mit chr, außer dass erstere Data.Char nicht importieren muss.


0

Ruby, 67 Bytes

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 Bytes

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 Bytes

Ich werde in Kürze nicht gewinnen, aber es hat Spaß gemacht und mein erster Code 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))

Die erste Zeile ist eine Funktion zum Berechnen von Fibonacci, die zweite konvertiert die in Ruby integrierte Base-26-Codierung (0-9, dann ap) in eine z-Codierung, die dritte ruft eine Zeile von STDIN ab und durchläuft beide.


-1

Python 2, 112 Bytes

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

Probieren Sie es online aus .


Dies scheint bei großen Werten etwas anders zu sein. erster Überlauf bei 71. Hier für fib (1337): diffchecker.com/bwjpg7bb, wo die richtige Antwort mit "win" endet.
Filip Haglund

4
@FilipHaglund Wahrscheinlich Fließkomma-Quatsch. Ich werde auf die iterative Formel zurückkommen.
Mego
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.