Hai imparato il tuo fib-abc?


31

Non mi piacciono i numeri, ma mi piace la sequenza di Fibonacci. Sono sicuro che potremmo risolvere qualcosa.

Si prega di leggere un intero n da STDIN e uscita del n -esimo numero di Fibonacci in base 26 ( abcdefghijklmnopqrstuvwxyzanziché 0123456789) per STDOUT.

Il primo numero di Fibonacci è 0. Il secondo è 1. Il n ° numero di fibonacci è la somma dei numeri n- 2 e n- 1 di Fibonacci.

Primi 32 numeri 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

Questo è il codice golf, quindi vince il codice più breve in byte!


3
@ l0b0 la chiameresti ancora base 26 perché la scelta dei caratteri per rappresentare le cifre è del tutto arbitraria e le cifre esadecimali comuni sono solo una convenzione.
Martin Ender,

2
È ancora base26. I personaggi che usi sono arbitrari e qui usiamo az (in ordine alfabetico).
Filip Haglund,

Bene, è una notazione base-26 diversa da quella convenzionale, ma è ancora una notazione base-26.
Lightness Races con Monica il

5
Perché usarli come numeri cattivi per l'input?
ugoren,

Suggerimento per il nome: Fibona-bc
Matthew Roh,

Risposte:


12

CJam, 18 byte

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

Provalo online nell'interprete CJam .

Come funziona

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

TeaScript è JavaScript per il golf. Porta anche le funzionalità ES2015 al browser medio.

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

Provalo online

Spiegazione

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

* Questa risposta è non competitiva


1
Bella versione golf-y di JS! Ho progettato la mia versione circa un mese fa, ma non ho ancora avviato un interprete. Senza un input incorporato o implicito di Fibonacci, questo stesso programma sarebbe lungo 48 byte. Tuttavia , se dovessi creare un built-in e aggiungere un input implicito, sarebbe 34. Forse dovrei iniziare a lavorare su un interprete. ;)
ETHproductions

Ooh, va molto meglio. Uno dei trucchi nella mia lingua che può essere applicato qui è rendere tutte le variabili in maiuscolo (inclusi matematica, data, ecc.) E tutti i metodi in minuscolo, il che elimina la necessità di punti. Questo è solo un suggerimento; potrebbe non essere la migliore idea per questa lingua, ma ti lascerò decidere. (Adoro il nome, BTW.)
ETHproductions

@ETHproductions idea interessante. Vedrò se riesco a implementarlo per alcuni casi, ma per ora sto implementando la maggior parte delle funzionalità attraverso un semplice metodo di ricerca e sostituzione, rendendo difficile implementare la semantica più complessa.
Downgoat,

6

Mathematica, 67 61 byte

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

Calcola f(1000000)in circa 51 millisecondi.


Ah, non ho visto che c'era già una risposta a Mathematica! Il mio usato IntegerStringper formattare le cifre:IntegerString[Fibonacci@#~IntegerDigits~26+10,36]<>""&

L'ho cancellato; usando Input[]e Print[]per un giusto confronto, la mia soluzione sarebbe lunga 66 byte. Ma Alphabet[]è una funzione 10.1, quindi ho pensato di lasciarlo come commento.

@ user5254 ho usato FromLetterNumberprima di vedere che esso utilizzato internamente Alphabetcon Parte usato che, se non con una lista di indici.
LegionMammal978,

5

Simplex v.0.6 , 35 byte

A volte sospiro e penso: "Vale la pena presentare anche questo? Non vince, quindi perché preoccuparsi?" In risposta, penso: "Diamine. È stato divertente. Inoltre, questo è un vero e proprio cervello stravagante comunque. Non troppo malandato."

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, e, a parte, il Wcomando interpreta la base 26 come l'alfabeto minuscolo, la base 52 come l'alfabeto superiore e minuscolo e la base 64 è essenzialmente la btoafunzione JavaScripts .
Conor O'Brien,


3

Minkolang 0.9 , 40 byte

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

Provalo qui.

Spiegazione

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

Veramente bello! Funziona alla grande per input enormi!
Filip Haglund,

3

Python 2.7, 82 byte

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

È inaspettatamente lungo. Qualsiasi aiuto benvenuto. Precedentemente trovato un bug per 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è una lista infinita di fibonacci. toEnumè lo stesso chr, tranne per il fatto che il primo non ha bisogno di importare Data.Char.


0

Rubino, 67 byte

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 byte

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

Rubino, 125 byte

Non vincerò presto, ma è stato divertente e il mio primo codice 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))

La prima riga è una funzione per calcolare i fibonacci, la seconda converte dalla codifica base 26 di Ruby (0-9 poi ap) in codifica az, la terza ottiene una riga da STDIN e la esegue attraverso entrambe.


-1

Python 2, 112 byte

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

Provalo online .


Questo sembra essere leggermente fuori per valori di grandi dimensioni; primo overflow a 71. Ecco per fib (1337): diffchecker.com/bwjpg7bb dove la risposta corretta termina con "win".
Filip Haglund,

4
@FilipHaglund Probabilmente senza senso in virgola mobile. Tornerò alla formula iterativa.
Mego
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.