धैर्य, युवा "पडोवन"


44

सभी लोग फाइबोनैचि अनुक्रम को जानते हैं:
आप एक वर्ग लेते हैं, इसके बराबर वर्ग संलग्न करते हैं, फिर बार-बार एक वर्ग संलग्न करते हैं जिसकी पार्श्व लंबाई आयत की सबसे बड़ी लंबाई के बराबर होती है।
परिणाम वर्गों का एक सुंदर सर्पिल है जिसकी संख्या का अनुक्रम फाइबोनैचि अनुक्रम है :

लेकिन, क्या होगा अगर हम वर्गों का उपयोग नहीं करना चाहते हैं?

यदि हम समान त्रिभुजों का उपयोग करते हैं - वर्गों के बजाय - एक समान फैशन में, हमें त्रिकोणों का एक समान रूप से सुंदर सर्पिल और एक नया अनुक्रम मिलता है : पडोवन अनुक्रम , उर्फ A000931 :

कार्य:

एक सकारात्मक पूर्णांक, , आउटपुट , वें पद को अनुक्रम में या पहले शब्दों को देखते हुए।NaNNN

मान लें कि अनुक्रम के पहले तीन शब्द सभी । इस प्रकार, अनुक्रम इस प्रकार शुरू होगा: 1

1,1,1,2,2,3,...

इनपुट:

  • कोई भी सकारात्मक पूर्णांकN0

  • अमान्य इनपुट को ध्यान में नहीं रखा जाना चाहिए

आउटपुट:

  • पडोवन अनुक्रम में वें अवधि या पहली पडोवन अनुक्रम के मामले।NएनN

  • यदि पहले शर्तें मुद्रित हैं, तो आउटपुट जो भी सुविधाजनक हो (सूची / सरणी, बहु-पंक्ति स्ट्रिंग, आदि) हो सकता हैN

  • या तो -indexed या -indexed हो सकता है01

परीक्षण के मामले:
(0-अनुक्रमित, वीं अवधि)N

Input | Output
--------------
0     | 1
1     | 1
2     | 1
4     | 2
6     | 4
14    | 37
20    | 200
33    | 7739

(1-अनुक्रमित, पहले पद)N

Input | Output
--------------
1     | 1
3     | 1,1,1
4     | 1,1,1,2
7     | 1,1,1,2,2,3,4
10    | 1,1,1,2,2,3,4,5,7,9
12    | 1,1,1,2,2,3,4,5,7,9,12,16

नियम:


2
14(0-अनुक्रमित) को आउटपुट के रूप में दिखाया गया है 28जबकि मेरा मानना ​​है कि इसे उपजना चाहिए37
जोनाथन एलन

@JonathanAllan हाँ, आप सही हैं। मैंने वें पद के लिए अंतिम दो परीक्षण मामलों को तय किया, लेकिन ऐसा नहीं है। पोस्ट को संपादित किया गया है। N
ताऊ

@LuisMendo मैं ऐसा मानता हूँ। मैं पोस्ट को संपादित करूँगा।
ताऊ

1
@ फ़िबोनाकी अनुक्रम के लिए यह परिभाषा दृश्य परिभाषा है। क्रमिक रूप से जोड़े गए प्रत्येक क्रम में उस शब्द की लंबाई होती है। आपके द्वारा वर्णित अनुक्रम इसके पीछे का संख्यात्मक तर्क है। दोनों सीक्वेंस दूसरे की तरह ही काम करते हैं।
ताऊ

1
ध्यान दें कि आपके द्वारा जोड़ा गया OEIS अनुक्रम थोड़ा भिन्न है, क्योंकि यह उपयोग करता है a_0=1, a_1=0, a_2=0। यह समाप्त हो जाता है क्योंकि तब तक इसे थोड़ा सा स्थानांतरित कर दिया जाता हैa_5=a_6=a_7=1
कार्मिस्टर

जवाबों:


59

जेली , 10 बाइट्स

9s3’Ẓæ*³FṀ

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

1 अनुक्रमित। सबसे बड़े तत्व की गणना करता है: जहां बाइनरी मैट्रिक्स को आसानी से गणना की जाती है:

