मोटज़किन नंबर


30

Nth मोत्ज़किन संख्या (0, 0) से (n, 0) पथों की संख्या है जहाँ प्रत्येक चरण फ़ॉर्म (1, -1), (1, 0) या (1, 1) और पथ का है कभी भी y = 0 से नीचे नहीं जाता है।

यहाँ उपरोक्त लिंक से n = 1, 2, 3, 4 के लिए इन रास्तों का चित्रण किया गया है:

मोटज़किन संख्या

वांछित अनुक्रम OEIS A001006 है । OEIS में अनुक्रम के कुछ अन्य लक्षण हैं।


आपको इनपुट के रूप में एक सकारात्मक पूर्णांक दिया जाएगा। आपको nth Motzkin Number को आउटपुट करना चाहिए।

यहां मोत्ज़किन नंबर 1 से 10 हैं:

1, 2, 4, 9, 21, 51, 127, 323, 835, 2188

सभी मानक इनपुट और आउटपुट विधियों की अनुमति है। मानक खामियां लागू होती हैं।

यह कोड गोल्फ है। सबसे कम बाइट्स जीतता है।


मोत्ज़किन संख्याओं का न्यूनतम सेट क्या है जो हमें उत्पन्न करने में सक्षम होना चाहिए?
Addison Crump


@FlagAsSpam उन सभी को, समय / स्मृति / डेटा प्रकार की सीमाओं तक।
इसहाक

मुझे लगता है कि भाषाओं को अब एक डाइक शब्दों की जरूरत है।
lirtosiast

जवाबों:


15

MATL , 13 14 बाइट्स

i-2/t.5+hH4Zh

उदाहरण:

>> matl i-2/t.5+hH4Zh
> 6
51

EDIT (16 जून, 2017): आप इसे ऑनलाइन आज़मा सकते हैं ! यह भी ध्यान दें कि भाषा के आधुनिक संस्करणों में (इस चुनौती के बाद की तारीख) को iहटाया जा सकता है।

व्याख्या

अतिसक्रिय फंक्शन के साथ समतुल्यता (समीकरण देखें (10)) का उपयोग करते हुए, बहुत सरल :

यहाँ छवि विवरण दर्ज करें

हाइपरजोमेट्रिक फ़ंक्शन की परिभाषा से

यहाँ छवि विवरण दर्ज करें

यह स्पष्ट है कि पहले दो तर्कों के क्रम को आपस में जोड़ा जा सकता है, जिससे एक बाइट बचती है।

i         % input                                                   
-2/       % divide by -2
t.5+      % duplicate and add 0.5
h         % horizontal concatenation into a vector                               
H         % number 2
4         % number literal                                          
Zh        % hypergeometric function with three inputs (first input is a vector)

1
यह उत्तर सबसे छोटा और लगभग डेढ़ घंटे पुराना है, इसलिए मैं इसे स्वीकार कर रहा हूं।
ईसैक

धन्यवाद! मैं शायद ही सोच सकता था कि MATL भी Pyth के साथ बंधी होगी। यह हरा करने के लिए इतनी कठिन भाषा है, अच्छी नौकरी इसे डिजाइन करती है!
लुइस मेंडो

11

रेटिना , 59 58 बाइट्स

