स्लैश के साथ रैंडम वॉक ड्रा करें


14

एक प्रोग्राम या फ़ंक्शन लिखें जो एक धनात्मक पूर्णांक N में लेता है (stdin / कमांड लाइन / फ़ंक्शन arg के माध्यम से) और प्रिंट करता है या दो आयामी यादृच्छिक चलने का एक स्ट्रिंग प्रतिनिधित्व करता है जो N चरण लंबा है, जो स्लैश से निकाला गया है: / \(प्लस स्पेस और) रिक्ति के लिए newlines)।

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

यहां एन = 6. के लिए एक यादृच्छिक चलना है। ध्यान दें कि जब यह (-1, 3) तक पहुंचता है, तो यह अपने आप वापस आ जाता है।

एन = 6 यादृच्छिक चलना उदाहरण

स्लैश के साथ इसे आकर्षित करने के लिए, हमें अनिवार्य रूप से पूरी चीज़ को 45 ° दक्षिणावर्त घुमाना होगा। कुल्हाड़ी संस्करण में कुल्हाड़ियों और स्टार्ट एंड एंड पॉइंट नहीं खींचे जाते हैं।

/
\
 \
 /\

इस तरह एक और अधिक जटिल चलना (एन = 20, हालांकि यह बताने का कोई तरीका नहीं है):

एन = 20 यादृच्छिक चलना उदाहरण

यह बन जाएगा:

     /
/\/ /\
\/\/
/\/
\/

आपके प्रोग्राम को इस प्रकार के स्लैश संस्करणों को रैंडम वॉक बनाने की आवश्यकता है। आपको हर बार नई दिशा का चयन करना चाहिए , जिससे चलना निश्चित हो, इसलिए निश्चित N के लिए कार्यक्रम का प्रत्येक भाग लगभग निश्चित रूप से एक अलग चलना होगा। (छद्मता ठीक है।)

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

तो एन = 1 के लिए, आउटपुट हमेशा /या होता है \, लेकिन कभी कुछ ऐसा नहीं होता है:

   
 / 

अनुगामी रिक्त स्थान को तब तक अनुमति दी जाती है जब तक वे सबसे दाहिने स्लैश के कॉलम से आगे नहीं जाते हैं।

सबसे कम बाइट्स के साथ सबमिशन जीत जाता है। यहाँ एक आसान बाइट काउंटर है।


इसलिए यह संभव है (हालांकि दुर्लभ) कि आउटपुट एन = 20 होने पर भी एक ही स्लैश हो सकता है?
डेवलेगर

2
@DaveAlger ज़रूर। हालांकि अगर आपका प्रोग्राम ऐसा करता है कि मैं बहुत कुछ चाहता हूं तो यह बहुत गलत है।
केल्विन के शौक

जवाबों:


3

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

K0VQJO2=GO2 XH,-ZJ-KG@"\/"xJG-=ZtyJ-=KtyG;=YmrhSdheSdCHjbclhYsmh@XkH\ k.xY

उरी ज़राफती के उत्तर का और भी अधिक अनुकूलित अनुवाद।


1
मुझे एक बेहतर पाइथ सॉल्यूशन मिला है: "\ - बेशक, कोई यादृच्छिकता नहीं है, लेकिन यह हर बार एक वैध चलना है!
theonlygusti

@theonlygusti तब मेरे पास एक बेहतर समाधान है: \\।
orlp

नहीं मिलता है ...
Theonlygusti

पायथन में @theonlygusti बैकस्लैश 1 वर्ण स्थिरांक शुरू करता है। ओह रुको, कोई बात नहीं, छोटे xD नहीं है
orlp

5

पायथन 2, 300 285 257 246 236 बाइट्स

चीजों को किक करने के लिए कुछ। इसे और नीचे करना संभव होना चाहिए। 10 बाइट्स शेविंग के लिए @Maltysen धन्यवाद।

from random import*
N=input()
x=y=0;G={}
exec'n=randrange(4);l=n<2;u=n&1;G[(x-l,y-u)]="\\/"[l^u];x-=2*l-1;y-=2*u-1;'*N
f=lambda i:range(min(x[i]for x in G),max(x[i]for x in G)+1)
for i in f(0):print"".join(G.get((i,j)," ")for j in f(1))

चलते-चलते (एक्स, वाई) ट्यूपल्स के एक शब्दकोश में वाक आउटपुट को उत्पन्न करता है, हमारे स्थान को अपडेट करते हुए। प्रत्येक यादृच्छिक चरण n दोनों u / d (u) और l / r (l) है।



1
आप सीधे लूप और प्रिंटिंग "".joinपर बहुत कुछ बचा सकते j in f(1)हैं।
माल्टीसेन

1

PHP 5.5 - 209 बाइट्स

<?for(;$X[]=$x+=1-2*$l,$Y[]=$y+=1-2*$u,$i++<$argv[1];){$m[$y-$u=$n&1][$x-$l=($n=rand(0,3))<2]='\\/'[$u^$l];}for($y=min($Y);$y<max($Y);$y++){for($x=min($X);$x<max($X);$x++)$s.=$m[$y][$x]?:' ';$s.="\n";}echo$s;

Ungolfed:

<?
for (; $X[] = $x += 1 - 2 * $l, $Y[] = $y += 1 - 2 * $u, $i++ < $argv[1];) {
    $m[$y - $u = $n & 1][$x - $l = ($n = rand(0, 3)) < 2] = '\\/'[$u ^ $l];
}
for ($y = min($Y); $y < max($Y); $y++) {
    for ($x = min($X); $x < max($X); $x++) {
        $s .= $m[$y][$x] ? : ' ';
    }
    $s .= "\n";
}
echo $s;

एक PHP पर काम शुरू कर दिया खरोंच से जवाब है, लेकिन अंतिम कोड बहुत अधिक @Uri Zarfaty के काम से मिलता-जुलता है तो मैं वास्तव में इसे पोस्ट करने के लिए तंत्रिका नहीं था। इसके बजाय कुछ संशोधनों के साथ पोर्टिंग एंड एंडेड उत्तर दिया गया। आउटपुट लूप में न्यूनतम / अधिकतम निर्धारित करने के लिए x / y मानों $Xऔर $Yसरणियों को धकेलता है।

उपयोग:

php golf.php 200

1

पायथ - 89

यह मूल रूप से उरी ज़राफती के जवाब पर एक अनुवाद है, हालांकि मैंने कुछ अनुकूलन किए।

KZVQJO4=G<J2=b.&J1 XH,-KG-Zb@"\\/".|Gb-=KtyG-=Ztyb)LrhSm@dbHheSm@kbHFNy0jkm?@H,Nb},NbHdy1

स्पष्टीकरण जल्द ही आ रहा है।

इसे यहाँ आज़माएँ

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