कुछ फूल उगाओ!


11

वसंत हाल ही में आया है, और यह लगभग समय है जब फूल अंकुरित होने लगते हैं। इसलिए मैं चाहता हूं कि आप उन्हें विकसित होने में मदद करें।

आपका कार्य:

दो संख्याओं को देखते हुए m, और n, आउटपुट mफूल बेतरतीब ढंग से एक n*nग्रिड पर रखा गया ।

एक एकल फूल इस तरह दिखता है:

&
|

एक फूल की स्थिति को परिभाषित किया जाता है कि &वह कहां है। जब बेतरतीब ढंग से दो फूल रखते हैं, तो कोई भी एक ही जगह नहीं हो सकता है। यदि एक फूल &दूसरे फूल को ओवरलैप करता है |, तो प्रदर्शित करें &। फूलों की निचली पंक्ति में कोई भी शामिल नहीं हो सकता है &

इनपुट किसी भी मानक विधि के माध्यम से एक संख्या या एक स्ट्रिंग के रूप में हो सकता है।

आउटपुट स्ट्रिंग्स की एक सूची हो सकती है, प्रत्येक स्ट्रिंग ग्रिड की एक पंक्ति का प्रतिनिधित्व करती है, या सूची के समान दिशानिर्देश के बाद एक सीमांकित स्ट्रिंग। आउटपुट के मानक तरीके। अनुगामी whatevers की अनुमति है, और आप अपने फूलों को अलग करने के लिए टैब का उपयोग कर सकते हैं। ध्यान दें कि प्रत्येक ग्रिड को पूरी तरह से रिक्त स्थान या कुछ के साथ भरा होना चाहिए।

ध्यान दें कि इनपुट हमेशा मान्य होगा, आप हमेशा कानूनी रूप से mफूलों को nबाय nग्रिड में फिट करने में सक्षम होंगे ।

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

चूंकि पूरे "यादृच्छिक प्लेसमेंट" बिट के कारण केवल बहुत ही चुस्त परीक्षण मामलों की गारंटी दी जा सकती है, इसलिए उत्तर दिए जाने के साथ यह एकमात्र प्रकार का परीक्षण मामला होगा। लेकिन मैं यह सुनिश्चित करने के लिए सभी प्रस्तुतियाँ ऑनलाइन करने की कोशिश करूंगा कि वे कुछ परीक्षण मामलों का उपयोग करके भी मान्य हैं।

परीक्षण मामलों के लिए इनपुट फॉर्म में दिया गया है m, n

Input: 2, 2
Output:

&&
||
--------------
Input: 6, 3
Output:

&&&
&&&
|||

ध्यान दें कि Output:परीक्षण मामलों में शब्द के बाद की नई रूपरेखा वैकल्पिक है।

अन्य परीक्षण मामले:

  1. 1, 10
  2. 0, 100
  3. ५, 8
  4. ६, ३

कोड गोल्फ तो सबसे कम कोड जीतता है!

इस चुनौती को बनाने और सीक्रेट सांता के उपहार बॉक्स में पोस्ट करने के लिए कॉमरेडस्पार्कलेपनी का धन्यवाद! सैंडबॉक्स पोस्ट


2
जब आप "बेतरतीब ढंग से" कहते हैं, तो क्या हर संभावित परिणाम के लिए समान संभावना होनी चाहिए?
एक्सनोर

जवाबों:


5

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

²‘;⁹R¤ṬṖs⁸×’¤Ẋ€ṙ2B¤F€ZḄị“&|& ”s⁸Y

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

कैसे?

²‘;⁹R¤ṬṖs⁸×’¤Ẋ€ṙ2B¤F€ZḄị“&|& ”s⁸Y - Main link: n, m        e.g. 3, 2
²                                 - square n                    9
 ‘                                - increment                   10
     ¤                            - nilad followed by link(s) as a nilad:
   ⁹                              -     link's right argument   2
    R                             -     range                   [1,2]
  ;                               - concatenate                 [10,1,2]
      Ṭ                           - untruth (1s at indexes)     [1,1,0,0,0,0,0,0,0,1]
       Ṗ                          - pop                         [1,1,0,0,0,0,0,0,0]
            ¤                     - nilad followed by link(s) as a nilad:
         ⁸                        -     link's left argument    3
           ’                      -     decrement               2
          ×                       -     multiply                6
        s                         - split into chunks           [[1,1,0,0,0,0],[0,0,0]]
             Ẋ€                   - shuffle €ach       (maybe:) [[0,1,0,0,1,0],[0,0,0]]
                  ¤               - nilad followed by link(s) as a nilad:
                2B                -     2 in binary             [1,0]
               ṙ                  - rotate (vectorises)         [[[0,0,0],[0,1,0,0,1,0]],[[0,1,0,0,1,0],[0,0,0]]]
                   F€             - flatten €ach                [[0,0,0,0,1,0,0,1,0],[0,1,0,0,1,0,0,0,0]]
                     Z            - transpose                   [[0,0],[0,1],[0,0],[0,0],[1,1],[0,0],[0,0],[1,0],[0,0]]
                      Ḅ           - from binary (vectorises)    [0,1,0,0,3,0,0,2,0]
                        “&|& ”    - literal                     ['&','|','&',' ']
                       ị          - index into                  [' ','&',' ',' ','&',' ',' ','|',' ']
                               ⁸  - link's left argument        3
                              s   - split into chunks           [[' ','&',' '],[' ','&',' '],[' ','|',' ']]
                                Y - join with newlines          [' ','&',' ','\n',' ','&',' ','\n',' ','|',' ']
                                  - implicit print

