नया आदेश # 5: जहां फाइबोनैचि और बीट्टी वायथॉफ में मिलते हैं


16

परिचय (नजरअंदाज किया जा सकता है)

अपने नियमित क्रम (1, 2, 3, ...) में सभी सकारात्मक संख्याओं को डालना थोड़ा उबाऊ है, है ना? इसलिए यहां सभी सकारात्मक संख्याओं के क्रमपरिवर्तन (फेरबदल) के आसपास चुनौतियों की एक श्रृंखला है। यह इस श्रृंखला में पांचवीं चुनौती है ( पहली , दूसरी , तीसरी और चौथी चुनौती के लिए लिंक )।

इस चुनौती में, हम वायथॉफ सरणी से मिलेंगे, जो कि फाइबोनैचि अनुक्रमों और बीटॉन अनुक्रमों का एक इंटरवेटेड हिमस्खलन है!

फिबोनैकी संख्या आप में से अधिकांश एक प्रसिद्ध दृश्य के लिए शायद कर रहे हैं। दो शुरुआती संख्या और को देखते हुए , निम्नलिखित द्वारा दिए गए हैं: लिए ।F0F1FnFn=F(n1)+F(n2)n>2

बेट्टी अनुक्रम , एक पैरामीटर दिया है: के लिए । बीट्टी अनुक्रम के गुणों में से एक यह है कि प्रत्येक पैरामीटर , बिल्कुल एक पैरामीटर , जैसे कि उन मापदंडों के लिए बीट्टी अनुक्रम असंगत हैं और एक साथ शामिल हो गए हैं, वे सभी प्राकृतिक संख्याओं को छोड़कर 0 (उदाहरण:rBnr=rnn1rs=r/(r1)BrBr/(r1)=N{0} )।

अब यहाँ माइंडब्लोइंग भाग आता है: आप एक सरणी बना सकते हैं, जहाँ प्रत्येक पंक्ति एक फाइबोनैचि अनुक्रम है और प्रत्येक स्तंभ एक बीट्टी अनुक्रम है। यह व्यूह व्यर्थ की सरणी है । सबसे अच्छी बात यह है कि हर सकारात्मक संख्या इस सरणी में एक बार दिखाई देती है! सरणी इस तरह दिखती है:

   1    2    3    5    8   13   21   34   55   89  144 ...
   4    7   11   18   29   47   76  123  199  322  521 ...
   6   10   16   26   42   68  110  178  288  466  754 ...
   9   15   24   39   63  102  165  267  432  699 1131 ...
  12   20   32   52   84  136  220  356  576  932 1508 ...
  14   23   37   60   97  157  254  411  665 1076 1741 ...
  17   28   45   73  118  191  309  500  809 1309 2118 ...
  19   31   50   81  131  212  343  555  898 1453 2351 ...
  22   36   58   94  152  246  398  644 1042 1686 2728 ...
  25   41   66  107  173  280  453  733 1186 1919 3105 ...
  27   44   71  115  186  301  487  788 1275 2063 3338 ...
  ...

पंक्ति m और स्तंभ n पर एक तत्व निम्नानुसार है:

