คุณได้เรียนรู้ Fib-abc ของคุณหรือไม่?


31

ฉันไม่ชอบตัวเลข แต่ฉันชอบลำดับฟีโบนักชี ฉันแน่ใจว่าเราสามารถทำอะไรบางอย่างออกมา

โปรดอ่านหนึ่งจำนวนเต็มnจาก STDIN และส่งออกหมายเลขnฟีโบนักชีในฐาน 26 ( abcdefghijklmnopqrstuvwxyzแทน0123456789) ไปยัง STDOUT

จำนวน Fibonacci แรกเป็น 0 ที่สองคือ 1. nจำนวน fibonacci TH คือผลรวมของn -2nd และn -1st ตัวเลขฟีโบนักชี

ตัวเลข 32-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 คุณจะยังคงเรียกมันว่าฐาน 26 เพราะการเลือกตัวละครเพื่อแสดงตัวเลขนั้นเป็นเรื่องโดยพลการและเลขฐานสิบหกทั่วไปเป็นเพียงการประชุม
Martin Ender

2
มันยังคงเป็นฐาน 26 ตัวละครที่คุณใช้คืออะไรและเราใช้ az (ตามลำดับตัวอักษร) ที่นี่
Filip Haglund

ใช่มันเป็นสัญกรณ์ฐาน -26 ที่แตกต่างจากแบบดั้งเดิม แต่ก็ยังเป็นสัญกรณ์พื้นฐานที่ 26
การแข่งขัน Lightness กับโมนิก้า

5
เหตุใดจึงใช้ตัวเลขที่น่ารังเกียจสำหรับอินพุต
ugoren

คำแนะนำชื่อ: Fibona-bc
Matthew Roh

คำตอบ:


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
ดีรุ่นกอล์ฟ -y ของ JS! ฉันออกแบบเวอร์ชันของตัวเองเมื่อประมาณหนึ่งเดือนที่แล้ว แต่ยังไม่ได้เริ่มล่าม หากไม่มีอินพุต Fibonacci ในตัวหรือโดยนัยโปรแกรมเดียวกันนี้จะมีความยาว 48 ไบต์ อย่างไรก็ตามถ้าฉันสร้าง built-in และเพิ่ม input implicit, ก็น่าจะเป็น 34. บางทีฉันควรเริ่มทำงานกับล่าม ;)
ETHproductions

โอ้ดีกว่าเยอะมาก หนึ่งในเทคนิคในภาษาของฉันที่อาจนำไปใช้ที่นี่คือการทำให้ตัวแปรทั้งหมดเป็นตัวพิมพ์ใหญ่ (รวมถึงคณิตศาสตร์, วันที่, ฯลฯ ) และวิธีการที่เป็นตัวพิมพ์เล็กซึ่งขจัดความจำเป็นในช่วงเวลา นี่เป็นเพียงข้อเสนอแนะ; มันอาจไม่ใช่ความคิดที่ดีที่สุดสำหรับภาษานี้ แต่ฉันจะให้คุณตัดสินใจ (รักชื่อ BTW.)
ETHproductions

@ETHproductions ความคิดที่น่าสนใจ ฉันจะดูว่าฉันสามารถนำไปใช้กับบางกรณีได้หรือไม่ แต่ ณ ตอนนี้ฉันกำลังใช้คุณลักษณะส่วนใหญ่ผ่านวิธีการค้นหาแบบแทนที่ง่ายทำให้ยากที่จะใช้ความหมายที่ซับซ้อนยิ่งขึ้น
Downgoat

6

Mathematica, 67 61 ไบต์

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

คำนวณf(1000000)ในเวลาประมาณ 51 มิลลิวินาที


อ๊ะไม่เห็นว่ามีคำตอบวิชาคณิตศาสตร์อยู่แล้ว! เหมืองใช้IntegerStringเพื่อจัดรูปแบบตัวเลข:IntegerString[Fibonacci@#~IntegerDigits~26+10,36]<>""&

ฉันลบมัน การใช้Input[]และPrint[]เพื่อการเปรียบเทียบที่เป็นธรรมโซลูชันของฉันจะมีความยาว 66 ไบต์ แต่Alphabet[]เป็นฟีเจอร์ 10.1 ดังนั้นฉันคิดว่าฉันจะทิ้งมันไว้เป็นความคิดเห็น

@ user5254 ฉันใช้ครั้งแรกFromLetterNumberก่อนที่จะเห็นว่ามันใช้AlphabetกับภายในPartและใช้งานนั้นยกเว้นรายการดัชนี
LegionMammal978

5

Simplex 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 เป็นbtoaฟังก์ชั่นจาวาสคริปต์
Conor O'Brien


3

Minkolang 0.9 , 40 ไบต์

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

ลองที่นี่

คำอธิบาย

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

ดีจริงๆ! ใช้งานได้ดีสำหรับอินพุตขนาดใหญ่!
Filip Haglund


1

Haskell, 114 ตัวอักษร

มันยาวอย่างไม่คาดคิด ยินดีต้อนรับความช่วยเหลือใด ๆ ก่อนหน้านี้พบข้อบกพร่องสำหรับตอแหล (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เป็นรายการที่ไม่มีที่สิ้นสุดของ fibonacci toEnumเหมือนกันchrยกเว้นในอดีตไม่จำเป็นต้องนำเข้า Data.Char




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

บรรทัดแรกเป็นฟังก์ชันในการคำนวณ fibonacci ส่วนที่สองแปลงจากการเข้ารหัสในตัว 26 ฐานของรูบี้ (0-9 จากนั้น ap) เป็นการเข้ารหัส az ส่วนที่สามรับบรรทัดจาก 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"
Filip Haglund

4
@FilipHaglund อาจเป็นจุดลอยตัวไร้สาระ ฉันจะกลับไปใช้สูตรซ้ำ
Mego
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.