मेरा मन उड़ गया है
क्रिस्टोफर

क्या आपने अर्थ का अदला-बदली किया mऔर nआप क्यों square m? wth एक निलाद है ?
टाइटस

क्या ये 33 अक्षर वास्तव में केवल 33 बाइट्स हैं?
टाइटस

1
@ टिट्स मैंने अर्थों में अदला-बदली नहीं की, मैंने इनपुट ऑर्डर को स्वैप किया (और ऐसा करने में स्पष्टीकरण गड़बड़ हो गया), इसलिए इसे पकड़ने के लिए धन्यवाद। एक निलाद, (एक मोनाद या एक दाद या ... के विपरीत) एक ऐसा फ़ंक्शन है जो कोई इनपुट नहीं लेता है और एक मान लौटाता है - जैसे कि एक स्थिरांक एक निलाद है, जैसा कि एक फ़ंक्शन या प्रोग्राम के लिए एक एकल इनपुट है। ये वास्तव में 33 अलग-अलग बाइट्स हैं - वर्ण केवल 256 बाइट्स का एक एन्कोडिंग है जेली का उपयोग हेडर में शब्द बाइट्स से जुड़ा हुआ है।
जोनाथन एलन

आपने मुझे लगभग खो दिया है rotate। अच्छा काम; उत्कृष्ट टूटने!
टाइटस

4

PHP (> = 7.1), 135 131 128 116 110 109 बाइट्स

for([,$m,$n]=$argv,$z=$q=$n*$n;$q;)echo" |&"[$m&&rand(0,--$z-$n)<$m?$s[$q]=2+!$m--:$s[$q+$n]/2],"
"[--$q%$n];

कमांड लाइन तर्कों से इनपुट लेता है; इसे ऑनलाइन चलाएं -nrया परीक्षण करें

टूट - फूट

for([,$m,$n]=$argv,     # import arguments
    $z=$q=$n*$n;        # $q = number of total fields, $z-$n = available for flowers
    $q;                 # loop $q down to 0
)   
    echo" |&"[              # print:
        $m&&rand(0,--$z-$n)<$m  # if (probability $m/($z-$n)), decrement $z
            ?$s[$q]=2+!$m--     # then index 2 (flower), set $s[$q], decrement $m
            :$s[$q+$n]/2        # else if flower above, then 1 (stalk), else 0 (space)
        ],
        "\n"[--$q%$n]           # print newline every $n characters
    ;

1
आपने झंडे के लिए बाइट्स को सही से जोड़ा है?
क्रिस्टोफर

@ क्रिस्टोफर -rस्वतंत्र है ; यह PHP को कमांड लाइन तर्क से कोड चलाने के लिए कहता है। -nडिफ़ॉल्ट सेटिंग्स के लिए PHP रीसेट करता है।
टाइटस

1
@JonathanAllan संस्करण पूर्व निर्धारित आपकी पिछली यात्रा पर निर्भर करता है; शायद एक कुकी।
टाइटस

3

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

from random import*
n,m=input()
b=[1]*m+[0]*(n*~-n-m)
shuffle(b)
for r in range(n):print''.join(' &|'[f^-s]for s,f in zip([0]*n+b,b+[0]*n)[r*n:r*n+n])

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

कैसे?

एसटीडीआईएन input()से लेता है और प्रदान किए गए टपल को अनपैक करता है (जैसे दशमलव पूर्णांक के एक अल्पविराम से अलग स्ट्रिंग 3,6) में nऔर m

एक क्रमबद्ध, एक आयामी n*(n-1)लंबे "फूलदार" बनाता है, समवर्ती bद्वारा:
- एक सूची जिसमें "फूल" [1]दोहराया जाता mहै; और
- एक सूची जिसमें "स्पेस" [0]बार- n*~-n-mबार * होता है।

* टैडपोल ऑपरेटर ~( ~x=-1-x) n*~-n-mअधिक सामान्य दिखने के स्थान पर 2 बाइट बचाता है n*(n-1)-m