Am,n={mφφ if n=1mφφ2 if n=2Am,n2+Am,n1 if n>2

जहां φ सुनहरा अनुपात है: φ=1+52

अगर हम इस सरणी के विरोधी विकर्णों का अनुसरण करते हैं, तो हमें A035513 मिलता है , जो इस चुनौती के लिए लक्ष्य अनुक्रम है (ध्यान दें कि यह अनुक्रम नील स्लोन द्वारा खुद OEIS में जोड़ा गया है !)। चूंकि यह एक "शुद्ध अनुक्रम" चुनौती है, कार्य उत्पादन के लिए है a(n) के लिए एक दिया n इनपुट, जहां के रूप में a(n) है A035513

विभिन्न रणनीतियों आप को पाने के लिए अनुसरण कर सकते हैं कर रहे हैं a(n) , जो इस चुनौती (मेरी राय में) बनाता है वास्तव में दिलचस्प।

कार्य

एक पूर्णांक इनपुट को देखते हुए n , उत्पादन a(n) पूर्णांक प्रारूप में है, जहां a(n) है A035513

नोट: 1-आधारित अनुक्रमण यहाँ मान लिया गया है; आप 0-आधारित अनुक्रमण का उपयोग कर सकते हैं, इसलिए a(0)=1;a(1)=2 , आदि कृपया अपने उत्तर में इसका उल्लेख करें यदि आप इसका उपयोग करना चाहते हैं।

परीक्षण के मामलों

Input | Output
---------------
1     |  1
5     |  7
20    |  20
50    |  136
78    |  30
123   |  3194
1234  |  8212236486
3000  |  814
9999  |  108240
29890 |  637

यह मजेदार पता करने के लिए सबसे बड़ा है कि हो सकता है a(n) के लिए 1n32767 है (32,642)=512653048485188394162163283930413917147479973138989971=एफ(256)2φ+एफ(255)

नियम

  • इनपुट और आउटपुट पूर्णांक हैं
  • आपका कार्यक्रम कम से कम 1 से 32767 तक की सीमा में इनपुट का समर्थन करना चाहिए)। ध्यान दें कि (n) इस श्रेणी में 30 अंकों की संख्या के लिए चला जाता है ...
  • अमान्य इनपुट (0, फ़्लोट्स, स्ट्रिंग्स, नकारात्मक मान, आदि) अप्रमाणित आउटपुट, त्रुटियों या (बिना परिभाषित) व्यवहार को जन्म दे सकता है।
  • डिफ़ॉल्ट I / O नियम लागू होते हैं।
  • डिफ़ॉल्ट कमियां निषिद्ध हैं।
  • यह , इसलिए बाइट्स में सबसे कम उत्तर जीतता है

2
तो यहां नया आदेश संदर्भ क्या है?
लुइस मेंडो

2
@LuisMendo: हिमस्खलन फाइबोनैचि और बेट्टी दृश्यों के, जो Wythoff सरणी के रूप में ...
agtoever

आह, मैं पूरी तरह से याद किया! अब मुझे पछतावा हो रहा है ...
लुइस मेंडो

1
क्या फ़ाइ (या आरटी (5)) का फ़्लोटिंग पॉइंट प्रतिनिधित्व और पुनरावृत्ति का अनुप्रयोग सीमा आवश्यकता को पूरा करने वाला है?
जोनाथन एलन

1
कृपया 9 वां परीक्षण मामला तय करें: यह 999नहीं है9999
J42161217

जवाबों:


4

जेली , 27 24 बाइट्स

p`SÞ⁸ịð’;×ØpḞ¥×⁹r‘ÆḞ¤Sð/

इसे ऑनलाइन आज़माएं!

1-आधारित अनुक्रमण का उपयोग करते हुए मोनाडिक लिंक। n3 बाइट्स से पंक्ति और कॉलम प्राप्त करने के बेहतर तरीके के लिए @JonathanAllan को धन्यवाद । अपने सबसे छोटे रूप में यह TIO पर बड़े n के लिए बहुत धीमा है, इसलिए निम्नलिखित इसे ऑनलाइन आज़माएं! तीन बाइट्स की कीमत पर पंक्तियों और स्तंभों की प्रारंभिक सूची के आकार को कम करता है।

व्याख्या

p`                       | Cartesian product of the range from 1..input with itself   
  SÞ                     | Sort by sum
    ⁸ị                   | Find the tuple at the position indicated by the input - this is the row and column
      ð               ð/ | Start a new dyadic chain using the row as the left and column as the right argument
       ’                 | Increase the row by 1
        ;    ¥           | Concatenate to:
         ×Øp             |   row × φ
            Ḟ            |   rounded down
              ×     ¤    | Multiply this pair by
                  ÆḞ     |   the Fibonacci numbers at positions
               ⁹         |   column index and
                r‘       |   column index plus one
                     S   | sum