[001101010]n
[isprime(0)isprime(1)isprime(2)isprime(3)isprime(4)isprime(5)isprime(6)isprime(7)isprime(8)]

(यह कुल संयोग है।)

9s3         [[1,2,3],[4,5,6],[7,8,9]]    9 split 3
   ’        [[0,1,2],[3,4,5],[6,7,8]]    decrease
    Ẓ       [[0,0,1],[1,0,1],[0,1,0]]    isprime
     æ*³    [[0,0,1],[1,0,1],[0,1,0]]^n  matrix power by input
        FṀ                               flatten, maximum

33
यह स्पष्ट रूप से किसी प्रकार का वूडू है
प्यूरफेरेट

7
इसे प्रकाशित किया जाना चाहिए।
YSC

6
@ YSC यह पहले ही A000931 में प्रकाशित हो चुका है । मैं
अनुमानों की

1
... कि "जब तक कोई इस दो को बंद नहीं कर सकता है" :) (अब जब मेरे पास 9 बटर हैं )
जोनाथन एलन

1
मैं यहाँ बेतुके छोटे-छोटे उत्तरों को देखने के आदी हूँ, मुझे लगा कि 'जेली' के बाद कॉमा वास्तव में इस समस्या का कोड था
तस्सो पाप्पिल्लियानौ


26

जेली ,  10 9  8 बाइट्स

ŻṚm2Jc$S

एक मौद्रिक लिंक स्वीकार करना n(0-अनुक्रमित) जो पैदावार देता है P(n)

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

कैसे?

इम्प्लीमेंट्सP(n)=i=0n2(i+1n2i)

ŻṚm2Jc$S - Link: integer, n       e.g. 20
Ż        - zero range                  [0, 1, 2, 3, 4, ..., 19, 20]
 Ṛ       - reverse                     [20, 19, ..., 4, 3, 2, 1, 0]
  m2     - modulo-slice with 2         [20, 18, 16, 14, 12, 10,  8,  6,  4,  2,  0]  <- n-2i
      $  - last two links as a monad:
    J    -   range of length           [ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11]  <- i+1
     c   -   left-choose-right         [ 0,  0,  0,  0,  0,  0,  0, 28,126, 45,  1]
       S - sum                         200

और यहाँ एक "ट्वोफ़र" है
... 8 बाइट्स के लिए एक पूरी तरह से अलग विधि (यह एक 1-अनुक्रमित है, लेकिन बहुत सुस्त है):

3ḊṗRẎ§ċ‘ - Link: n
3Ḋ       - 3 dequeued = [2,3]
   R     - range = [1,2,3,...,n]
  ṗ      -   Cartesian power         [[[2],[3]],[[2,2],[2,3],[3,2],[3,3]],[[2,2,2],...],...]
    Ẏ    - tighten                   [[2],[3],[2,2],[2,3],[3,2],[3,3],[2,2,2],...]
     §   - sums                      [ 2,  3,   4,    5,    5,    6,     6,...]
       ‘ - increment                 n+1
      ċ  - count occurrences         P(n)

18

हास्केल , 26 बाइट्स

(l!!)
l=1:1:1:2:scanl(+)2l

इसे ऑनलाइन आज़माएं! शून्य-अनुक्रमित n'th शब्द को आउटपुट करता है।

मैंने सोचा था कि नीचे "स्पष्ट" पुनरावर्ती समाधान अपराजेय होगा, लेकिन फिर मुझे यह मिला। यह l=1:scanl(+)1lअनंत फाइबोनैचि सूची के लिए क्लासिक गोल्फ की अभिव्यक्ति के समान है , लेकिन यहां आसन्न तत्वों के बीच का अंतर 4 पद वापस है। हम और अधिक सीधे लिख सकते हैं l=1:1:zipWith(+)l(0:l), लेकिन यह अधिक लंबा है।

यदि इस चुनौती ने अनंत सूची आउटपुट की अनुमति दी, तो हम पहली पंक्ति में कटौती कर सकते हैं और 20 बाइट्स कर सकते हैं।

27 बाइट्स

f n|n<3=1|1>0=f(n-2)+f(n-3)

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




