Bạn đã học được abc xơ của bạn?


31

Tôi không thích các con số, nhưng tôi thích chuỗi Fibonacci. Tôi chắc rằng chúng ta có thể làm việc gì đó.

Vui lòng đọc một số nguyên n từ STDIN và xuất số Fibonacci thứ n trong cơ sở 26 ( abcdefghijklmnopqrstuvwxyzthay vì 0123456789) sang STDOUT.

Các số Fibonacci đầu tiên là 0. Điều thứ hai là 1. n th số fibonacci là tổng của n -2nd và n -1st số Fibonacci.

32 số sợi abc đầu tiên:

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

Đây là mã golf, vì vậy mã ngắn nhất trong byte thắng!


3
@ l0b0 bạn vẫn gọi nó là cơ sở 26 vì việc lựa chọn các ký tự để biểu thị các chữ số là hoàn toàn tùy ý và các chữ số thập lục phân phổ biến chỉ là quy ước.
Martin Ender

2
Nó vẫn là cơ sở26. Những ký tự bạn sử dụng là tùy ý, và ở đây chúng tôi sử dụng az (theo thứ tự bảng chữ cái).
Filip Haglund

Phải, đó là một ký hiệu cơ sở 26 khác với thông thường, nhưng nó vẫn là ký hiệu cơ sở 26.
Cuộc đua nhẹ nhàng với Monica

5
Tại sao sử dụng chúng số khó chịu cho đầu vào?
ugoren

Tên gợi ý: Fibona-bc
Matthew Roh

Câu trả lời:


12

CJam, 18 byte

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

Hãy thử trực tuyến trong trình thông dịch CJam .

Làm thế nào nó hoạt động

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 là JavaScript để chơi gôn. Nó cũng mang các tính năng ES2015 cho trình duyệt trung bình.

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

Dùng thử trực tuyến

Giải trình

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

* Câu trả lời này là không cạnh tranh


1
Phiên bản golf-y tuyệt vời của JS! Tôi đã thiết kế phiên bản của riêng mình khoảng một tháng trước, nhưng chưa bắt đầu phiên dịch. Nếu không có đầu vào được tích hợp sẵn hoặc ẩn, thì chương trình tương tự này sẽ dài 48 byte. Tuy nhiên , nếu tôi tạo một tích hợp sẵn và thêm đầu vào ẩn, thì đó là 34. Có lẽ tôi nên bắt đầu làm việc với một trình thông dịch. ;)
Sản phẩm điện tử

Ồ, tốt hơn nhiều rồi. Một trong những thủ thuật trong ngôn ngữ của tôi có thể áp dụng ở đây là làm cho tất cả các biến chữ hoa (bao gồm cả Toán, Ngày, v.v.) và tất cả các phương thức viết thường, loại bỏ sự cần thiết của các dấu chấm. Đây chỉ là một gợi ý; nó có thể không phải là ý tưởng tốt nhất cho ngôn ngữ này, nhưng tôi sẽ để bạn quyết định. (Yêu tên, BTW.)
ETHproductions

@ETHproductions ý tưởng thú vị. Tôi sẽ xem liệu tôi có thể triển khai nó trong một số trường hợp hay không, nhưng hiện tại, tôi đang triển khai hầu hết các tính năng thông qua phương pháp tìm kiếm thay thế đơn giản, khiến việc triển khai ngữ nghĩa phức tạp trở nên khó khăn hơn.
Hạ cấp

6

Toán học, 67 61 byte

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

Tính f(1000000)trong khoảng 51 mili giây.


À, không thấy rằng đã có câu trả lời Mathicala rồi! Của tôi được sử dụng IntegerStringđể định dạng các chữ số:IntegerString[Fibonacci@#~IntegerDigits~26+10,36]<>""&

Tôi đã xóa nó; sử dụng Input[]Print[]để so sánh công bằng, giải pháp của tôi sẽ dài 66 byte. Nhưng Alphabet[]là một tính năng 10.1, vì vậy tôi nghĩ tôi sẽ để nó như một bình luận.

@ user5254 tôi lần đầu tiên sử dụng FromLetterNumbertrước khi nhìn thấy nó trong nội bộ sử dụng Alphabetvới Partvà sử dụng rằng, ngoại trừ với một danh sách các chỉ số.
LegionMammal978

5

Simplex v.0.6 , 35 byte

Đôi khi tôi thở dài và nghĩ, "Điều này thậm chí có đáng để nộp không? Nó không thắng, vậy tại sao phải bận tâm?" Để đáp lại, tôi nghĩ, "Heck. Thật là vui. Bên cạnh đó, đây thực sự là một trò chơi trí tuệ *** dù sao đi nữa. Không quá tồi tàn."

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

Ồ, và, như một bên, Wlệnh diễn giải cơ sở 26 là bảng chữ cái chữ thường, cơ sở 52 là bảng chữ cái viết hoa và viết thường và cơ sở 64 về cơ bản là btoachức năng JavaScripts .
Conor O'Brien

4

Bình thường, 17 byte

s@LGjhu,eGsGQU2lG

Hãy thử trực tuyến.


Thật tuyệt vời, tôi có thể xác minh rằng nó hoạt động
Hack-R

3

Chồn 0,9 , 40 byte

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

Hãy thử nó ở đây.

Giải trình

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

Thực sự tốt đẹp! Hoạt động tuyệt vời cho đầu vào lớn!
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 ký tự.

Nó dài bất ngờ. Bất kỳ trợ giúp chào mừng. Trước đây đã tìm thấy một lỗi cho sợi (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

flà danh sách vô hạn của Dailymotion. toEnumtương tự với chr, ngoại trừ việc trước đây không cần nhập Data.Char.


0

Ruby, 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

Ruby, 125 byte

Sẽ không giành được bất cứ lúc nào sớm, nhưng đó là niềm vui & môn đánh gôn đầu tiên của tôi: ')

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

Dòng đầu tiên là một chức năng để tính toán Wikipedia, thứ hai chuyển đổi từ mã hóa cơ sở 26 tích hợp của Ruby (0-9 rồi ap) thành mã hóa az, thứ ba nhận được một dòng từ STDIN và chạy nó qua cả hai.


-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

Hãy thử trực tuyến .


Điều này dường như là hơi tắt cho các giá trị lớn; tràn đầu tiên ở 71. Đây là cho (1337): diffchecker.com/bwjpg7bb trong đó câu trả lời đúng kết thúc bằng "win".
Filip Haglund

4
@FilipHaglund Có lẽ là điểm vô nghĩa. Tôi sẽ trở lại công thức lặp.
Mego
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.