ध्यान दें कि यह OEIS पृष्ठ पर पायथन कोड के विवरण पर आधारित है।


1
...×⁹r‘ÆḞ¤Sð/अपने समामेलन संस्करण ( TIO ) में एक को बचाता है
जोनाथन एलन

6

आर , 143 130 124 124 बाइट्स

function(n){k=0:n+1
`~`=rbind
m=k-1~(k*(1+5^.5)/2)%/%1
for(i in k)m=m~m[i,]+m[i+1,]
m=m[-1:-2,]
m[order(row(m)+col(m))][n]}

इसे ऑनलाइन आज़माएं!

T(n,1)=n1;T(n,0)=nϕ;T(n,k)=T(n,k1)+T(n,k2) to construct the array (transposed), then splits the array along antidiagonals. k merely exists to prevent forcing a drop=F argument in m[-1:-2,] for the case n=1.

Thanks to Neil for pointing out a 1 byte golf.

R, 150 138 132 bytes

function(n){T[2]=1
for(j in 2:n-1)T=c(T,T[j]+T[j+1])
m=T[-1]%o%((1:n*(.5+5^.5/2))%/%1)+T[-1-n]%o%(1:n-1)
m[order(row(m)+col(m))][n]}

Try it online!

Implements the formula T(n,k)=Fib(k+1)nϕ+Fib(k)(n1) to get generate the array, then splits along the antidiagonals and extracts the nth element.

Thanks to Robin Ryder for the T[2]=1 trick for generating the Fibonacci sequence.


Both solutions are highly inefficient, creating an nxn matrix of (most likely) doubles, as R promotes integer (32-bit signed) to double automatically when overflowing, but the second one should be quite a lot faster. Taking n as a bignum should work automatically, using the call gmp::as.bigz(n), should loss of precision under doubles be worrisome, and then the language would be R + gmp.


के (1+5^.5)/2बजाय आप का उपयोग कर सकते हैं (.5+5^.5/2)?
नील

@Neil ...yes, I can. Thank you! Only going to edit it into the top one unless I can find a way to golf down the second one quite a lot more.
Giuseppe


2

Jelly, 30 bytes

p`SÞ⁸ịð;Øp,²;\¤×Ḟ¥/;+ƝQƊ⁹¡ị@ð/

Try it online!
This is a little slow, but a huge improvement is made with a prefix of Ḥ½Ċ (double, square-root, ceiling) like in this test-suite.


2
you are right! 740496902 is the result for 999
J42161217

Combining the first part of yours and second part of mine gives 25 bytes. Not sure which of us should have the combined version!
Nick Kennedy

@NickKennedy - nice, go for it!
Jonathan Allan

2

Charcoal, 54 bytes

Nθ≔⁰ηW‹ηθ«≦⊕η≧⁻ηθ»⊞υ¹Fθ⊞υ⁻⁺³ι§υ⊖§υι⊞υθF⁺²⁻θη⊞υΣ…⮌υ²I⊟υ

Try it online! Link is to verbose version of code. 0-indexed. Uses only integer arithmetic so works for arbitrary large values. Explanation:

Nθ

Input q.

≔⁰ηW‹ηθ«≦⊕η≧⁻ηθ»

Calculate the antidiagonal by subtracting ever increasing numbers from q, which ends up with the target row number m.

⊞υ¹Fθ⊞υ⁻⁺³ι§υ⊖§υι

Calculate the first m+1 terms of A019446, although we're only interested in the mth.

⊞υθF⁺²⁻θη⊞υΣ…⮌υ²

Calculate the first n+4 terms of the generalised Fibonacci series that starts with [a(m), m]. The terms of this sequence are the mth terms of A019446, A001477, A000201, A003622, A035336; these last two are the first two columns of the Wythoff array, and so this sequence continues with the rest of the mth row of the array.

I⊟υ

Output the desired term.

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.