6

ऑक्टेव / MATLAB, 35 33 बाइट्स

@(n)[1 filter(1,'cbaa'-98,2:n<5)]

पहले n शब्दों को आउटपुट करता है ।

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

यह काम किस प्रकार करता है

अनाम फ़ंक्शन जो पुनरावर्ती फ़िल्टर को लागू करता है ।

'cbaa'-98उत्पादन करने के लिए एक छोटा रूप है [1 0 -1 -1]

2:n<5उत्पादन करने के लिए एक छोटा रूप है [1 1 1 0 0 ··· 0]( n terms1 शब्द)।

filter(1,[1 0 -1 -1],[1 1 1 0 0 ··· 0])[1 1 1 0 0 ··· 0]अंश गुणक 1और हर गुणांक के साथ एक हस्तांतरण फ़ंक्शन द्वारा परिभाषित असतत-समय फ़िल्टर के माध्यम से इनपुट को पास करता है [1 0 -1 -1]


6

जे , 22 बाइट्स

-2 बाइट्स ngn और गैलेन के लिए धन्यवाद

बंद फॉर्म, 26 बाइट्स

0.5<.@+1.04535%~1.32472^<:

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

पुनरावृति, 22 बाइट्स

(],1#._2 _3{ ::1])^:[#

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


1
एक और 24-बाइट समाधान (उबाऊ): (1 # .2 3 $: @ - ~]) `1: @ (3 &>) इसे ऑनलाइन आज़माएं!
गालेन इवानोव

23 बाइट्स ngn के लिए धन्यवाद 1:-> #: इसे ऑनलाइन आज़माएं!
गैलेन इवानोव

@GalenIvanov tyvm, यह एक शानदार ट्रिक है।
योना

2
1:-> 1। "प्रतिकूल" दाईं ओर एक संज्ञा के साथ काम करता है, जाहिरा तौर पर
ngn

@ng TIL ... फिर से!
जोनाह

5

रेटिना , 47 42 बाइट्स

K`0¶1¶0
"$+"+`.+¶(.+)¶.+$
$&¶$.(*_$1*
6,G`

इसे ऑनलाइन आज़माएं! nअलग-अलग लाइनों पर पहले शब्दों को आउटपुट करता है । स्पष्टीकरण:

K`0¶1¶0

इनपुट को शर्तों के साथ बदलें -2, -1और 0

"$+"+`.+¶(.+)¶.+$
$&¶$.(*_$1*

nपुनरावृत्ति संबंध का उपयोग करके अगले शब्द बनाएं। *_यहाँ वह छोटा है $&*_जिसके लिए मैच में पहला (पहला) नंबर एकतरफा हो जाता है, जबकि $1*वह छोटा होता है $1*_जिसके लिए मध्य संख्या को एकरी में परिवर्तित करता है। $.(रिटर्न अपने एकल तर्कों के दशमलव राशि, पहले और मध्यम संख्याओं का योग अर्थात्।

6,G`

पहले छह अक्षर यानी पहली तीन पंक्तियों को छोड़ दें।


5

क्यूबिक्स , 20 बाइट्स

यह 0 अनुक्रमित है और एन वें शब्द को आउटपुट करता है

;@UOI010+p?/sqq;W.\(

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

साइड लंबाई 2 के साथ एक क्यूब पर लपेटता है

    ; @
    U O
I 0 1 0 + p ? /
s q q ; W . \ (
    . .
    . .

देखो इसे चलाते हैं

  • I010 - स्टैक की शुरुआत करता है
  • +p? - स्टैक के शीर्ष को जोड़ता है, काउंटर को स्टैक और परीक्षणों के नीचे से खींचता है
  • /;UO@ - यदि काउंटर 0 है, तो शीर्ष चेहरे पर प्रतिबिंबित करें, टीओएस, यू-टर्न, आउटपुट और हॉल्ट को हटा दें
  • \(sqq;W - यदि काउंटर पॉजिटिव है, तो रिफ्लेक्ट करें, डेक्रिमेंट काउंटर, स्वैप टीओएस, ऊपर से नीचे दो बार पुश करें, टीओएस को हटा दें और लेन को मुख्य लूप में वापस ले जाएं।


4

पर्ल 6 , 24 बाइट्स

{(1,1,1,*+*+!*...*)[$_]}

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

एक बहुत ही मानक उत्पन्न क्रम, अभिव्यक्ति द्वारा उत्पन्न प्रत्येक नए तत्व के साथ * + * + !*। यह तीसरे-पिछले तत्व, दूसरे-पिछले तत्व और पिछले तत्व के तार्किक निषेध को जोड़ता है, जो हमेशा होता है False, जो संख्यात्मक रूप से शून्य है।


यह समुदाय विकि क्यों है?
जो राजा

@ जोकिंग मुझे धड़कता है। अगर मैंने इसे किसी तरह किया, तो यह उद्देश्य पर नहीं था।
सीन

4

05AB1E , 8 बाइट्स

1Ð)λ£₂₃+

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

मेरे साथ सहन, मैं थोड़ी देर में गोल्फ नहीं है। मुझे आश्चर्य है कि अगर वहाँ एक छोटा 1Ð)सा विकल्प है जिसके लिए इस मामले में काम करता है (मैंने कोशिश की है 1D), 3Å1आदि) , लेकिन उनमें से कोई भी बाइट नहीं बचाता है)। अनुक्रम के पहले शब्द को आउटपुट करता है । या, बिना , यह अनुक्रम की शर्तों की एक अनंत धारा का उत्पादन करेगा।n£

कैसे?

1Ð)λ£₂₃+ | Full program.
1Ð)      | Initialize the stack with [1, 1, 1].
   λ     | Begin the recursive generation of a list: Starting from some base case,
         | this command generates an infinite list with the pattern function given.
    £    | Flag for λ. Instead of outputting an infinite stream, only print the first n.
     ₂₃+ | Add a(n-2) and a(n-3).

