संख्याओं द्वारा जुगलबंदी


20

आपका कार्य किसी दिए गए टेम्प्लेट को पूरा करके एक वैध करतब दिखाने के लिए है। लेकिन पहले, आपको शायद यह जानना होगा कि इस तरह के पैटर्न को कैसे दर्शाया जाता है।

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

Siteswap का परिचय

जगहें पैटर्न के लिए साइटवर्क स्थापित संकेतन है। यह पैटर्न को बीट्स में विभाजित करके काम करता है। प्रत्येक पर अपने बाएँ और दाएँ हाथ को एक गेंद फेंकने के लिए वैकल्पिक रूप से हराएं। प्रत्येक थ्रो (यानी प्रत्येक बीट) को एक संख्या से दर्शाया जाता है जो इंगित करता है कि जब गेंद को अगली बार फेंका जाता है - यह सीधे थ्रो की ऊंचाई से मेल खाती है।

आइए कुछ उदाहरण देखें। इन सभी के एनिमेशन यहाँ देखें

3-बॉल कैस्केड

सबसे सरल 3-गेंद पैटर्न। प्रत्येक गेंद को हर तीसरे बीट (बारी-बारी से हाथ) में फेंका जाता है। बीट्स को इस तरह से लिखना इस प्रकार है (ASCII लाइनें दो बीट्स को जोड़ती हैं, जिस पर एक ही गेंद फेंकी जाती है):

Beat     1 2 3 4 5 6 7 8 9
Hand     L R L R L R L R L
Siteswap 3 3 3 3 3 3 3 3 3
         └─┼─┼─┘ │ │
           └─┼───┘ │
             └─────┘

नोट कैसे एक पर फेंके गए हर गेंद Lकी धड़कन, एक पर अगले फेंक दिया जाता है Rbeat.Siteswap पैटर्न, परोक्ष दोहराने इसलिए इस पद्धति आमतौर पर के रूप में निरूपित किया जाता है 333, हालांकि बस 3भी पर्याप्त होगा।

441

यहाँ साइटों के साथ एक और अधिक जटिल उदाहरण 441 है :

Beat     1 2 3 4 5 6 7 8 9
Hand     L R L R L R L R L
Siteswap 4 4 1 4 4 1 4 4 1
         │ │ └─┘ │ │
         └─┼─────┘ │
           └───────┘

ध्यान दें कि कैसे समान संख्या वाले थ्रो उसी हाथ पर जाते हैं जहां से उन्हें फेंका गया था, जबकि विषम संख्या वाले थ्रो दूसरे हाथ में जाते हैं।

423

कभी-कभी आप केवल एक गेंद को फेंकने के बजाय बीट के माध्यम से पकड़ना चाहते हैं। इसका मतलब है कि यह गेंद अगली बार इस हाथ की बारी है - यानी 2 बीट्स बाद में फेंक दी जाती है। तो एक गेंद पर कब्ज़ा एक के बराबर है 2पैटर्न में:

Beat     1 2 3 4 5 6 7 8 9
Hand     L R L R L R L R L
Siteswap 4 2 3 4 2 3 4 2 3
         │ └─┼─┘ │ │
         │   └───┼─┘
         └───────┘

50,505

ए का 0मतलब है कि मौजूदा हाथ उस बीट पर खाली है, जैसा कि यह पैटर्न दिखाता है:

Beat     1 2 3 4 5 6 7 8 9
Hand     L R L R L R L R L
Siteswap 5 0 5 0 5 5 0 5 0
         └───┼───┼─┘   │
             └───┼─────┘
                 └───────>

मल्टीप्लेक्स करतब दिखाने

यह समस्या हालांकि वेनिला साइटों के साथ थोड़ी सरल होगी। मल्टीप्लेक्स पैटर्न में प्रवेश करें! मल्टीप्लेक्स की जुगलबंदी का मतलब है कि आप एक ही समय में एक से कई गेंदें फेंकते हैं। उदाहरण के लिए, उपरोक्त 3-बॉल कैस्केड में, यदि आप हर तीसरे बीट पर एक अतिरिक्त गेंद फेंकते हैं, तो पैटर्न बन जाएगा [33]33और इस तरह दिखेगा:

Beat     1    2 3 4    5 6 7    8 9
Hand     L    R L R    L R L    R L
Siteswap [33] 3 3 [33] 3 3 [33] 3 3
          └┴──┼─┼──┴┘  │ │
              └─┼──────┘ │
                └────────┘