Shuffles ( random's shuffleफ़ंक्शन का उपयोग करके ) इस फूलों को स्थान के बीच बेतरतीब ढंग से फूल और रिक्त n*(n-1)स्थान रखने के लिए।

0-अनुक्रमित पंक्तियों के माध्यम से कदम r, और printsप्रत्येक में एक आयामी एक से दो आयामी फूल बनाने के लिए ...

अंतिम दो आयामी ( n*n) फूल वाले डंठल sहोते हैं, फूलों के सिर के नीचे एक पंक्ति f, यदि और केवल अगर दिखाने के लिए कोई फूल सिर नहीं है। यह XORing (द्वारा हासिल की है ^) fके साथ -sजहां fऔर sकर रहे हैं 1और 0पहले और लंबाई 3 स्ट्रिंग में सूचकांक के लिए परिणाम का उपयोग करने से रों ' &|':

f   s   f^-s   ' &|'[f^-s]
0   0    0     ' '
0   1   -1     '|'  < negative indexing used here
1   0    1     '&'
1   1   -2     '&'  < ...and here.

प्राप्त करने के लिए fऔर समारोह के साथ एक के बाद एक आयामी flowerbed की दो प्रतियां, साथ प्रयोग किया जाता है रिक्ति (फूल सिर) और के साथ एक प्रमुख स्थानों (डंठल)। प्रत्येक पंक्ति (बाइट को बचाने के लिए) के लिए पूरी चीज़ बनाई गई है, और आवश्यक पंक्ति का उपयोग करके कटा हुआ है ।szipnn[r*n:r*n+n]



2

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

from random import*
n,m=input();d=n*n-n
s=''
while d+n:b=0<random()*d<m;m-=b;d-=1;s+=' |&'[-b|(s[~n:-n]=='&')]+'\n'[d%n:]
print s

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

एक समय में आउटपुट स्ट्रिंग एक वर्ण बनाता है। बेतरतीब ढंग से चुनता है कि क्या वर्तमान सेल संभावना के साथ एक फूल है mजो शेष स्थानों की संख्या से विभाजित शेष फूलों की संख्या के बराबर है । हर nवर्ण में एक नई पंक्ति जोड़ता है । एक रिक्त कोशिका एक तने से भर जाती है |यदि nअंत से प्रतीक एक है &


1

PHP, 111 बाइट्स

for([,$b,$s]=$argv;$i<$s**2;)echo${+$i}="| &"[(rand(1,$s**2-$s-$i)>$b?0:$b--)>0?2:${$i-$s}!="&"],"\n"[++$i%$s];

ऑनलाइन संस्करण

-1 एक शारीरिक न्यूलाइन के लिए बाइट

एक समाधान 115 बाइट्स अधिकतम का उपयोग कर

for([,$b,$s]=$argv;$i<$s**2;)echo${+$i}="&| "[rand(1,max($s**2-$s-$i,1))>$b?1+(${$i-$s}!="&"):!$b--],"\n"[++$i%$s];

137 बाइट्स के साथ यह तरीका स्ट्रिंग के पहले भाग को बदल देता है

for([,$b,$s]=$argv,$a=str_shuffle(($p=str_pad)($p("",$b,_),$s**2-$s));$i<$s**2;)echo$a[$i]<_?" |"[$a[$i-$s]==_&$i>=$s]:"&","\n"[++$i%$s];

1

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

f=(n,m,a=[...(` `.repeat(n)+`
`).repeat(n)],r=Math.random()*-~n*~-n|0)=>m?(a[r]==` `?a[m--,r]=`&`:0,f(n,m,a)):a.map((c,i)=>c==` `&&a[i+~n]==`&`?`|`:c).join``
<div oninput=o.textContent=f(n.value,m.value)><input id=n type=number min=2 value=2><input id=m type=number min=1><pre id=o>

स्पष्टीकरण: एक सरणी बनाता है जो फूलों की ग्रिड के साथ-साथ newlines का प्रतिनिधित्व करता है। फ़िर से बेतरतीब ढंग से खाली वर्गों की खोज करता है जिसमें फूलों को तब तक रखा जा सके जब तक कि वांछित संख्या में फूल न पहुँच जाएँ। अंत में फूलों के तने उत्पन्न होते हैं जहां उनके लिए जगह होती है।


किसी कारण से यह n = 2 और m = 3 होने पर त्रुटि देता है।
झबरा

@ शैगी ऐसा इसलिए है क्योंकि वहाँ केवल 2 फूलों के लिए जगह है।
नील

आह, मैं इसे गलत तरीके से पढ़ रहा था। क्षमा याचना।
झबरा

1

चारकोल , 27 बाइट्स

Nθ↷FN«J‽θ‽⊖θW⁼KK&J‽θ‽⊖θ&¬KK

इसे ऑनलाइन आज़माएं! लिंक कोड के वर्बोज़ संस्करण के लिए है। स्पष्टीकरण:

Nθ

इनपुट n

डिफ़ॉल्ट मुद्रण दिशा को नीचे की ओर बदलें।

FN«

mकई बार इनपुट और लूप।

J‽θ‽⊖θ

ग्रिड पर यादृच्छिक स्थान पर जाएं।

W⁼KK&J‽θ‽⊖θ

यदि पहले से ही एक फूल है, तो एक उपयुक्त स्थान मिलने तक यादृच्छिक स्थानों पर कूदते रहें।

&

फूल सिर पर छापें।

¬KK

यदि पहले से ही नीचे फूल का सिर नहीं है, तो डंठल को प्रिंट करें।

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