यादृच्छिक कद्दू पैच


12

मैं एक जन्मदिन की पार्टी के लिए दूसरे दिन एक कद्दू पैच के माध्यम से चल रहा था, और कद्दू दाखलताओं को चक्करदार, छोरों और ऑफशूट के साथ एक निफ्टी पैटर्न बनाने पर ध्यान दिया। हम यहाँ कुछ ASCII कला के साथ अनुकरण करने जा रहे हैं।

          (())
            \
   p--q      p-----q
  /    \    /       \
(())    b--d       (())

बेल निर्माण नियम

  • केवल एक मुख्य बेल है, जो केवल \ / - p q b dपात्रों से बना है ।
  • बेल केवल स्क्रीन के बाईं ओर से दाईं ओर यात्रा करती है। दूसरे शब्दों में, मान लीजिए कि आप एक चींटी हैं जो बाएं-सबसे बेल चरित्र पर शुरू होती है। जब आप मुख्य बेल पर अगले आसन्न चरित्र की ओर बढ़ते हैं , तो आपको एक कॉलम को दाईं ओर ले जाना चाहिए - कभी भी बाईं ओर नहीं।
  • जब बेल दिशा बदलती है, तो p q b dलूप को अनुकरण करने के लिए पात्रों में से एक की आवश्यकता होती है। pपूर्व में उत्तर पूर्व यात्रा लताओं मिलती है, qदक्षिण-पूर्व में पूर्व के लिए, bदक्षिण-पूर्व से पूर्व की ओर है, और dपूर्व से पूर्वोत्तर के लिए। ध्यान दें कि पत्र का "लूप" क्षैतिज बेल से जोड़ता है, और पत्र का "स्टेम" विकर्ण से जोड़ता है।
  • बेल की शुरुआत में से एक pया b(आपकी पसंद, यादृच्छिक होना जरूरी नहीं है) होना चाहिए, और क्षैतिज रूप से शुरू होता है। बेल का अंत qया d(आपकी पसंद, यादृच्छिक होना नहीं है) में से एक होना चाहिए, और क्षैतिज रूप से समाप्त होना चाहिए।
  • ध्यान दें कि छोरों को तुरंत अन्य छोरों (जैसे, pdबेल का एक वैध विकल्प) के निकट रखा जा सकता है , लेकिन बाद में कद्दू को रखने में अधिक मुश्किल हो सकती है। आप हमेशा - / \एक लूप के तुरंत बाद एक हो सकते हैं (जैसा कि मैंने अपने उदाहरणों में किया था), लेकिन इसकी आवश्यकता नहीं है।

कद्दू नियम

  • कद्दू पूरी तरह से (())(इस सटीक स्ट्रिंग) से बना है।
  • मुख्य बेल से, कद्दू ऑफशूट से जुड़े होते हैं। ये ऑफशूट केवल p q b dछोरों से जुड़े हो सकते हैं, ठीक एक \या /लंबाई में होते हैं, और कद्दू से जुड़ते हैं इसलिए ऑफशूट का "अंत" बीच में होता है।
  • वे मुख्य बेल के ऊपर या नीचे कनेक्ट कर सकते हैं।
  • ऑफशूट "बाएं" पर जा सकते हैं।
  • केवल एक कद्दू प्रति ऑफशूट संलग्न कर सकता है, और केवल एक ऑफशूट प्रति लूप।

अनियमितता

  • जब क्षैतिज रूप से यात्रा करते हैं, तो बेल के पास क्षैतिज रूप से जारी रखने का 50% मौका होता है, उत्तर पूर्व की ओर जाने का 25% मौका और दक्षिण-पूर्व की ओर मुड़ने का 25% मौका होता है।
  • तिरछे यात्रा करते समय, बेल में क्षैतिज मोड़ का 90% और तिरछे जारी रहने का 10% मौका होता है।
  • कद्दू की इनपुट संख्या का समर्थन करने के लिए पर्याप्त मोड़ होना चाहिए, हालांकि अधिक मोड़ की अनुमति है।
  • एक बार बेल का निर्माण हो जाने के बाद, कद्दू को किसी भी कोने पर बेतरतीब ढंग से रखा जा सकता है जो पहले से ही कद्दू के कब्जे में नहीं है।
  • कद्दू बेल या अन्य कद्दू को ओवरलैप नहीं कर सकता है।

चुनौती

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

इनपुट

nपैच में कद्दू की संख्या का प्रतिनिधित्व करने वाला एक एकल पूर्णांक , किसी भी सुविधाजनक प्रारूप में । कोड की संक्षिप्तता के लिए, आप मान सकते हैं कि इनपुट है 0 < n < 256

उत्पादन

परिणामस्वरूप कद्दू पैच, या तो मुद्रित / स्क्रीन पर प्रदर्शित होता है या एक स्ट्रिंग / स्ट्रिंग-सरणी / आदि के रूप में वापस आ जाता है।

