क्या आपने अपना फाइब-एबीसी सीखा है?


31

मुझे संख्याएँ पसंद नहीं हैं, लेकिन मुझे फिबोनाची अनुक्रम पसंद है। मुझे यकीन है कि हम कुछ काम कर सकते हैं।

कृपया STDIN से एक पूर्णांक n पढ़ें और n 26 वें ( abcdefghijklmnopqrstuvwxyzइसके बजाय 0123456789) के आधार में 26 वें फाइबोनैचि संख्या को आउटपुट करें ।

पहले फिबोनैकी संख्या एक दूसरे 1. है 0. है n वें फिबोनैकी संख्या का योग है n -2nd और n फाइबोनैचि संख्या -1st।

पहले 32 फ़ाइब-एबीसी नंबर:

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 कहेंगे क्योंकि अंकों का प्रतिनिधित्व करने के लिए पात्रों की पसंद पूरी तरह से मनमानी है और सामान्य हेक्साडेसिमल अंक केवल एक सम्मेलन हैं।
मार्टिन एंडर

2
यह अभी भी base26 है। आपके द्वारा उपयोग किए जाने वाले वर्ण मनमाने हैं, और यहाँ हम az (वर्णमाला क्रम में) का उपयोग करते हैं।
फिलीप हगलुंड

सही, यह पारंपरिक से अलग आधार -26 संकेतन है, लेकिन यह अभी भी एक आधार -26 संकेतन है।
मोनिका

5
इनपुट के लिए उन्हें खराब संख्याओं का उपयोग क्यों करें?
अष्टकूट

नाम सुझाव: फिबोना-बीसी
मैथ्यू रो

जवाबों:


12

सीजेएम, 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

टीस्क्रिप्ट , 34 बाइट्स 37 51 54

TeaScript गोल्फिंग के लिए जावास्क्रिप्ट है। यह औसत ब्राउज़र में 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
जेएस का अच्छा गोल्फ-वाई संस्करण! मैंने लगभग एक महीने पहले अपना खुद का संस्करण डिज़ाइन किया था, लेकिन अभी तक एक दुभाषिया शुरू नहीं किया है। एक फिबोनाची अंतर्निहित या अंतर्निहित इनपुट के बिना, यह एक ही कार्यक्रम 48 बाइट्स लंबा होगा। हालाँकि , अगर मैं एक अंतर्निहित और अंतर्निहित इनपुट जोड़ना चाहता था, तो यह 34 होगा। शायद मुझे एक दुभाषिया पर काम शुरू करना चाहिए। ;)
ETHproductions

ऊह, यह बहुत बेहतर है। मेरी भाषा में एक तरकीब जो यहां लागू हो सकती है वह है सभी वेरिएबल अपरकेस (मैथ, डेट, इत्यादि सहित) और सभी तरीके लोअरकेस बनाना, जो पीरियड्स की जरूरत को दूर करता है। यह सिर्फ एक सुझाव है; यह इस भाषा के लिए सबसे अच्छा विचार नहीं हो सकता है, लेकिन मैं आपको फैसला करने दूंगा। (नाम से प्यार करें, BTW।)
ETHproductions

@ETHproductions दिलचस्प विचार। मैं देखूंगा कि क्या मैं इसे कुछ मामलों के लिए लागू कर सकता हूं, लेकिन अभी तक, मैं एक सरल खोज-प्रतिस्थापित विधि के माध्यम से अधिकांश विशेषताओं को लागू कर रहा हूं, जिससे अधिक जटिल शब्दार्थों को लागू करना मुश्किल हो जाता है।
डाउनगेट

6

गणितज्ञ, ६hem ६१ बाइट्स

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और इसका इस्तेमाल किया, सिवाय सूचकांकों की सूची के।
लीजनमोनमल 978

5

सिम्पलेक्स 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 अनिवार्य रूप से JavaScripts btoaफ़ंक्शन है।
कॉनर ओ'ब्रायन


3

मिंकोलंग 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

बहुत अच्छे! विशाल आदानों के लिए महान काम करता है!
फ़िलिप हाग्लंड

3

पायथन 2.7, 82 बाइट्स

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

हास्केल, 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सूची की अनंत सूची है। toEnumके साथ ही है chr, सिवाय इसके कि पूर्व को Data.Char आयात करने की आवश्यकता नहीं है।


0

रूबी, 67 बाइट्स

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

मतलाब, 133 बाइट्स

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

रूबी, 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))

पहली पंक्ति, फीनिक्स की गणना करने का एक कार्य है, दूसरा रूबी के अंतर्निहित बेस 26 एन्कोडिंग (0-9 फिर एपी) से अज़ एन्कोडिंग में परिवर्तित होता है, तीसरा एसटीडीआईएन से एक लाइन प्राप्त करता है और इसे दोनों के माध्यम से चलाता है।


-1

पायथन 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 पर पहला ओवरफ्लो। फ़ाइबर (1337) के लिए यहां: diffchecker.com/bwjpg7bb जहां सही उत्तर "जीत" के साथ समाप्त होता है।
फिलिप हगलुंड

4
@ फीलिपहगलुंड संभवत: फ्लोटिंग पॉइंट बकवास है। मैं पुनरावृत्ति फार्मूला पर लौटूंगा।
Mego
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.