यहां एक और उदाहरण है, जहां मल्टीप्लेक्स थ्रो में दो अलग-अलग ऊंचाई / लंबाई होती है। यह या तो के रूप में निरूपित किया जा सकता है [34]11या [43]11:

Beat     1    2 3 4    5 6 7    8 9
Hand     L    R L R    L R L    R L
Siteswap [43] 1 1 [43] 1 1 [43] 1 1
          ││  └─┴──┘│  │
          │└────────┘  │
          └────────────┘

(ध्यान दें कि 1बीट पर बीट 2भूमि पर फेंका गया 3और तुरंत फिर से (एक अन्य के रूप में 1) बीट पर लैंड करने के लिए 4और दूसरे मल्टीप्लेक्स थ्रो का हिस्सा बनने के लिए फेंक दिया जाता है।)

इस पोस्ट की शुरुआत में एनीमेशन के लिए siteswap था [53]15121

पैटर्न वैधता

एक पैटर्न के लिए शब्द को वैध रूप से मान्य करने के लिए एक हाथ में गेंदों की संख्या को हमेशा उस बीट पर इंगित किए गए थ्रो की संख्या के अनुरूप होना चाहिए। इसका मतलब यह है कि, बीट में कोई भी गेंद नहीं होनी चाहिए 0, जिसमें किसी भी अन्य एकल अंक के साथ बीट पर केवल एक ही गेंद होनी चाहिए, और एक मल्टीप्लेक्स बीट में n गेंदें होनी चाहिए , जहां n अंकों की संख्या है उस मल्टीप्लेक्स थ्रो में। पैटर्न को भी मूल रूप से दोहराने में सक्षम होना चाहिए।

अमान्य पैटर्न के उदाहरण हैं 543(सभी गेंदें एक ही बीट पर उतरेंगी), 240( बीट 2पर लैंड करेंगी 0) या 33[24](मल्टीप्लेक्स बीट में नो बॉल लैंड, लेकिन दो बॉल अन्य दोनों बीट्स पर होंगी)।

चुनौती

आप एक साइट स्वरूप लेंगे, जिसमें वाइल्डकार्ड शामिल हैं और उन वाइल्डकार्डों को भरकर एक मान्य पैटर्न आउटपुट करना है।

इनपुट के रूप में (स्टड, कमांड-लाइन तर्क, फ़ाइल या फ़ंक्शन पैरामीटर के माध्यम से) प्रारूप की एक स्ट्रिंग लें

n s

कहाँ nएक पूर्णांक है जिसका उपयोग करने के लिए गेंदों की संख्या का संकेत मिलता है, और sएक साइट स्वरूप पैटर्न है ( बिना व्हाट्सएप के )। आप मान सकते हैं कि यह वाक्यात्मक रूप से सही है - सभी वर्ग कोष्ठक मेल खाते हैं और नेस्टेड नहीं हैं, और कोई अप्रत्याशित वर्ण नहीं हैं। सभी थ्रो सिंगल-डिजिट थ्रो ( 0- 9) होंगे। हालाँकि , कुछ बीट्स को केवल एक के रूप में दर्शाया जा सकता है _, जिसे आउटपुट में सिंगल या मल्टीप्लेक्स थ्रो से भरना होता है।

नोट: कुछ ऐसा है जो इनपुट का हिस्सा नहीं[_3] होगा । या तो पूरी बीट गायब है या पूरी बीट दी गई है।

एक मान्य पैटर्न आउटपुट करें, जिसे दी गई गेंदों की संख्या के साथ जोड़ दिया जा सकता है और सभी निर्दिष्ट बीट्स में इनपुट पैटर्न से सहमत हैं। यदि दिए गए इनपुट, आउटपुट के साथ कोई मान्य पैटर्न संभव नहीं है !आउटपुट भी हो जाएगा stdout के माध्यम से, एक फाइल करने के लिए या एक समारोह वापसी मान के रूप में।

नोट: आउटपुट में मल्टीप्लेक्स थ्रो में अनावश्यक वर्ग ब्रैकेट या शून्य नहीं होना चाहिए। इसलिए आउटपुट युक्त [3]या [03]स्वीकार नहीं किए जाते हैं, आपको 3इसके बजाय आउटपुट करना होगा। मल्टीप्लेक्स थ्रो में अंकों का क्रम प्रासंगिक नहीं है।