मुझे नहीं लगता कि 1Ð)2 बाइट्स tbh हो सकते हैं। मैं छह अलग-अलग 3-बाइट विकल्पों के बारे में सोच सकता हूं , लेकिन कोई 2-बायर्स नहीं।
केविन क्रूज़सेन

4

APL (Dyalog Unicode) , 20 18 17 बाइट्स SBCS

यह कोड 1-अनुक्रमित है। यह nPadovan अनुक्रम की वस्तुओं को प्राप्त करने के लिए बाइट्स की समान संख्या है , क्योंकि आपको पिछले कुछ अतिरिक्त सदस्यों को छोड़ना होगा। 0-इंडेक्सिंग प्राप्त करने के लिए यह बाइट्स की समान संख्या है।

संपादित करें: ngn के लिए -2 बाइट्स धन्यवाद। -1 बाइट धन्यवाद ngn करने के लिए

4⌷2(⊢,⍨2⌷+/)⍣⎕×⍳3

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

व्याख्या

4⌷2(⊢,⍨2⌷+/)⍣⎕×⍳3

  ⍺(. . . .)⍣⎕⍵   This format simply takes the input ⎕ and applies the function
                   inside the brackets (...) to its operands (here marked ⍵ and ⍺).
  2(. . .+/)⍣⎕×⍳3  In this case, our ⍵, the left argument, is the array 1 1 1,
                   where we save our results as the function is repeatedly applied
                   and our ⍺, 2, is our right argument and is immediately applied to +/,
                   so that we have 2+/ which will return the pairwise sums of our array.
       2⌷          We take the second pairwise sum, f(n-2) + f(n-3)
    ⊢,⍨            And add it to the head of our array.
4⌷                 When we've finished adding Padovan numbers to the end of our list,
                   the n-th Padovan number (1-indexed) is the 4th member of that list,
                   and so, we implicitly return that.

4

के (ngn / k) , 24 20 बाइट्स

-4 बाइट धन्यवाद ngn करने के लिए!