नियम

  • यह इसलिए गोल्फिंग के लिए सभी सामान्य नियम लागू होते हैं, और सबसे छोटा कोड (बाइट्स में) जीतता है।
  • "रैंडम" की हमारी मानक परिभाषा का उपयोग करें ।
  • या तो एक पूर्ण कार्यक्रम या फ़ंक्शन स्वीकार्य हैं।
  • मानक खामियों को मना किया जाता है।
  • व्हाट्सएप के लीडिंग और ट्रेलिंग / न्यूलाइन्स सभी पूरी तरह से वैकल्पिक हैं।

उदाहरण

इनपुट के लिए n = 3, यहां उपरोक्त नियमों का पालन करते हुए कद्दू पैच के कुछ वैध उदाहरण हैं (रिक्त newlines द्वारा अलग किए गए)।

          (())
            \
   p--q      p-----q
  /    \    /       \
(())    b--d       (())

(()) (())
  \   /
   b-q (())
      \ /
       b-q

p-----------------------q (())
                       / \ /
                     (()) b-q
                           /
                         (())

यहां n = 3स्पष्टीकरण के साथ इनपुट के लिए कुछ INVALID उदाहरण दिए गए हैं #

    (()) (())
     /    /
p---q----q
 \
(())
# The vine continued horizontally after a loop was placed.

(()(())
  \ /
   p---q
        \
       (())
# The pumpkins are both overlapping and sprouting from the same loop.

p----------------q
 \      \         \
(())   (())      (())
# The pumpkin is attached to the middle of the vine, not at a loop.

7
और अब सिंटैक्स के रूप में इसका उपयोग करके 2 डी भाषा डिज़ाइन करें। :)
मार्टिन एंडर

जवाबों:


1

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

nइनपुट के रूप में लेता है

हमेशा कोने के 'बाहर' पर pumkpins रखें (बेतरतीब ढंग से बाएँ / दाएँ)

जबकि बेल का निर्माण किया जाता है, कद्दू जोड़े जाते हैं, और जब पर्याप्त कद्दू होते हैं, तो बेल बंद हो जाती है।

r=lambda:__import__('random').random()
s=1
v=[s]*4
U=[-9]
D=[-9]
i=input()
while len(U)+len(D)<i+2:s=[[0,1][r()<.9],[[0,2][r()<.5],1][r()<.5],[2,1][r()<.9]][s];exec['',[['','U+=[len(v)]'][U[-1]<len(v)-7],'',['','D+=[len(v)]'][D[-1]<len(v)-7]][v[-1]-s+1]][r()<.8];v+=[s]*[1,2][v[-1]!=s]
v+=[1]*5
m=M=s=0
for i in v:s+=i-1;m=[m,s][m>s];M=[M,s][M<s]
R=[[' ']*(M-m+5)for x in v]
m=-m+2
R[2][m]='p'
for x in range(3,len(v)-3):X=v[x-1];R[x][m]='/d p-b q\\'[v[x]*3+X];m+=v[x]-1
R[-3][m]='q'
M=[len(a)-len(a.lstrip())for a in map(''.join,R)]
R=map(list,zip(*R))
B,L,a='-/U'
K="\\"*4
W="""exec("for p in "+a+"[1:]:x=M[p];b=r()<.5;exec('R[x"+B+"1][p'+['+1]=\\""+L+"\\"','-1]=\\""+K+"\\"'][b]);i=p-[0,3][b];l='(';exec('R[x"+B+"2][i]=l;i+=1;'*2+'l=\\")\\";')*2")"""
exec W+";B,a='+D';L,K=K,L;"+W
for x in R:print''.join(map(str,x))

उदाहरण:

n=4

                (())   
                 /     
                p---q  
 (())          /       
   \       p--d        
  p-q     /    \       
     \   /    (())     
      b-d              
       \               
      (())             

n=20

                            (())                                                                                             
                              \                                                                                              
                            p--q                                                                                             
                           /    \                                                                                            
                          /      b--q                                                                                        
           (())     p----d      /    \                                                                                       
  (())       \     /          (())    b-q (())                                                                               
    \         p---d                      \  \                                                                                
  p--q       /     \                      b--q                                                                               
      \     /     (())                   /    \                        (())                                           (())   
       b---d                           (())    b-q                       \                                             /     
        \                                         \          (())         p-q                                         p---q  
       (())                                        \           \         /   \                                       /       
                                                    b-----------q     p-d     b-q                            (())p--d        
                                                                 \   /       /   \                            / /    \       
                                                                  b-d      (())   b-q   (())  (())   p-q     p-d    (())     
                                                                   /                 \   /      \   /   \   /                
                                                                 (())                 b-q        p-d     b-d                 
                                                                                       \ \      /         \                  
                                                                                      (())b----d         (())                
                                                                                              /                              
                                                                                            (())                             

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