Avez-vous appris votre fib-abc?


31

Je n'aime pas les chiffres, mais j'aime la séquence de Fibonacci. Je suis sûr que nous pourrions trouver quelque chose.

Veuillez lire un entier n de STDIN et sortir le n ème numéro de Fibonacci en base 26 ( abcdefghijklmnopqrstuvwxyzau lieu de 0123456789) vers STDOUT.

Le premier nombre de Fibonacci est égal à 0. Le second est 1. Le n ième nombre de Fibonacci est la somme des n -2e et n -1er nombres de Fibonacci.

32 premiers numéros 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

C'est le golf de code, donc le code le plus court en octets gagne!


3
@ l0b0 vous l'appeleriez toujours base 26 car le choix des caractères pour représenter les chiffres est entièrement arbitraire et les chiffres hexadécimaux communs ne sont qu'une convention.
Martin Ender

2
C'est toujours base26. Les caractères que vous utilisez sont arbitraires, et ici nous utilisons az (par ordre alphabétique).
Filip Haglund du

À droite, c'est une notation base-26 différente de la conventionnelle, mais c'est toujours une notation base-26.
Courses de légèreté avec Monica

5
Pourquoi utiliser ces chiffres désagréables pour l'entrée?
ugoren

Suggestion de nom: Fibona-bc
Matthew Roh

Réponses:


12

CJam, 18 octets

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

Essayez-le en ligne dans l' interprète CJam .

Comment ça marche

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

TeaScript est JavaScript pour le golf. Il apporte également des fonctionnalités ES2015 au navigateur moyen.

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

Essayez-le en ligne

Explication

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

* Cette réponse n'est pas concurrente


1
Belle version golf-y de JS! J'ai conçu ma propre version il y a environ un mois, mais je n'ai pas encore commencé d'interprète. Sans entrée intégrée ou implicite de Fibonacci, ce même programme aurait une longueur de 48 octets. Cependant , si je devais créer une entrée intégrée et ajouter une entrée implicite, ce serait 34. Peut-être devrais-je commencer à travailler sur un interpréteur. ;)
ETHproductions

Ooh, c'est beaucoup mieux. L'une des astuces de mon langage qui peut s'appliquer ici est de mettre toutes les variables en majuscules (y compris Math, Date, etc.) et toutes les méthodes en minuscules, ce qui supprime le besoin de points. Ce n'est qu'une suggestion; ce n'est peut-être pas la meilleure idée pour cette langue, mais je vous laisse décider. (J'adore le nom, BTW.)
ETHproductions

@ETHproductions idée intéressante. Je vais voir si je peux l'implémenter dans certains cas, mais pour l'instant, j'implémente la plupart des fonctionnalités via une méthode simple de remplacement, ce qui rend difficile l'implémentation de la sémantique plus complexe.
Downgoat

6

Mathematica, 67 61 octets

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

Calcule f(1000000)en environ 51 millisecondes.


Ah, je n'ai pas vu qu'il y avait déjà une réponse Mathematica! Mine utilisée IntegerStringpour formater les chiffres:IntegerString[Fibonacci@#~IntegerDigits~26+10,36]<>""&

Je l'ai effacé; en utilisant Input[]et Print[]pour une comparaison équitable, ma solution serait de 66 octets de long. Mais Alphabet[]c'est une fonctionnalité 10.1, donc j'ai pensé que je la laisserais comme un commentaire.

@ user5254 J'ai d'abord utilisé FromLetterNumberavant de voir qu'il était utilisé en interne Alphabetavec Partet utilisé, sauf avec une liste d'index.
LegionMammal978

5

Simplex v.0.6 , 35 octets

Parfois, je soupire et je pense: "Est-ce que cela vaut même la peine d'être soumis? Il ne gagne pas, alors pourquoi s'embêter?" En réponse, je pense, "Heck. C'était amusant. De plus, c'est vraiment un cerveau de fantaisie *** de toute façon. Pas trop minable."

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, et, en passant, la Wcommande interprète la base 26 comme l'alphabet minuscule, la base 52 comme l'alphabet supérieur et minuscule, et la base 64 est essentiellement une btoafonction JavaScripts .
Conor O'Brien


3

Minkolang 0.9 , 40 octets

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

Essayez ici.

Explication

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

Vraiment sympa! Fonctionne très bien pour d'énormes entrées!
Filip Haglund

3

Python 2.7, 82 octets

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 caractères.

Elle est étonnamment longue. Toute aide bienvenue. Auparavant trouvé un bogue pour 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

fest une liste infinie de fibonacci. toEnumest identique à chr, sauf que l'ancien n'a pas besoin d'importer Data.Char.


0

Rubis, 67 octets

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 octets

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

Rubis, 125 octets

Je ne gagnerai pas de sitôt, mais c'était amusant et mon premier golf de code: ')

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

La première ligne est une fonction pour calculer fibonacci, la seconde convertit de l'encodage de base 26 intégré de Ruby (0-9 puis ap) en encodage az, la troisième obtient une ligne de STDIN et la fait passer par les deux.


-1

Python 2, 112 octets

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

Essayez-le en ligne .


Cela semble être légèrement désactivé pour les grandes valeurs; premier débordement à 71. Voici pour fib (1337): diffchecker.com/bwjpg7bb où la bonne réponse se termine par "gagner".
Filip Haglund du

4
@FilipHaglund Un non-sens en virgule flottante probablement. Je reviens à la formule itérative.
Mego
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.