{$[x<3;1;+/o'x-2 3]}

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

0-अनुक्रमित, पहले एन शर्तें


1
f[x-2]+f[x-3]-> +/o'x-2 3(( o"
रिकूर

@ng धन्यवाद! मैंने इसे जे (सफलता के बिना) में आज़माया; यहाँ सुरुचिपूर्ण है।
गैलेन इवानोव

@ngn यहाँ वास्तव में एक कब्जे में है कि यह जे में कैसा दिखता है: (1 # .2 3 $: @ - ~]] `1: @ (3 &>)
गैलेन इवानोव

आह, ठीक है, बेस -1 डिकोड एक ट्रेन के अनुकूल तरीका है :)
ngn

2
1:-> #j घोल में
ngn

4

x86 32-बिट मशीन कोड, 17 ​​बाइट्स

53 33 db f7 e3 43 83 c1 04 03 d8 93 92 e2 fa 5b c3

disassembly:

00CE1250 53                   push        ebx  
00CE1251 33 DB                xor         ebx,ebx  
00CE1253 F7 E3                mul         eax,ebx  
00CE1255 43                   inc         ebx  
00CE1256 83 C1 04             add         ecx,4  
00CE1259 03 D8                add         ebx,eax  
00CE125B 93                   xchg        eax,ebx  
00CE125C 92                   xchg        eax,edx  
00CE125D E2 FA                loop        myloop (0CE1259h)  
00CE125F 5B                   pop         ebx  
00CE1260 C3                   ret

यह 0-अनुक्रमित है। इरिक्स की गणना करके आसानी से इनिशियलाइज़ेशन प्राप्त किया जाता है * 0. 128-बिट परिणाम 0 है, और यह edx: eax में जाता है।

प्रत्येक पुनरावृत्ति की शुरुआत में, रजिस्टरों का क्रम ईबीएक्स, ईएक्सएक्स, एडएक्स है। मुझे xchg eaxनिर्देश के लिए एन्कोडिंग का लाभ लेने के लिए सही क्रम चुनना था - 1 बाइट।

मुझे आउटपुट तक पहुंचने के लिए लूप काउंटर से 4 को जोड़ना पड़ा eax, जो fastcallकन्वेंशन में फ़ंक्शन का रिटर्न मान रखता है ।

मैं कुछ अन्य कॉलिंग कन्वेंशन का उपयोग कर सकता था, जिन्हें सहेजने और पुनर्स्थापित करने की आवश्यकता नहीं है ebx, लेकिन fastcallवैसे भी मजेदार है :)


2
मुझे PP & CG पर मशीन कोड उत्तर देखना बहुत पसंद है! +1
ताऊ


3

लुआ 5.3,49 48 बाइट्स

function f(n)return n<4 and 1or f(n-2)+f(n-3)end

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

वेनिला लुआ में स्ट्रिंग्स (यहां तक ​​कि tonumber(true)रिटर्न nil) के लिए बूलियन का ज़बरदस्ती नहीं है , इसलिए आपको एक छद्म-टर्नरी ऑपरेटर का उपयोग करना होगा। यह संस्करण 1-अनुक्रमित है, लुआ के सभी की तरह। 1orभाग को परिवर्तित करने की है 1 orलुआ 5.1 है, जो संख्या lexing का एक अलग तरीका है में।



3

जावास्क्रिप्ट (ईएस 6), 23 बाइट्स

a(0)=a(1)=a(2)=1

N

f=n=>n<3||f(n-2)+f(n-3)

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


मुझे नहीं लगता कि यह कहना उचित है कि यदि trueरिटर्न 1बाकी आउटपुट संख्याओं के समान है।
निति


मुझे लगता है कि आप कुछ आवश्यकताओं को याद कर रहे हैं: मेरे संशोधन पर एक नज़र (जावा में संस्करण) है यहाँ
Shaq

@ शेख चुनौती स्पष्ट रूप से निर्दिष्ट करती है कि अनुक्रम के पहले तीन शब्द सभी 1 हैं । तो, यह A000931 में परिभाषित अनुक्रम नहीं है (लेकिन सूत्र समान है)।
अरनुलद

@ अर्नूल यप मैं इसे अभी देख सकता हूं। माफ़ करना!
शक


2

TI-BASIC (TI-84), 34 बाइट्स

[[0,1,0][0,0,1][1,1,0]]^(Ans+5:Ans(1,1

N

इनपुट में है Ans
आउटपुट में है Ansऔर स्वचालित रूप से प्रिंट आउट है।

मुझे लगा कि पर्याप्त समय बीत चुका है, साथ ही कई उत्तर भी पोस्ट किए गए हैं, जिनमें से कई ऐसे थे, जिन्होंने इस उत्तर को निकाल दिया।

उदाहरण:

0
               0
prgmCDGFD
               1
9
               9
prgmCDGFD
               9
16
              16
prgmCDGFD
              65

स्पष्टीकरण:

[[0,1,0][0,0,1][1,1,0]]^(Ans+5:Ans(1,1      ;full program (example input: 6)

[[0,1,0][0,0,1][1,1,0]]                     ;generate the following matrix:
                                            ; [0 1 0]
                                            ; [0 0 1]
                                            ; [1 1 0]
                       ^(Ans+5              ;then raise it to the power of: input + 5
                                            ; [4  7 5]
                                            ; [5  9 7]
                                            ; [7 12 9]
                               Ans(1,1      ;get the top-left index and leave it in "Ans"
                                            ;implicitly print Ans

2

पायथ, 16 बाइट्स

L?<b3!b+y-b2y-b3

यह फ़ंक्शन को परिभाषित करता है yयहाँ कोशिश करो!

यहां एक और मजेदार समाधान है, हालांकि यह 9 बाइट्स लंबा है; बाइट्स हालांकि मुंडा जा सकता है।

+l{sa.pMf.Am&>d2%d2T./QY!

यह OEIS पृष्ठ पर डेविड कॉलन द्वारा दी गई परिभाषा का उपयोग करता है: "a (n) = n की रचनाओं की संख्या विषम भागों में और> = 3. 3." यहाँ कोशिश करो! यह एक फ़ंक्शन को परिभाषित करने के बजाय सीधे इनपुट लेता है।


y-b2y-b3शायद द्विभाजित या के साथ refactored किया जा सकता है L? हालांकि 2 तत्वों की एक सरणी घोषित करना महंगा है। yL-Lb2,3अब है :(
शुक्र

@Ven मैं बदलने के लिए कर रहा था +y-b2y-b3के साथ smy-bdhB2जो बाइट्स की एक ही राशि है, hB2परिणाम में सरणी[2, 3]
आरके।

अच्छी तरह से किया hB2। बहुत बुरा यह एक ही बाइट गिनती है।
शुक्र

हाँ, हालांकि मुझे आश्चर्य है कि अगर dनक्शे से छुटकारा पाने का कोई तरीका है ।
आर.के.

2

जावा, 41 बाइट्स

एक लैम्ब्डा (रनटाइम त्रुटि) का उपयोग नहीं कर सकते। इस जावास्क्रिप्ट उत्तर का पोर्ट

int f(int n){return n<3?1:f(n-2)+f(n-3);}

TIO


मुझे लगता है कि आप कुछ आवश्यकताओं को याद कर रहे हैं: यहाँ मेरे संशोधन पर एक नज़र डालें ।
Shaq

कृपया Shaq की टिप्पणी की अवहेलना करें: आपका उत्तर सही है और सबसे छोटा जावा उत्तर संभव है (जैसा कि जावा 12)।
ओलिवियर ग्रेजायर

ठीक है फिर। मुझे यकीन नहीं है कि मैं क्या "याद" लेकिन ठीक है। संपादित करें: nvm मैंने JS उत्तर पढ़ा।
बेंजामिन अर्कहार्ट

2

आर + प्राइर , 38 36 बाइट्स

शून्य-अनुक्रमित पुनरावर्ती कार्य।

f=pryr::f(`if`(n<3,1,f(n-2)+f(n-3)))

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

दो स्पष्ट रूप से अनावश्यक बाइट्स को इंगित करने के लिए @Giuseppe के लिए धन्यवाद ।


2
यदि आप उपयोग करने जा रहे हैं pryr, तो भाषा होनी चाहिए R + pryrऔर यह 36 बाइट्स
Giuseppe

@Giuseppe धन्यवाद! अभी अपडेट किया गया।
rturnbull





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