+`(\D*)1(1*)
:$1<$2:$1>$2:$1_$2:
:(_|()<|(?<-2>)>)+:(?!\2)

में इनपुट लेता एकल । इनपुट 7 (यानी 1111111) में काफी समय लगता है लेकिन फिर भी एक मिनट से भी कम समय में पूरा हो जाता है। मैं इससे बहुत आगे नहीं जाऊंगा।

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

व्याख्या

मोटज़किन संख्याओं का एक अलग लक्षण वर्णन तीन अलग-अलग वर्णों के तारों की संख्या है, जहां उनमें से दो सही ढंग से संतुलित हैं (इसलिए कैटलन संख्याओं के करीबी संबंध, जो कि तीसरे वर्ण के बिना समान हैं जो संतुलन से स्वतंत्र है)।

नेट के संतुलन समूहों, सुमेलित तार का पता लगाने में काफी अच्छा कर रहे हैं तो हम बस उत्पन्न सभी लंबाई के तार N(का उपयोग कर _, <और >तीन पात्रों के रूप में) और फिर हम गिनती कैसे उन के कई सही ढंग से संतुलित कर रहे हैं। उदाहरण के N = 4लिए मान्य तार हैं:

____
__<>
_<_>
_<>_
<__>
<_>_
<>__
<<>>
<><>

चुनौती में परिभाषा की तुलना में, _एक (1,0)कदम है, <करने के लिए (1,1)और >करने के लिए मेल खाती है (1,-1)

वास्तविक कोड के लिए, :अलग-अलग तारों के बीच विभाजक के रूप में उपयोग किया जाता है। दूसरा रेगेक्स संतुलित स्ट्रिंग्स के लिए मानक .NET रेगेक्स का एक गोल्फ रूप है

ध्यान देने योग्य बात यह है कि :प्रत्येक चरण में तार के बीच केवल एक ही सम्मिलित होता है, लेकिन दूसरा रेक्सएक्स एक अग्रणी और एक अनुगामी :से मेल खाता है (और चूंकि मिलान ओवरलैप नहीं हो सकता है, इसका मतलब है कि अंतिम चरण में एक टेम्पलेट से उत्पन्न आसन्न तार दोनों मेल कर सकते हैं। )। हालाँकि, यह कोई समस्या नहीं है, क्योंकि उन तीनों में से अधिकांश कभी भी मेल खा सकते हैं:

  • यदि स्ट्रिंग _मैचों में समाप्त होती है , तो इसके बिना उपसर्ग _पहले से ही सही ढंग से संतुलित है, और <या >उस संतुलन को फेंक देगा।
  • यदि स्ट्रिंग >मैचों में समाप्त होती है , तो स्ट्रिंग उसी के साथ संतुलित होती है >, इसलिए _या <उस संतुलन को फेंक देगी।
  • में समाप्त होने वाले तार <कभी संतुलित नहीं हो सकते।

यह शर्म की बात है कि '\' का विशेष अर्थ है अन्यथा '_ / \' वर्णों का उपयोग करने से प्रश्न की भावना बेहतर होगी।
नील

9

पायथन 2, 51 बाइट्स

M=lambda n:n<1or sum(M(k)*M(n-2-k)for k in range(n))

मैथवर्ल्ड से सूत्र का उपयोग करता है

यहाँ छवि विवरण दर्ज करें

डालकर वर्ण बचाता है M[n-1]के रूप में योग में अवधि k=n-1, जो देता है M[-1]*M[n-1]के साथ, M[-1]=1प्रारंभिक शर्त के हिस्से के रूप।

संपादित करें: एक चार छोटी राशि को पुनरावर्ती रूप से लिखना:

M=lambda n,k=0:n<1or k<n and M(k)*M(n-2-k)+M(n,k+1)

अन्य दृष्टिकोण जो लंबे समय तक निकले:

M=lambda n,i=0:n and(i>0)*M(n-1,i-1)+M(n-1,i)+M(n-1,i+1)or i==0
M=lambda n:+(n<2)or(3*~-n*M(n-2)+(n-~n)*M(n-1))/(n+2)

8

अजगर, 15 बाइट्स

Ls*V+KyMb1+t_K1

यह एक फ़ंक्शन को परिभाषित करता है y। इसे ऑनलाइन आज़माएँ: प्रदर्शन

स्पष्टीकरण:

चलो y[n]होना nवें मोत्जकिन संख्या। मैं y[n]सूत्र से गणना करता हूं

y[n] = dot product of (y[0], ..., y[n-1], 1) and (y[n-2], ..., y[0], 1)

ध्यान दें कि पहला वेक्टर दूसरे से बड़ा है (गणना करते समय छोड़कर y[0])। जब यह मामला होता है, तो पायथ स्वचालित रूप से पहले वेक्टर के अंत में 1 को अनदेखा करता है, ताकि दोनों वैक्टर समान लंबाई के हों।

Ls*V+KyMb1+t_K1
L                 define a function y(b), which returns:
      yMb            compute the list [y[0], y[1], ..., y[b-1]]
     K               assign it to K
  *V                 vectorized multiplication of
    +K   1             * K with a 1 at the end
          +t_K1        * reverse(K), remove the first element, and append 1
 s                   return the sum (dot product)

यह सूत्र OEIS पर सूचीबद्ध सूत्रों में से एक का रूपांतर है। यह थोड़ा मूर्खतापूर्ण हो सकता है। पहले वेक्टर के अंत में 1 के कारण (जो लंबाई को असमान बनाते हैं), मुझे वास्तव में पुनरावृत्ति को आधार मामला नहीं देना है। और मुझे उम्मीद थी, कि +...1दोनो को किसी तरह से निकाला जा सकता है। मुझे पता है मैं नहीं कर सकता।

आप समान लंबाई वाले वैक्टर के एक डॉट उत्पाद के साथ एक समान पुनरावृत्ति को परिभाषित कर सकते हैं और एक y[0] = 1ही बाइट गिनती के साथ आधार मामले को परिभाषित कर सकते हैं ।


8

CJam (20 बाइट्स)

.5X]{__W%.*:++}qi*W=

ऑनलाइन डेमो

जैसा कि मेगो ने सवाल पर टिप्पणियों में उल्लेख किया है, यह कैटलन संख्याओं से बहुत निकटता से संबंधित है: कैटलॉग संख्याओं को प्राप्त .5करने के लिए 1(या बस .5पूरी तरह से हटा दें और सूचकांक को अपरिवर्तित छोड़ दें) सूचकांक को एक से बदल दें और ऑफसेट करें ।

उपयोग की गई पुनरावृत्ति है

a (n + 2) - a (n + 1) = a (0) * a (n) + a (1) * a (n-1) + ... + a (n) * a (0)। [Bernhart]

OEIS पेज से। कैटलन संख्याओं के लिए इसी पुनरावृत्ति को सूचीबद्ध किया गया है

a (n) = Sum_ {k = 0..n-1} a (k) a (n-1-k)।


6

गंभीरता से, 21 बाइट्स

,;╗r`;τ╜█@;u@τ╣║\*`MΣ

क्विंटोपिया के कैटलन नंबर समाधान से कुछ कोड उधार लेता है , विशेष रूप से सुधार मैंने टिप्पणियों में किया है।

मैं निम्नलिखित सूत्र का उपयोग करता हूं:

motzkin सूत्र

चूंकि nCk0 के लिए है k > n, मैं सभी तरह से योग करता हूं n-1, क्योंकि उन सभी मान 0 हो जाएंगे और इस तरह योग प्रभावित नहीं करेगा।

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

स्पष्टीकरण:

,;╗r`;τ╜█@;u@τ╣║\*`MΣ
,;╗                    push input, dupe, store one copy in register 0
   r                   push range(0, n) ([0,n-1])
    `             `M   map the function:
     ;τ╜█@               dupe k, push C(n, 2*k), swap with k
          ;u@τ╣║\        push the kth Catalan number
                 *       multiply
                    Σ  sum

C(n, 2*k)अब क्या करता है
Addison Crump

@FlagAsSpam C(n,k) = nCk, या kआइटमों के पूल से आइटम के संयोजन की संख्या n
मेगो

ओह, जो मैंने सोचा था कि तुलना में अधिक समझ में आता है। +1।
Addison Crump

@FlagAsSpam मुझे नहीं लगता कि मुझे पता है कि तुम क्या सोचा था कि यह था चाहते हैं ...
Mego

5

आर, 64 बाइट्स

f=function(n)ifelse(n<2,1,f(n-1)+sum(rev(s<-sapply(2:n-2,f))*s))

@ Xnor के पाइथन उत्तर के Mathworld सूत्र का भी उपयोग करता है । पूर्वता के नियमों के लिए धन्यवाद, 2:n-2के बराबर है 0:(n-2)

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

> f(0)
[1] 1
> f(1)
[1] 1
> f(5)
[1] 21
> f(10)
[1] 2188
> sapply(0:20,f)
 [1]        1        1        2        4        9       21       51      127
 [9]      323      835     2188     5798    15511    41835   113634   310572
[17]   853467  2356779  6536382 18199284 50852019

5

गणितज्ञ, 31 30 बाइट्स

AppellF1[-#/2,.5,-#/2,2,4,4]&

मज़े के लिए, यहाँ एक 37 बाइट संस्करण है

Hypergeometric2F1[(1-#)/2,-#/2,2,4]&

और 52 बाइट संस्करण

SeriesCoefficient[1-x-Sqrt[1-2x-3x^2],{x,0,#+2}]/2&

4

जेली , 17 14 13 बाइट्स

×US;
1;HÇƓ¡1ị

यह @ पीटरटयलर के उत्तर से पुनरावृत्ति संबंध का उपयोग करता है । इसे ऑनलाइन आज़माएं!

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

×US;      Define a helper link. Left argument: a (list)

×U        Multiply (×) a by its reverse (U).
  S       Compute the sum of the resulting list.
   ;      Prepend it to a.
          Return the result.

1;HÇƓ¡1ị  Define the main link.

1         Set the left argument to 1.
 ;H       Append the half of 1 to 1. Result: [1, 0.5].
    Ɠ     Read an integer n from STDIN.
   Ç ¡    Call the helper link (Ç) n times.
      1ị  Retrieve the result at index 1.

2

गणितज्ञ, 44 42 34 बाइट्स

Sum[#!/(i!(i+1)!(#-2i)!),{i,0,#}]&

35 बाइट्स संस्करण:

Coefficient[(1+x+1/x)^#,x]/#&[#+1]&

2

परी / जीपी , 38 36 26 बाइट्स

n->(1+x+x^2)^n++/n\x^n++%x

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

MathWorld से समीकरण (11) का उपयोग करना :

एमn=1n+1(n+11)2

कहा पे (nकश्मीर)2एक ट्रिनोमियल गुणांक है । परिभाषा से,(nकश्मीर)2 का गुणांक है एक्सn+कश्मीर के विस्तार में (1+एक्स+एक्स2)n


ट्रिनोमियल गुणांक की पहली परिभाषा का उपयोग करके एक 14-बाइट्स सामौ फ़ंक्शन );;7 2D$ⁿ$)╡$÷:। मैं इसे एक उत्तर के रूप में पोस्ट नहीं करूंगा क्योंकि भाषा प्रश्न की तुलना में नई है।
एलेफाल्फा

इसे पोस्ट करना ठीक है, आपको बस एक डिस्क्लेमर जोड़ना होगा कि सबमिशन जीतने के योग्य नहीं है क्योंकि जैसा कि आपने कहा, भाषा सवाल से नई है।
एलेक्स ए।

2

05AB1E , 13 12 बाइट्स

ÝI<ãʒ.øDŸQ}g

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

जबकि अधिकांश उत्तर सूत्र या पुनरावृत्ति संबंध का उपयोग करते हैं, यह एक सरल गणना दृष्टिकोण है।

ग्रिड के माध्यम से प्रत्येक संभावित पथ को इसके y निर्देशांक की सूची द्वारा दर्शाया गया है। N सेगमेंट के लिए, कुल (n + 1) अंक हैं, लेकिन पहला और अंतिम एक आवश्यक रूप से 0 हैं, ताकि निर्दिष्ट करने के लिए (n-1) अंक निकल जाएं।

Ý           # range [0..n]
 I<         # n - 1
   ã        # cartesian power

अब हमारे पास रास्तों की एक सूची है (अभी तक प्रारंभिक और अंतिम 0 शामिल नहीं हैं)। निर्माण करके, उनमें से कोई भी कभी भी नीचे नहीं जाता है। हालांकि, उनमें से कुछ के पास अवैध ढलान हैं (जैसे 0 से 2 तक कूद), इसलिए हमें उन्हें फ़िल्टर करने की आवश्यकता है।

ʒ      }g   # count how many paths satistfy the following condition
 0.ø        # surround with 0
      Q     # is equal to
    DŸ      # its own fluctuating range

Ÿहै उतार-चढ़ाव रेंज में निर्मित। यदि आसन्न संख्याओं की कोई जोड़ी है, तो यह लापता संख्या में भर जाएगी (जैसे [0, 2] [0, 1, 2])। केवल कानूनी रास्ते अपरिवर्तित रह जाएंगे।

अवैध ढलानों की जांच के लिए शायद अधिक सहज तरीका होगा üαà(जोड़ीदार पूर्ण अंतर की अधिकतम सीमा 1 के बराबर होती है)। हालांकि, यह फ्लैट [0, 0, ... 0] पथ को याद करता है, जिसे ठीक करने के लिए एक अतिरिक्त बाइट खर्च होती है।

अंत में, ध्यान दें कि वास्तविक कोड का उपयोग करता है जहां यह स्पष्टीकरण उपयोग करता है 0.ø। रास्ते को 0s से घेरने के बजाय, यह निहित इनपुट को रास्ते की दो प्रतियों से घेरता है। यह निर्देशांक प्रणाली को उल्टा और अंदर-बाहर करता है, लेकिन अन्यथा समतुल्य है।


2

स्टैक्स , 12 बाइट्स

îu¬@Y≤ÅÉÑ(πε

इसे चलाएं और डीबग करें

मैं नहीं जानता कि फैंसी गणित टाइपिंग कैसे करूं, लेकिन यह अनिवार्य रूप से एक गतिशील प्रोग्रामिंग निर्माण पर निर्भर करता है

M(0) = 1
M(1) = 1
M(n + 1) = M(n) + sum(M(k) * M(n - k - 1) for k in [0..n-1])


1

ब्रेन-आलोचना , 90 बाइट्स

(([{}]<(())>)<{({}()<{<>([({})]({}[({})]({}<>{}<>)))<>}<>>)}>){({}()<{}>)}{}({}{}[{}{}]<>)

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

गणना करता है (n0)2-(n2)2, कहा पे (nकश्मीर)2एक ट्रिनोमियल गुणांक है । मुझे यह सूत्र कहीं भी नहीं मिला, इसलिए मैं इसका संदर्भ नहीं दे सकता, लेकिन इसे उसी तरह से साबित किया जा सकता है, जैसा कि अनुरूप सूत्रसीn=(2nn)-(2nn+1)


0

ईएस 6, 44 बाइट्स

f=(n,k=0)=>n<1?1:k<n&&f(k)*f(n-2-k)+f(n,k+1)

@ Xnor के पुनरावर्ती पायथन समाधान का सीधा पोर्ट। जरूरत है n<1?1:क्योंकि वापसी n<1||होगी ।f(0)true


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