नोट: आप ऐसे पैटर्न छोड़ सकते हैं जो चक्रीय क्रमपरिवर्तन के तहत डुप्लिकेट हैं। जैसे इनपुट के लिए 3 __(दो वाइल्डकार्ड पर ध्यान दें), दोनों 42और 24मान्य उत्तर हैं (दूसरों के बीच), लेकिन वे वास्तव में एक ही पैटर्न का वर्णन करते हैं। आप दोनों में से या सिर्फ एक को आउटपुट कर सकते हैं, लेकिन आपको इसे लगातार करना होगा।

यह कोड गोल्फ है , सबसे छोटा कोड जीत (प्रश्न के तल पर सूचीबद्ध बोनस के अधीन)।

यदि आप मान्य हैं और वे क्या दिखते हैं, यह देखने के लिए आप पैटर्न के साथ खेलने के लिए जुगलिंगलैब का उपयोग कर सकते हैं ।

उदाहरण

Input           Possible Outputs     Comments

3 _             3
                [21]
                [111]

3 4_3           423

4 4_2           4[51]2
                4[42]2
                4[321]2

3 _23_          6231
                4233
                323[31]
                2235
                223[41]
                0237
                023[43]
                [42]231
                [32]23[11]
4 5_3           !                    5 and 3 will both land at the third beat, but
                                     there is only a single throw at that beat. This
                                     cannot be fixed with any throw in the blank.

2 5_4           !                    Any possible throw in the wildcard (including a
                                     0) will make a pattern for at least 3 balls.

3 54_           !                    The only solution that would correspond to a
                                     3-ball pattern is 540, which is not semantically
                                     valid because the 5 and 4 both land at beat 3.
                                     There are valid solutions, but they require at
                                     least 4 balls.

बोनस

  • यदि आपका उत्तर 35 तक "अंक" को संभाल सकता है, तो अक्षरों द्वारा निरूपित (10 = ए, 11 = बी, ...), 20 वर्णों को घटाएं । आप यह तय कर सकते हैं कि क्या वे पत्र अपर-केस, लोअर-केस या केस-असंवेदनशील होने चाहिए। (यदि आप कुछ पागल पैटर्न को देखना चाहते हैं तो JugglingLab उन्हें लोअर-केस में संभाल सकते हैं।)
  • यदि आपका जवाब आउटपुट तो सभी मान्य समाधान, घटाना 20 वर्ण

जवाबों:


6

अजगर, 587 - 20 = 567 वर्ण

from itertools import *
E,J,L,R,X=enumerate,''.join,len,range,list
def f(x):
 [u,p]=str.split(x);n=int(u);a=[[[x],x][type(x)==X]for x in eval("["+J(c if c=="["else"-1,"if c=="_"else c+","for c in p)+"]")];l,w=L(a),[i for i,x in E(a)if x==[-1]]
 for j in product([[0]]+X(chain(*[combinations_with_replacement(R(1,10),i+1)for i in R(n+1)])),repeat=L(w)):
  for k,m in zip(w,j):a[k]=m
  b=[0]*l
  for k,x in E(a):
   for y in x:b[(k+y)%l]+=1
  if all(x==L(y)for x,y in zip(b,a))&((sum(map(sum,a))/l)==n):
   u=0;yield J([['['+J(map(str,x))+']',str(x[0])][L(x)==1]for x in a])
 if u:yield"!"

बस जिज्ञासा से बाहर है कि आप अपने समाधान के समय जटिलता पता करने के लिए होता है? एल्गोरिथ्म (अभी तक) को समझाने के बारे में चिंता न करें, ताकि दूसरों के लिए मज़ा खराब न करें जो अभी भी कोशिश कर रहे हैं। ;)
मार्टिन Ender

मुझे लगता है कि यह कुछ ऐसा है L*n^(n*choose(n+11,n+2))जहां nवाइल्डकार्ड Lकी संख्या है और पैटर्न में वर्णों की संख्या है। बिल्कुल कुशल नहीं।
user1502040

मैंने अभी देखा कि आप ऐसे मामलों में ओवर-काउंटिंग कर रहे हैं जो चक्रीय क्रमपरिवर्तन की अनुमति देते हैं (जैसे 3 __कि बीट स्वैप के साथ हर परिणाम दो बार होता है), लेकिन मुझे लगता है कि यह निर्दिष्ट करने के लिए मेरी गलती नहीं है। मैं एक खंड जोड़ूंगा, हालांकि उन लोगों को छोड़ने की अनुमति देने के लिए जो बाइट को बचाने में मदद करते हैं।
मार्टिन एंडर

खैर, एक इनाम है तो! ऐसा लगता है कि सवाल या तो बहुत उबाऊ था या बाकी सभी के लिए बहुत कठिन था। ;)
मार्टिन एंडर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.