शिफ्टिंग डॉट


16

आपके प्रोग्राम को कई स्थान प्रिंट करने होंगे, उसके बाद एक बिंदु और एक नई रेखा। रिक्त स्थान की संख्या 0 <x <30 के साथ परिभाषित आपके डॉट की x स्थिति है

हर नई लाइन एक मोड़ है। आपका कार्यक्रम 30 बारी तक चलता है। आपका कार्यक्रम एक यादृच्छिक x स्थिति के साथ शुरू होता है और हर मोड़ इस स्थिति को यादृच्छिक रूप से 1 से बाईं या दाईं ओर स्थानांतरित करता है, जबकि परिभाषित क्षेत्र के अंदर रहता है। हर मोड़ पर आपके बिंदु को 1 से अपनी स्थिति बदलनी होगी।

आपका स्कोर वर्णों की संख्या है। आपको 10 बोनस अंक मिलते हैं, यदि हर मुद्रित लाइन में बिल्कुल 30 अक्षर (और न्यूलाइन) होते हैं। आपको 50 बोनस अंक मिलते हैं, यदि, जबकि यादृच्छिक, आपका कार्यक्रम परिभाषित क्षेत्र के बीच में रहने के लिए जाता है।

संपादित करें: 50 बोनस अंक आपकी बिच को बीच में खींचने के लिए हैं। उदाहरण के लिए, यह लागू होता है यदि आपका डॉट x = 20 पर है और उसके पास बाएं जाने के लिए 66% और दाईं ओर जाने के लिए 33% का मौका है। यह शुरुआती बिंदु से स्वतंत्र होना चाहिए और केवल बाएं / दाएं के प्रतिशत मूल्य को गतिशील रूप से बदलकर होना चाहिए।

किसी भी प्रकार के इनपुट की अनुमति नहीं है, आउटपुट को निष्पादित कंसोल पर होना चाहिए!

बेहतर समझ के लिए, यहाँ जावा में एक पठनीय उदाहरण है, जो आपको 723 का स्कोर देगा:

public class DotJumper{
    public static void main(String[] args){
        int i = (int)(Math.random()*30);
        int max = 29;
        int step = 1;
        int count = 30;
        while(count>0){
            if(i<=1){
                i+=step;
            }else if(i>=max){
                i-=step;
            }else{
                if(Math.random() > 0.5){
                    i+=step;
                }else{
                    i-=step;
                }
            }
            print(i);
            count--;
        }
    }
    public static void print(int i){
        while(i>0){
            System.out.print(' ');
            i--;
        }
        System.out.println('.');
    }
}

आपके उदाहरण में, मुझे लगता है कि इसके बजाय int i = (int)(Math.random()*30);होना चाहिए int i = 1 + (int)(Math.random()*29);। के रूप में, यह के 0 >= x > 30बजाय एक संख्या उत्पन्न करता है 0 > x > 30
विक्टर स्टैफ़ुसा

मुझे लगता है कि मूल कोड सही है।
user2846289

यह सही है, क्योंकि मैं पहले और प्रिंट को शिफ्ट करता हूं। भले ही यादृच्छिक मूल्य सीमा से अधिक हो, भले ही पहले सही होगा और फिर प्रिंट होगा।
रेगेमेफिन

@ कोस्ट्रोनर लेकिन इसका तात्पर्य यह है कि शुरुआती डॉट पोजीशन एक समान वितरण का अनुसरण नहीं करती है, पहली स्थिति अन्य पदों की तुलना में दुगुनी है। OTOH, समान रूप से वितरित किया जाना कोई आवश्यकता नहीं थी।
विक्टर स्टाफ़ुसा

ऐसा लगता है कि एक कार्यक्रम बनाना मुश्किल होगा जहां डॉट अधिक के आसपास कूदता है। तो इसके आंदोलन को प्रतिबंधित करने के लिए एक बोनस क्यों है?
क्रिस लाप्लांट

जवाबों:


18

एपीएल, ३ ९ - १० - ५० = -२१

0/{⎕←30↑'.',⍨⍵↑''⋄⍵+¯1*⍵>.5+?28}/31/?29

के साथ Dyalog पर परीक्षण किया गया है ⎕IO←1और ⎕ML←3यह काफी पोर्टेबल होना चाहिए।

व्याख्या

                   ?29  take a random natural from 1 to 29
                31/     repeat it 31 times
              }/        reduce (right-fold) the list using the given function:
          ⍵↑''          . make a string of ⍵ (the function argument) spaces
     '.',⍨              . append a dot to its right
⎕←30↑                   . right-pad it with spaces up to length 30 and output
                ◇       . then
             ?28        . take a random natural from 1 to 28
          .5+           . add 0.5, giving a number ∊ (1.5 2.5 ... 27.5 28.5)
        ⍵>              . check whether the result is <⍵ (see explanation below)
     ¯1*                . raise -1 to the boolean result (0 1 become resp. 1 -1)
   ⍵+                   . add it to ⍵ and return it as the new accumulator value
0/{                     finally ignore the numeric result of the reduction

हर चरण पर, यह कोड तय करता है कि क्या डॉट को बाईं ओर स्थानांतरित करना है या इस संभावना के आधार पर दाईं ओर कि एक यादृच्छिक संख्या (1.5 2.5 ... 27.5 28.5) के बीच चुना गया वर्तमान डॉट स्थिति से कम है।

इसलिए, जब वर्तमान डॉट पोजीशन (बाईं ओर रिक्त स्थान की संख्या) 1 होती है, तो वृद्धि हमेशा +1 होती है (उन सभी की संख्या 1.5 ... 28.5 हैं> 1), जब यह 29 होती है तो हमेशा -1 (उन सभी संख्याओं में से) हैं <29); अन्यथा यह +1 और -1 के बीच यादृच्छिक रूप से चुना जाता है, इस संभावना के साथ कि उन चरम सीमाओं के बीच एक रैखिक प्रक्षेप है। इसलिए डॉट हमेशा गतिमान रहता है और हमेशा पक्षों की ओर केंद्र की ओर बढ़ने की अधिक संभावना होती है। यदि यह बिल्कुल बीच में है, तो दोनों ओर जाने के लिए 50% मौका है।

एक प्रतिकृति मूल्य की कमी (दाएं-गुना) {...}/a/bसिर्फ एक चाल है जो मैं एक फ़ंक्शन a-1बार दोहराने के लिए आया था , मूल्य के साथ शुरू करने bऔर प्रत्येक पुनरावृत्ति का परिणाम होने के बाद संचायक ( ) अगले तर्क होगा। दूसरे और अगले इनपुट तर्कों ( ) के साथ-साथ अंतिम परिणाम की अनदेखी की जाती है। यह गार्ड के साथ एक नियमित पुनरावर्ती कॉल की तुलना में छोटा होता है।

उदाहरण चलाते हैं

0/{⎕←30↑'.',⍨⍵↑''⋄⍵+¯1*⍵>.5+?28}/31/?29
                   .          
                    .         
                   .          
                  .           
                 .            
                .             
               .              
                .             
               .              
                .             
               .              
              .               
             .                
              .               
             .                
              .               
               .              
              .               
               .              
                .             
                 .            
                  .           
                 .            
                  .           
                 .            
                  .           
                 .            
                .             
               .              
                .             

apl गोल्फ के लिए एक महान भाषा है (मेरे लिए पढ़ना कठिन है, हालांकि); यूपी!
blabla999

@ blabla999 एपीएल में कई सामान्य प्रतीक और कुछ अजीब हैं, लेकिन एक बार जब आप उनका कार्य सीख लेते हैं तो भाषा को पढ़ना और लिखना आसान होता है। निश्चित रूप से आसान है कि 'गोल्फ' भाषाओं का ASCII शोर है, लेकिन मैं यह कहना चाहूंगा कि यह नियमित भाषाओं की तुलना में आसान है। वाक्यविन्यास बहुत नियमित है, आपके पास केवल एक नियम है: अभिव्यक्तियों को दाएं से बाएं ओर निष्पादित किया जाता है, ताकि उन्हें बाएं से दाएं पढ़ा जा सके:+/2×⍳9 को "दो का योग: दो बार: 9 तक के नट" पढ़ा जाता है लेकिन विपरीत तरीके से निष्पादित।
टोबिया

क्या यह मेरे या यहाँ प्रति पंक्ति 31 वर्ण हैं?
गुस्सोर

मुझे 30 मिलता है, दोनों एक संपादक में ऊपर दिए गए उदाहरण से एक पंक्ति को कॉपी-पेस्ट करके और फिर से कोड की जांच करके। ⎕←30↑...30 वर्णों को जोड़ देगा, साथ ही एक नई पंक्ति, चाहे कोई भी स्ट्रिंग क्यों न हो...
तोबिया

12

गणितज्ञ 138 - 10 - 50 = 78

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

Mathematica में मार्कोव प्रक्रिया का उपयोग हमें कुछ उपयोगी आँकड़ों की गणना करने की अनुमति देता है , जैसा कि आप नीचे देखेंगे।

पहले कोड (रिक्त स्थान की आवश्यकता नहीं):

r = Range@28/28;
s = DiagonalMatrix;
ListPlot[RandomFunction[DiscreteMarkovProcess[RandomInteger@#, r~ s ~ -1 + s[29/28- r, 1]], 
                                              #], PlotRange -> #] &@{1, 29}

कुछ आउटपुट:

गणितज्ञ ग्राफिक्स

मेरे द्वारा उपयोग किया जाने वाला संक्रमण मैट्रिक्स है:

MatrixPlot[s[r, -1] + s[29/28 - r, 1]]

गणितज्ञ ग्राफिक्स

लेकिन जैसा कि मैंने कहा, दिलचस्प बात यह है कि प्रयोग DiscreteMarkovProcess[]करने से हमें क्या हो रहा है की एक अच्छी तस्वीर खींचने की अनुमति मिलती है।

15किसी भी समय गेंद के होने की संभावना देखते हैंt विशेष यादृच्छिक स्थिति से शुरू होने :

d = DiscreteMarkovProcess[RandomInteger@29, s[r, -1] + s[29/28 - r, 1]];
k[t_] := Probability[x[t] == 15, x \[Distributed] d]
ListLinePlot[Table[k[t], {t, 0, 50}], PlotRange -> All]

गणितज्ञ ग्राफिक्स

आप इसे 0 के बीच उतार-चढ़ाव देख सकते हैं और 0.3 के करीब मान सकते हैं, ऐसा इसलिए है क्योंकि शुरुआती अवस्था के आधार पर आप केवल 15 या विषम चरणों तक पहुंच सकते हैं :)

अब हम एक ही काम कर सकते हैं, लेकिन गणितज्ञ को सभी संभावित प्रारंभिक राज्यों से शुरू होने वाले आंकड़ों पर विचार करने के लिए कह रहे हैं। 15एक समय के बाद होने की संभावना क्या हैt ? "

d = DiscreteMarkovProcess[Array[1 &, 29]/29, s[r, -1] + s[29/28 - r, 1]];
k[t_] := Probability[x[t] == 15, x \[Distributed] d]
ListLinePlot[Table[k[t], {t, 0, 100}], PlotRange -> All]

गणितज्ञ ग्राफिक्स

आप इसे दोलन भी देख सकते हैं ... क्यों? जवाब सरल है: अंतराल में [1, 29]संख्याओं की तुलना में अधिक विषम हैं :)

यदि हम गेंद के होने की प्रायिकता पूछते हैं तो दोलन लगभग समाप्त हो गया है 14 OR 15 :

गणितज्ञ ग्राफिक्स

और आप राज्य संभावनाओं की सीमा (सेसरो अर्थ में) भी पूछ सकते हैं:

ListLinePlot@First@MarkovProcessProperties[d, "LimitTransitionMatrix"]

गणितज्ञ ग्राफिक्स

ओह, ठीक है, शायद मैं इस तरह के ऑफ-टॉपिक उत्तर के लिए कुछ डाउनवोट के लायक हूं। स्वतंत्र महसूस करना।


2
यह सबसे छोटा नहीं है, लेकिन यह वास्तव में अच्छा है।
कासरा राहजर्दी

Upvoted, और अब आपका स्कोर 2,222 नहीं रह गया है ...
cormullion

@ क्रॉलियन धन्यवाद! आप इसे कम कर सकते हैं: कठिन परिश्रम करके :)
डॉ। बेलिसियस

7

बैश, स्कोर 21 (81 बाइट्स - 50 बोनस - 10 बोनस)

o=$[RANDOM%28];for i in {D..a};{ printf " %$[o+=1-2*(RANDOM%29<o)]s.%$[28-o]s
";}

इस उत्तर में, डॉट को बीच में वापस "खींच" दिया जाता है। इसे 0 या 30 के शुरुआती बिंदु को हार्डकोड करके जांचा जा सकता है।


अच्छा समाधान! लेकिन कृपया शुरुआती बिंदु को हार्डकोड न करें;)
रेगैमफिन

1
@Kostronor - उफ़ - मैं चूक गया, और अब इसे ठीक कर दिया है।
डिजिटल ट्रामा

2
द्वारा एक चार्ट को बचाने के {1..30}द्वारा{P..m}
Geoff Reedy

अगर oहै 1और RANDOM%30रिटर्न क्या है 0? और अगले पुनरावृत्ति पर भी?
user2846289

@VadimR - मुझे लगता है कि सीमा की शर्तें अब तय हो गई हैं।
डिजिटल ट्रॉमा

5

रूबी 69 66 64-60 = 4

i=rand(30);30.times{a=' '*30;a[i]=?.;puts a;i+=rand>i/29.0?1:-1}

नमूना:

            .             
           .              
            .             
           .              
          .               
           .              
            .             
             .            
              .           
             .            
              .           
               .          
              .           
               .          
              .           
             .            
            .             
             .            
              .           
             .            
              .           
             .            
            .             
             .            
            .             
             .            
            .             
           .              
          .               
           .              

आप के i=rand 30;बजाय के साथ एक बाइट बचा सकते हैं i=rand(30);
जॉर्डन

5

स्मॉलटाक, 161 159 145-60 = 85

सभी कॉलम 30char लंबे हैं (म्यूटेबल स्ट्रिंग b में चल रहे हैं);

यादृच्छिक मूवमेंट चांस को p (rnd (0..29) -p) के साथ rnd मान को बायसिंग करके समायोजित किया जाता है, साइन (-1/0/1) लेते हैं और फिर (-1 / + 1) के माध्यम से (-1) समायोजित करते हैं। 1), जिसे चाल डेल्टा के रूप में लिया जाता है (प्रभावी रूप से गणना करता है: x चिन्ह <= 0 ifTrue: -1 ifFalse: 1)। चूंकि एसटी 1-आधारित इंडेक्सिंग का उपयोग करता है, मुझे +1 द्वारा सभी स्ट्रिंग रिफ को समायोजित करना होगा (plz सराहना -1) | 1 बिट रिडलिंग हैक ;-))।

p:=((r:=Random)next*29)rounded.(b:=String new:30)at:p+1put:$..0to:29do:[:i|b at:p+1put:$ .p:=(p+(((r next*29)-p)sign-1|1))min:29max:0.b at:p+1put:$..b printCR]

रूबी संस्करण (thanx & Up @fipgr) से एक विचार चोरी, मैं मिनट / अधिकतम जांच से छुटकारा पा सकता हूं:

p:=((r:=Random)next*29)rounded.(b:=String new:30)at:p+1put:$..1to:30 do:[:i|b at:p+1put:$ .p:=p+((r next-(p/29))sign-1|1).b at:p+1put:$.;printCR]

आउटपुट: (मैंने बाद में कॉल-नंबर और वर्टिकल बार को मैन्युअल रूप से जोड़ा है; ऊपर दिया गया कोड उन्हें उत्पन्न नहीं करता है)

 012345678901234567890123456789
|                     .        |
|                    .         |
|                   .          |
|                  .           |
|                 .            |
|                  .           |
|                 .            |
|                  .           |
|                 .            |
|                .             |
|                 .            |
|                .             |
|               .              |
|                .             |
|                 .            |
|                  .           |
|                 .            |
|                  .           |
|                 .            |
|                  .           |
|                 .            |
|                .             |
|               .              |
|                .             |
|               .              |
|                .             |
|               .              |
|              .               |
|               .              |
|              .               |
 012345678901234567890123456789

4

सी, 86

यह मानते हुए कि rand()फ़ंक्शन को बोने की आवश्यकता नहीं है।

k=30;main(i){i=rand()%k;while(k--){printf("%*c\n",i+=i==30?-1:i==1||rand()%2?1:-1,46);}}

स्पष्टीकरण:

सी में "%*c", *इसका मतलब है कि आउटपुट की लंबाई में न्यूनतम लंबाई होगी, और यह न्यूनतम लंबाई फ़ंक्शन कॉल के तर्क से निर्धारित होती है (इस मामले में, यह है i+=i==30?-1:i==1||rand()%2?1:-1। इसका cमतलब है कि अगला तर्क 46) एक चरित्र है () बिन्दु)।

सीमा की जाँच के लिए, मैं माफी माँगता हूँ कि मैं इसके बारे में भूल गया था। मैंने अब इसे 15 वर्णों की लागत पर, उत्तर में जोड़ दिया है। टर्नरी ऑपरेटर निम्नानुसार काम करता है boolean_condition?value_if_true:value_if_false:। ध्यान दें कि C सही में 1 और गलत 0 है।


क्या आप अपने कोड में क्या चल रहा है, उस पर विस्तार कर सकते हैं? मुझे यह समझने में परेशानी हो रही है कि printf("%*c\n",i+=rand()%2?1:-1,46)रिक्त स्थान को कैसे प्रिंट करता है, साथ ही साथ यह संभवतः पिछले 29 से डॉट को कैसे रखता है। अग्रिम धन्यवाद। (क्षमा करें, मैं सी प्रोग्रामर नहीं हूं।)
डेसटेंट डब्बलर

@fireeyedboy ने किया, आशा है कि आप समझ गए होंगे :)
user12205 23

आआआआआआआआआआआआआआआआआआआआआआआआआआआँहसहह, मुझे लग रहा था कि तुम वहाँ थोड़ा धोखा दे रहे हो। ;-) लेकिन बाकी सब अब वास्तव में स्पष्ट है। धन्यवाद! और अच्छा समाधान! क्या सी के साथ भी अजीब व्यवहार होता rand()%2है, यह बहुत ही अनुमानित है (विषम / भी बदल जाता है)? मैंने rand()%2अपने PHP समाधान में आपकी कोशिश की , और इसने बहुत ही पूर्वानुमानित व्यवहार प्रदर्शित किया (जैसा कि विरोध किया गया rand(0,1)। चूंकि PHP सी लाइब्रेरीज़ का बहुत उपयोग करता है (यदि मैं सही हूं तो) मैं सोच रहा था कि क्या आपके सी प्रोग्राम में वही 'दोष' है। ।
डिसेंट डब्बलर

@fireeyedboy मैंने rand()फंक्शन को सीड नहीं किया । सी में यदि rand()बीज को स्पष्ट रूप से नहीं डाला जाता है, तो यह हमेशा हर बार एक ही बीज का उपयोग करता है। इसलिए यह पूर्वानुमान है। अगर मुझे इसका srand(time());
बीजारोपण

लेकिन क्या यह इतना अनुमानित है कि यह प्रत्येक बाद की कॉल पर भी अजीब से स्विच करता है? PHP के दावों की अब rand()और आवश्यकता srand()नहीं है, लेकिन फिर भी यह अजीब व्यवहार दिखाता है।
निर्णायक डब्बलर

4

जावा: 204 183 182 176 175 वर्ण - 10 - 50 = 115

class K{public static void main(String[]y){int k,j=0,i=(int)(29*Math.random());for(;j++<30;i+=Math.random()*28<i?-1:1)for(k=0;k<31;k++)System.out.print(k>29?10:k==i?'.':32);}}

सबसे पहले, डॉट पोजिशन होनी चाहिए 0 < x < 30, यानी [1-29]। यह 0 और 28 के बीच समान रूप से वितरित के बीच एक संख्या उत्पन्न करता है, और इस कार्यक्रम के प्रयोजनों के लिए [0-28] का वही प्रभाव है जो [1-2-2]:

i=(int)(29*Math.random());

मैं व्यक्तिगत रूप से पसंद करता हूं अगर यह सामान्य रूप से 14 के आसपास वितरित किया जाएगा, लेकिन मेरा जवाब लंबा होगा:

i=0;for(;j<29;j++)i+=(int)(2*Math.random());

दूसरा, यह कोड सुनिश्चित करता है कि यह मध्य में हो:

i+=Math.random()*28<i?-1:1

+1 प्राप्त करने की संभावना बड़ी होती है, क्योंकि इसका मान छोटा होता है iऔर हमारे पास -1 के विपरीत होता है। यदि i0 है, तो +1 प्राप्त होने की संभावना 100% है और -1 प्राप्त करने की संभावना 0% है। यदि i28 है, तो इसके विपरीत होगा।

तीसरा, आउटपुट को आसान देखने के लिए 32अंत में प्रतिस्थापित करके '_', हम देखते हैं कि प्रत्येक पंक्ति में 30 वर्ण हैं और एक नई पंक्ति है:

__________.___________________
_________.____________________
________._____________________
_________.____________________
__________.___________________
___________.__________________
__________.___________________
_________.____________________
________._____________________
_________.____________________
________._____________________
_________.____________________
__________.___________________
_________.____________________
__________.___________________
___________.__________________
__________.___________________
_________.____________________
__________.___________________
___________.__________________
____________._________________
_____________.________________
____________._________________
_____________.________________
______________._______________
_____________.________________
______________._______________
_______________.______________
______________._______________
_____________.________________

पूर्व संस्करण में गलतफहमी को इंगित करने के लिए @VadimR (अब, user2846289) का धन्यवाद।

इस जवाब को शुरू में पोस्ट किए जाने के ढाई साल से अधिक समय बीतने के बाद भी, 6 पात्रों को शेविंग करने के लिए @ केविनक्रूजसेन का धन्यवाद।


लेकिन अवैध हो iरही 0है, है ना?
user2846289

@VadimR, मेरे iलिए सीमा [0-29] में है। यह [1-30] या [288-317] के बराबर है, आउटपुट समान होगा। क्या मायने रखता है कि अंतराल में 30 पूर्णांक संख्याएं हैं [0-29]।
विक्टर स्टैफ़ुसा

"रिक्त स्थान की संख्या 0 <x <30 के साथ परिभाषित आपके बिंदु की x स्थिति है" यानी रिक्त स्थान की संख्या (या 0-आधारित डॉट स्थिति) 1..29 है। iनहीं किया जा सकता 0। मैं समझता हूं कि यह मज़ेदार है लेकिन फिर भी यह दुखद है।
user2846289

@VadimR, ओह, धन्यवाद। फिक्स्ड। इसका मतलब यह है कि डॉट कभी भी सही स्थिति में नहीं होगा, लेकिन वैसे भी, यही निर्दिष्ट किया गया था।
विक्टर स्टैफ़ुसा

मुझे क्षमा करें, लेकिन यह कुछ भी ठीक नहीं किया। आरंभ में कल्पना iमिलती है 1, और पहले पुनरावृति होती Math.random()है 0, फिर iमिलती है 0। कृपया मुझे गलत मत समझो, यह आपके उत्तर के बारे में नहीं है । बल्कि सी-लाइक के अलावा अन्य भाषाओं को पढ़ने की मेरी अक्षमता के बारे में। फिर त्रुटियों के बारे में कोई प्रतिक्रिया (upvotes को छोड़कर) के साथ, मैं कैसे जान सकता हूं कि वे सही हैं या नहीं?
user2846289

3

गणितज्ञ 157-10-50 = 97

1-30 से एक यादृच्छिक संख्या का उपयोग शुरू करने के लिए किया जाता है। डॉट से शेष सभी कॉलम नंबर चुने गए हैं RandomChoice[If[c > 15, {2, 1}, {1, 2}] -> {-1, 1}] + c , जिसका अनुवाद इस प्रकार होता है: "यदि पूर्व कॉलम संख्या 15 से अधिक थी, तो सेट से एक नंबर का चयन करें {-1,1}, -1 भारित 2: 1 के संबंध में 1, अन्यथा, वजन फ्लिप और एक ही सेट से चुनें।

ReplacePart तत्व को 30 रिक्त स्थानों की सूची में प्रतिस्थापित करता है जो ब्याज के कॉलम से मेल खाती है।

f@c_ := Switch[d = RandomChoice[If[c > 15, {2, 1}, {1, 2}] -> {-1, 1}] + c, 1, 2, 30, 29, d, d]
Row@ReplacePart[Array["_" &, 29], # -> "."] & /@ NestList[f, RandomInteger@29+1, 30] // TableForm

डॉट


का अच्छा उपयोगRandomChoice[]
डॉ। Belisarius

3

> <>, 358 - 10 = 348

यह कोडगोल्फ में नहीं जीतेगा, लेकिन यह काम करता है। ( इस व्याख्याकार के साथ विंडोज़ this पर , जो कि एसोलंग पृष्ठ की तुलना में "पी" निर्देश को अलग तरीके से लागू करता है)

1v        >a"                              "v
v<      0<} vooooooooooooooooooooooooooooooo<
&  _>   v : >$" "@p1+:2f*(?v;
  |x1>  v^}!               <
  |xx2> v p
  |xxx3>v  
  |xxxx4v $
>!|xxx< v }
  |xxxx6v }
  |xxx7>v @
  |xx8> v :
  |x9v  < @>  5)?v$:67*)?vv
   _>>&?v!@^     >$:b(?v v
  v }"."< :        v+ 1<  <
  >a+b+00}^0}}${"."< <- 1<

इस भाषा का नाम गुगली नहीं हो सकता है, इसलिए यहां जिज्ञासु के लिए इसका गूढ़ लेख है


क्या आप 50 से कम अक्षरों में -50 की आवश्यकता को कोड कर सकते हैं?
विक्टर स्टैफ़ुसा

1
@ विक्टर शायद, लेकिन> <> में (एक मजेदार विशाल दर्द) कोड करने के लिए एक विशाल दर्द है, इसलिए मुझे इससे एक ब्रेक लेने की आवश्यकता है।
SirCxyrtyx

@SirCxyrtyx ने मुझे चकली बना दिया। खैर गोल्फ वाले साहब।
गूसडर

3

PHP, 118 113 112 111 (-10 बोनस अंक = 101)

(दूसरी कोशिश, बुरी तरह से पूर्वानुमानित rand()व्यवहार और थोड़ी अधिक दक्षता के साथ)

for($n=30,$i=rand(1,29),$t=$s=pack("A$n",'');$n--;$i+=$i<2|rand()%2&$i<28?1:-1,$t=$s){$t[$i-1]='.';echo"$t\n";}

संभावित परिणाम:

______._______________________
_____.________________________
______._______________________
_____.________________________
______._______________________
_____.________________________
______._______________________
_____.________________________
______._______________________
_____.________________________
______._______________________
_____.________________________
______._______________________
_____.________________________
______._______________________
_____.________________________
______._______________________
_____.________________________
______._______________________
_____.________________________
______._______________________
_____.________________________
______._______________________
_____.________________________
______._______________________
_____.________________________
______._______________________
_____.________________________
______._______________________
_____.________________________

PHP, 130 (-10 बोनस अंक = 120)

(पहली कोशिश)

यह शायद अभी भी बहुत अधिक कुशल हो सकता है:

for($n=30,$i=rand(1,29),$t=$s=str_repeat(' ',$n)."\n";$n--;$i=$i<2?2:($i>28?28:(rand(0,1)?$i+1:$i-1)),$t=$s){$t[$i-1]='.';echo$t;}

यदि मैं अंतरिक्ष को अंडरस्कोर (प्रदर्शन उद्देश्यों के लिए) से प्रतिस्थापित करता हूं, तो यह एक संभावित परिणाम है:

________._____________________
_______.______________________
______._______________________
_______.______________________
________._____________________
_______.______________________
______._______________________
_______.______________________
______._______________________
_______.______________________
________._____________________
_______.______________________
________._____________________
_________.____________________
__________.___________________
___________.__________________
__________.___________________
___________.__________________
__________.___________________
_________.____________________
________._____________________
_________.____________________
________._____________________
_______.______________________
______._______________________
_____.________________________
____._________________________
_____.________________________
____._________________________
___.__________________________

विचित्र रूप से पर्याप्त है, अगर मैं (PHP 5.4, विंडोज एक्सपी पर) के rand(0,1)साथ प्रतिस्थापित करता हूं, तो rand()%2यादृच्छिक परिणाम हमेशा अजीब से यहां तक ​​कि स्विच होता है, और इसके विपरीत, प्रत्येक अगले पुनरावृत्ति पर, rand()इस अर्थ में, चिंताजनक अनुमान लगाने योग्य, अचानक। यह 'बग' एक प्रतीत होता है जो 2004 से जाना जाता है । पूरी तरह से यकीन नहीं है कि क्या यह वास्तव में एक ही 'बग' है।


3

जे ४२ अक्षर - ५० -१० = -१-

'_.'{~(|.~((I.%<:@#)*@-?@0:))^:(<@#)1=?~30

स्पष्टीकरण, दाईं ओर से शुरू ( ट्रेनों के बारे में कुछ ज्ञान काम आता है):

init=: 0=?~30          NB. where is the 0 in the random permutation of [0,29]
rep =: ^:(<@#)         NB. repeat as many times as the array is long, showing each step

rnd =: ?@0:            NB. discards input, generates a random number between 0 and 1

signdiff =: *@-        NB. sign of the difference (because this works nicely with
                       NB. the shift later on).

left_prob =: (I.%<:@#) NB. probability of shifting left. The position of the one (I.) divided by the length -1.

shift =: |.~           NB. x shift y , shifts x by y positions to the left.

output =: {&'_.'       NB. for selecting the dots and bars.

NB. Piecing things together:
output (shift (left_prob signdiff rnd))rep init

केंद्र की प्रवृत्ति, -50, 1000 से अधिक रन का उदाहरण:

NB. Amounts of ones in each column (sum)
   ]a=:+/ (|.~((I.%<:@#)*@-?@0:))^:(<1000)0=?30
0 0 0 0 0 0 2 6 10 12 25 60 95 121 145 161 148 99 49 27 19 13 6 1 1 0 0 0 0 0
   +/a NB. check the number of ones in total
1000
   |. |:(<.a%10) #"0 1] '*' NB. plot of those values
           *              
           *              
          ***             
          ***             
         ****             
         ****             
         ****             
        ******            
        ******            
        ******            
       *******            
       *******            
       ********           
       ********           
      **********          
    **************        

उदाहरण रन, प्रत्येक पंक्ति में 30 बाइट्स का आउटपुट देता है

_______________.______________
________________._____________
_______________.______________
________________._____________
_______________.______________
________________._____________
_______________.______________
________________._____________
_______________.______________
________________._____________
_______________.______________
______________._______________
_______________.______________
________________._____________
_________________.____________
________________._____________
_______________.______________
______________._______________
_____________.________________
____________._________________
___________.__________________
__________.___________________
___________.__________________
__________.___________________
___________.__________________
__________.___________________
___________.__________________
____________._________________
_____________.________________
______________._______________

एक बहुत अच्छा समाधान!
रेगेमफिन

एक बहुत अच्छी चुनौती भी!
jpjacobs

3

पायथन 2.7: 126 109 -10-50 = 49

हार्ड-कोडित शुरुआती बिंदु से छुटकारा पा लिया - अब यादृच्छिक बिंदु पर शुरू होता है। इस वजह से, मुझे रैंडिंट की आवश्यकता थी, इसलिए मैंने ऑफसेट के लिए पसंद के बजाय इसका उपयोग करने का फैसला किया। उस के लिए (-1) ** बूल चाल का इस्तेमाल किया।

from random import randint as r;p=r(0,29)
for i in range(30):
 print' '*p+'.'+' '*(29-p);p+=(-1)**(r(0,29)<p)

कुछ बेहतरीन जवाब यहाँ। पायथन में पहला प्रयास, सुधार के बारे में सोच रहा है। आयात की आवश्यकता से मदद नहीं मिली।

-10 - हाँ प्रत्येक पंक्ति पर 30 वर्ण + \ n

-50 - केंद्र से और अधिक दूर, अधिक संभावना एक अन्य तरीके से चलती है (एक अलग संख्या में + / i ऑफसेट के साथ एक सूची का निर्माण करके)

पिछला प्रयास:

from random import choice;p,l=15,[]
for i in range(30):
 q=29-p;l+=[' '*p+'.'+' '*q];p+=choice([1]*q+[-1]*p)
print'\n'.join(l)

आपका forलूप सभी एक लाइन पर हो सकता है, लेकिन इससे भी बेहतर for i in[0]*30:और बेहतर है eval"..."*30
mbomb007

2

जावा - 198 183 वर्ण

यह उदाहरण का एक सीधा, सरल, प्रत्यक्ष और बिना सोचे-समझे गोल्फ है जो आपने प्रश्न में दिया था।

class A{public static void main(String[]y){int c,j,i=(int)(Math.random()*30);for(c=30;c>0;c--)for(j=i+=i<2?1:i>28?-1:Math.random()>0.5?1:-1;j>=0;j--)System.out.print(j>0?" ":".\n");}}

2

बैच - (288 बाइट्स - 10) 278

@echo off&setlocal enabledelayedexpansion&set/ap=%random%*30/32768+1&for /l %%b in (1,1,30)do (set/ar=!random!%%2&if !r!==1 (if !p! GTR 1 (set/ap-=1)else set/ap+=1)else if !p! LSS 30 (set/ap+=1)else set/ap-=1
for /l %%c in (1,1,30)do if %%c==!p! (set/p"=."<nul)else set/p"=_"<nul
echo.)

संयुक्त राष्ट्र के golfed:

@echo off
setlocal enabledelayedexpansion
set /a p=%random%*30/32768+1
for /l %%b in (1,1,30) do (
    set /a r=!random!%%2
    if !r!==1 (
        if !p! GTR 1 (set /a p-=1) else set /a p+=1
    ) else if !p! LSS 30 (set /a p+=1) else set /a p-=1
    for /l %%c in (1,1,30) do if %%c==!p! (set /p "=."<nul) else set /p "=_"<nul
    echo.
)

अंडरस्कोर के बजाय आउटपुट स्पेस के लिए - 372 बाइट्स -

@echo off&setlocal enabledelayedexpansion&for /f %%A in ('"prompt $H &echo on&for %%B in (1)do rem"')do set B=%%A
set/ap=%random%*30/32768+1&for /l %%b in (1,1,30)do (set/ar=!random!*2/32768+1&if !r!==1 (if !p! GTR 1 (set/ap-=1)else set/ap+=1)else if !p! LSS 30 (set/ap+=1)else set/ap-=1
for /l %%c in (1,1,30)do if %%c==!p! (set/p"=."<nul)else set/p"=.%B% "<nul
echo.)

निम्नलिखित तर्क के साथ कुछ मदद की तलाश में, निश्चित रूप से यह सबसे अधिक कुशल तरीका नहीं है (! R! 1 या 2 तक विस्तारित होगा)

if !r!==1 (
    if !p! GTR 1 (set /a p-=1) else set /a p+=1
) else if !p! LSS 30 (set /a p+=1) else set /a p-=1

यह नीचे गोल्फ: if !r!==1 (if !p! GTR 1 (set/ap-=1)else set/ap+=1)else if !r! LSS 30 (set/ap+=1)else set/ap-=1


2

जे, 42 अक्षर, कोई बोनस नहीं

' .'{~(i.30)=/~29<.0>.+/\(-0&=)?(,2#~<:)30

उदाहरण रन:

          ' .'{~(i.30)=/~29<.0>.+/\(-0&=)?(,2#~<:)30
                       .
                      .
                     .
                      .
                     .
                      .
                     .
                      .
                       .
                      .
                     .
                    .
                     .
                    .
                     .
                    .
                     .
                      .
                       .
                        .
                       .
                        .
                       .
                      .
                     .
                      .
                       .
                      .
                     .
                    .

2

पायथन 2.7 (126 - 10 (लंबाई तय) - 50 (केंद्र प्रवृत्ति) = 66)

निम्नलिखित कार्यक्रम में एक बड़े नमूने पर एक केंद्र प्रवृत्ति है

s=id(9)%30
for e in ([[0,2][s>15]]*abs(s-15)+map(lambda e:ord(e)%2*2,os.urandom(30)))[:30]:
    s+=1-e;print" "*s+"."+" "*(28-s)

डेमो

         .           
        .            
       .             
      .              
     .               
      .              
       .             
        .            
         .           
          .          
           .         
          .          
           .         
          .          
         .           
        .            
       .             
        .            
       .             
      .              
     .               
      .              
       .             
      .              
     .               
    .                
   .                 
    .                
   .                 
    .              

बोने के लिए s = id (9)% 30 की तरह। ओएस आयात की जरूरत है, हालांकि? और क्या यह पूर्ण 1-30 सीमा को कवर करता है? ओह प्रतीक्षा करें ... * पृष्ठ के शीर्ष पर असमानता को फिर से प्रकाशित करता है *
psion5mx

2

जावास्क्रिप्ट 125 73 72 72 60 (120 - 50 - 10)

i=0;r=Math.random;s=r()*30|0;do{a=Array(30);a[s=s>28?28:s?r()<s/30?s-1:s+1:1]='.';console.log(a.join(' '))}while(++i<30)

EDIT: 50 पॉइंट बोनस और 10 पॉइंट बोनस के लिए फिक्स।

संपादित करें 2: और भी छोटा!


क्या आप समझा सकते हैं, जहां आपको 50 अंक बोनस मिलता है? मैं इस समय इसे प्राप्त नहीं कर रहा हूं ...
रेगेमफिन

@ Kostronor मैं सिर्फ आवश्यकता के लिए संपादित देखा। ऐसा लगता है कि मुझे अभी तक 50 अंक नहीं मिले हैं।
ऐनाबिस

@acbabis, अच्छा किया! आप कुछ बाइट्स (116) बचा सकते हैं:r=Math.random;s=r()*30|0;for(i=0;i++<30;a=Array(30)){a[s=s>28?28:s?r()<s/30?s-1:s+1:1]='.';console.log(a.join(' '))}
माइकल एम।

@ मिचेल सुझावों के लिए धन्यवाद। forहालांकि काम के अंदर सरणी init नहीं मिल सका ; एक समय का उपयोग करना पड़ा।
ऐनाबिस

2

डी - 167, 162, 144 (154 - 10)

गोल्फ :

import std.stdio,std.random;void main(){int i=uniform(1,30),j,k;for(;k<30;++k){char[30]c;c[i]='.';c.writeln;j=uniform(0,2);i+=i==29?-1:i==0?1:j==1?1:-1;}}

अन-गोल्फ :

import std.stdio, std.random;

void main()
{
    int i = uniform( 1, 30 ), j, k;

    for(; k < 30; ++k )
    {
        char[30] c;
        c[i] = '.';
        c.writeln;
        j = uniform( 0, 2 );
        i += i == 29 ? -1 : i == 0 ? 1 : j == 1 ? 1 : -1;
    }
}

EDIT 1 - मुझे यकीन नहीं है कि मेरा कोड -50 बोनस के लिए योग्य है या नहीं। iहमेशा बीच में शुरू नहीं होता है, लेकिन forलूप के दौरान , डॉट कभी भी 3 जगहों से ज्यादा नहीं चलती है और न ही दिशा है, इसलिए जब बीच के पास शुरू i होता है , तो पूरी चीज भी वहां रहने लगती है।

EDIT 2 - कोड अब -10 बोनस के लिए अर्हता प्राप्त करता है, क्योंकि इसमें कुल 29 वर्ण प्रति पंक्ति के लिए LF द्वारा 29 वर्णों की एक सरणी प्रिंट की जाती है।


चूंकि यह LF द्वारा 29 वर्णों की एक सरणी प्रिंट करता है - यह LF द्वारा अनुसरण किए जाने वाले 30 वर्ण होने चाहिए।
विक्टर स्टैफुसा

@ विक्टर आह, सुधार के लिए धन्यवाद, मैंने मुख्य पोस्ट की गलत व्याख्या की।
टोनी एलिस

2

पॉवरशेल, 77 - 10 - 50 = 17

$x=random 30
1..30|%{$x+=random(@(-1)*$x+@(1)*(29-$x))
'_'*$x+'.'+'_'*(29-$x)}

उत्पादन

_.____________________________
__.___________________________
___.__________________________
____._________________________
___.__________________________
____._________________________
_____.________________________
______._______________________
_______.______________________
______._______________________
_____.________________________
______._______________________
_______.______________________
________._____________________
_________.____________________
__________.___________________
___________.__________________
__________.___________________
___________.__________________
____________._________________
___________.__________________
__________.___________________
_________.____________________
__________.___________________
_________.____________________
________._____________________
_________.____________________
________._____________________
_________.____________________
__________.___________________

स्मार्ट यादृच्छिक। आप एक गोल्फ संस्करण का उपयोग कर सकते हैं $x=random 30;1..30|%{' '*($x+=,-1*$x+,1*(29-$x)|random)+'.'|% *ht 30}। 66 बाइट्स - 10 - 50 = 6 स्कोर अंक
माज़ी

2

आर, 107 वर्ण - 60 अंक बोनस = 47

s=sample;i=s(29,1);for(j in 1:30){a=rep(' ',30);i=i+s(c(-1,1),1,p=c(i-1,29-i));a[i]='.';cat(a,'\n',sep='')}

iडॉट का सूचकांक है। a30 स्थानों की सरणी है। प्रारंभिक बिंदु यादृच्छिक है (समान रूप से 1 से 29 तक)। प्रत्येक यात्रा में हम बेतरतीब ढंग से करने के लिए +1 जोड़ने -1 या iभारित संभावनाओं के साथ: i-1के लिए -1और 29-i के लिए +1(संभावनाओं के रूप में खिलाया मूल्यों से एक के लिए राशि की जरूरत नहीं है), जिसका अर्थ है कि यह केंद्र की ओर डॉट उन्मुख करने के लिए जाता है, जबकि यह नीचे से रोकता है 1 या 29 से ऊपर (चूंकि उनकी संभावना दोनों मामलों में 0 तक गिर जाती है)।

उदाहरण के _लिए विरासत के स्थान के साथ चलते हैं :

> s=sample;i=s(1:30,1);for(j in 1:30){a=rep('_',30);i=i+s(c(-1,1),1,p=c(i-1,29-i));a[i]='.';cat(a,'\n',sep='')}
_______________________.______
______________________._______
_____________________.________
______________________._______
_____________________.________
______________________._______
_____________________.________
______________________._______
_____________________.________
____________________._________
_____________________.________
______________________._______
_____________________.________
______________________._______
_____________________.________
____________________._________
___________________.__________
____________________._________
___________________.__________
__________________.___________
_________________.____________
________________._____________
_______________.______________
______________._______________
_______________.______________
________________._____________
_________________.____________
________________._____________
_______________.______________
______________._______________

अगर मुझे आपके कोड को पढ़ने में कोई गलती नहीं है, तो मैं या नहीं बन i सकता हूं ? 030
user2846289

हाँ, आप सही हैं यह 30 हो सकता है (हालांकि अधिक नहीं), मैं इसे बदल दूँगा।
प्लेनैपस

1
यह अब तय हो गया है। 1 से 0 से जाने या 29 से 30 तक जाने की संभावना अब 0. है। यादृच्छिक प्रारंभिक बिंदु अब 1 और 29 के बीच है।
प्लेनैपस

संकेत: आप की जगह 2 अधिक वर्ण बचा सकता है s(1:29,1)के साथ s(29,1)
स्वेन होइनस्टीन

@SvenHohenstein आप सही हैं मैं हमेशा उस एक के बारे में भूल जाता हूं
plannapus

2

सी # 184 - 10 - 50 = 123

using System;namespace d{class P{static void Main(){var r=new Random();int p=r.Next(30);for(int i=0;i<30;i++){Console.WriteLine(".".PadLeft(p+1).PadRight(29));p+=r.Next(30)<p?-1:1;}}}}

उत्पादन

spaceसुव्यवस्थितता के साथ प्रतिस्थापित किया _गया।

____________.________________
___________._________________
__________.__________________
___________._________________
____________.________________
_____________._______________
______________.______________
_____________._______________
______________.______________
_______________._____________
______________.______________
_______________._____________
______________.______________
_______________._____________
______________.______________
_____________._______________
____________.________________
___________._________________
____________.________________
_____________._______________
______________.______________
_____________._______________
____________.________________
___________._________________
____________.________________
___________._________________
____________.________________
___________._________________
__________.__________________
___________._________________

मुझे पूरा यकीन है कि if...else if...elseआपके कोड के अंत में एक छोटा कोड प्राप्त करना संभव है । इसके अलावा, आपके आउटपुट से मुझे कुछ संदेह हो जाता है कि यह बीच में है, लेकिन आपका कोड सही प्रतीत होता है।
विक्टर स्टैफ़ुसा

जब मैंने कोड संपादित किया तो आउटपुट अपडेट करना भूल गया। r.Next(30)<p?-1:1;ऐसा बना देता है। यकीन नहीं है कि आप ifबयानों के साथ छोटे जा सकते हैं । switchअनिवार्य होने के कारण बड़ा है break/ returnऔर अंतिम के elseलिए एक default:{}मामले की आवश्यकता होती है और वह भी लंबी है।
गूसडर

@ विक्टर इनपुट के लिए धन्यवाद। मैंने कुछ संपादन किए।
गसडर

यदि pशून्य है, तो p+=r.Next(30)<p?-1:1;हमेशा 1 प्राप्त होगा, इसलिए इसकी कोई आवश्यकता नहीं है if(p==0)। के लिए डिट्टो p==29pकभी भी 30 नहीं होगा, इसलिए आप इससे छुटकारा पा सकते हैं else if
विक्टर स्टैफुसा

@ विक्टर ग्रैंड बीमार उन परिवर्तनों को बनाते हैं। टा।
गुस्सोर

1

पीएचपी

केंद्रित बोनस के साथ: 82 - 50 = 32

$i=rand(0,29);for($c=0;$c++<30;rand(0,28)<$i?$i--:$i++)echo pack("A$i",'').".\n";

इस संस्करण के लिए (नीचे दिए गए पुराने संस्करण), न्यूनतम / अधिकतम जाँच को हटा दिया है क्योंकि यह केंद्र कोड में ध्यान रखा गया है। rand(1,28)यहां महत्वपूर्ण हो जाता है क्योंकि यह $i++29 (वास्तविक अधिकतम) तक खुद को धकेलने की अनुमति देता है ।

संपादित करें: अनावश्यक कोष्ठक, स्थानांतरित कोड


केंद्रित करने के लिए सरल एल्गोरिथ्म: 0 और 29 के बीच एक नई संख्या उत्पन्न करता है और वर्तमान की तुलना करता है। केंद्र की ओर आकर्षित करने के लिए बड़े पक्ष पर संख्या प्राप्त करने की "संभावना" का लाभ उठाता है।

वास्तविक परिणाम: (लाइन नंबरिंग बाद में जोड़ा गया)

01|        .
02|       .
03|        .
04|         .
05|          .
06|           .
07|            .
08|           .
09|            .
10|             .
11|              .
12|             .
13|            .
14|             .
15|            .
16|             .
17|            .
18|             .
19|              .
20|               .
21|              .
22|             .
23|              .
24|               .
25|                .
26|               .
27|                .
28|                 .
29|                .
30|               .

संग्रहित:

$i=rand(0,29);for($c=0;$c++<30;){($i<1?$j=1:($i>28?$j=28:$j=rand(0,29)));($j<$i?$i--:$i++);echo pack("A$i",'').".\n";} 119 अक्षर

$i=rand(0,29);for($c=0;$c++<30;){($i<1?$i++:($i>28?$i--:(rand(0,29)<$i?$i--:$i++)));echo pack("A$i",'').".\n";} 112 अक्षर


मैं थोड़ा प्रभावित हूं कि मैंने अपने पहले संस्करण के बाद से 49 पात्रों का
मुंडन किया

अब 44 पात्रों का मुंडन किया। जिसका मतलब है कि यह पिछली बार 39 था।
योदा

1

जावास्क्रिप्ट ईएस 6 125 - 10 (30 वर्ण रेखाएं) - 50 (मध्य की ओर स्थानांतरण) = 65

मुझे अपनी इकाई के लिए लिफ्ट में जाने की एक एपिफेनी थी, इसलिए मुझे अपनी मेमोरी छोड़ने से पहले इसे नीचे उतरना पड़ा ...

z=(j=Array(t=29).join`_`)+"."+j;x=(r=Math.random)()*t;for(i=30;i--;)console.log(z.substr(x=(x+=r()<x/t?-1:1)>t?t:x<0?0:x,30))

थोड़ा परिवर्तनशील स्थिति में फेरबदल और शिफ्ट संभावना की गणना के लिए एक छोटी सी रचनात्मकता x/t... द्वारा इंगित (इसे इंगित करने के लिए धन्यवाद Kostronor!) अब मैं बीच पर शिफ्ट करने के लिए -50 बोनस हासिल करता हूं, और मैंने शुरुआती स्थिति भी बना ली है। लाइन की पूरी श्रृंखला, जिसने मुझे दो बाइट्स दाढ़ी बनाने की अनुमति दी!

....5....0....5....0....5....0 <-- Ruler
_.____________________________
__.___________________________
___.__________________________
__.___________________________
___.__________________________
__.___________________________
_.____________________________
__.___________________________
___.__________________________
__.___________________________
___.__________________________
____._________________________
_____.________________________
______._______________________
_______.______________________
________._____________________
_______.______________________
______._______________________
_______.______________________
________._____________________
_______.______________________
________._____________________
_________.____________________
__________.___________________
_________.____________________
__________.___________________
___________.__________________
____________._________________
_____________.________________
______________._______________

क्या यह नहीं है कि यहाँ प्रारंभिक डॉट पोजीशन की यादृच्छिकता 2 या 3 संभावनाओं तक सीमित है? और यही बीच में बिंदी रखना (बहुत कम संख्या में रन = 30 के कारण) और इसलिए मूल्य -50?
user2846289

ओपी के पाठ का हवाला देते हुए : "आपका कार्यक्रम एक यादृच्छिक x स्थिति से शुरू होता है और हर मोड़ इस स्थिति को यादृच्छिक रूप से 1 से बाईं या दाईं ओर बदलता है" मेरा कोड शुरू में परिभाषित किया गया है 15+r()*2जिस पर 15 से 16.9999999998 तक कुछ भी हो सकता है या वह गोल हो सकता है 17 तक। अतिरिक्त x+=r()<.5?-1:114 से 18 की सीमा में लाकर थोड़ा और यादृच्छिकता फेंकता है, इसलिए तकनीकी रूप से एक यादृच्छिक संख्या जो कि पूछा गया था की परिभाषा के भीतर है ... उस नियम को झुकाकर, फ्लिप (+1) -1) ज्यादातर मामलों में इसे बीच की ओर वापस लाएगा ...;)
वैलेस्ट

ठीक है, यादृच्छिक चीज़ पर, आप मुझे मिल गए ... इसका मतलब था 'सभी संभावित पदों से एक यादृच्छिक स्थिति' लेकिन यह आपको बहुत लाभ नहीं देता है, क्योंकि 50 अंक स्पष्ट रूप से लागू नहीं होते हैं! कृपया इस बोनस पर स्पष्टीकरण दें, एक निश्चित 0,5 प्रतिशत इसे प्राप्त न करें!
रेगेमफिन

मान्य बिंदु, मैं अपने स्कोर को उसके अनुसार फिर से करूँगा ...
वैलेस्टेस्ट

@ Kostonor कोड उचित समाधान के साथ अद्यतन, तदनुसार अद्यतन स्कोर!
वॉलीवेस्ट

1

के, 53 - 10 - 50 = -7

समाधान 1

{{a:30#" ";a[x]:".";a}'{x+$[*x<1?!30;1;-1]}\[x;*1?x]}

प्रयोग

{{a:30#" ";a[x]:".";a}'{x+$[*x<1?!30;1;-1]}\[x;*1?x]}30

"      .                       "
"       .                      "
"      .                       "
"       .                      "
"      .                       "
"       .                      "
"        .                     "
"         .                    "
"        .                     "
"         .                    "
"        .                     "
"         .                    "
"          .                   "
"           .                  "
"            .                 "
"             .                "
"              .               "
"               .              "
"              .               "
"             .                "
"            .                 "
"           .                  "
"          .                   "
"         .                    "
"        .                     "
"       .                      "
"        .                     "
"         .                    "
"          .                   "
"         .                    "
"          .                   "

समाधान २

{r::x;{a:r#" ";a[x]:".";a}'{a:r#0b;a[x?r]:1b;x+$[a@*1?r;-1;1]}\[x;*1?x]}[30]

1

स्काला, 95 - 10 = 85 बाइट्स

def r=math.random
Seq.iterate(r*30,30){n=>println(("#"*30)updated(n.toInt,'.'))
(r*2-1+n)round}

मैं अभी भी 50 बाइट बोनस के बारे में सोच रहा हूं।

स्पष्टीकरण:

def r=math.random //define a shortcut for math.random, which returns a number 0 <= n < 1
Seq.iterate(      //build a sequence,
  r*30,             //starting with a random number bewteen 0 and 29
  30                //and containing 30 elements.
){n=>             //Calculate each element by applying this function to the previous element
  println(        //print...
    (" "*30)             //30 spaces
    updated(n.toInt,'.') //with the n-th char replaced with a dot
  )               //and a newline.
                  //The next element is
  (r*2-1+n)       //an random number between -1 and 1 plus n
  round           //rounded to the nearest integer.
}

1

जावास्क्रिप्ट, 125 (135 - 10)

q=Math.random,p=~~(q()*31)+1;for(i=0;i++<30;){s='',d=j=1;for(;j++<31;)s+=j==p?'.':" ";p+=q()<.5?1:-1;p-=p>28?2:p<2?-2:0;console.log(s)}

टिप्पणियाँ और सलाह का स्वागत है।


अफसोस की बात है, आपका समाधान योग्य नहीं है, अन्य आउटपुट के आउटपुट के साथ अपने आउटपुट की तुलना करें। डॉट को एक वर्ण से स्थानांतरित करें।
रेगेमेफिन

@ कोस्ट्रोनर ओह! ओह! मुझे माफ़ कीजिए! मैं सवाल के उस हिस्से को पढ़ना भूल गया! मैं जल्द ही एक नया संस्करण विकसित करने की कोशिश करूंगा। इशारा करने के लिए धन्यवाद!
गौरांग टंडन

@ कोस्ट्रोनर कार्यक्रम संपादित किया गया।
गौरांग टंडन

1

जावास्क्रिप्ट

114 चार्ट - 10 (30 चार लाइनें) - 50 (बीच की ओर खींच डॉट) = 54

for(f=Math.random,a=[],i=30,j=k=f()*i|0;i--;a[j]='.',a[j+=29-k]='\n',j+=k+=f()>k/29?1:-1);console.log(a.join('-'))

हालांकि, मैंने देखा कि 30 वर्णों तक की रेखाओं को भरने के लिए 10 वर्ण का पुरस्कार एक बुरा सौदा हो सकता है; इसलिए:

102 वर्ण - 50 (मध्य की ओर खींचो) = 52

for(f=Math.random,a=[],i=30,j=k=f()*i|0;i;i--,a[j]='.\n',j+=k+=f()>k/29?1:-1);console.log(a.join('-'))

Kudos to @WallyWest सरलीकृत पुल दिशा सशर्त के लिए f()>k/29?1:-1, मेरे पहले मसौदे में दो नेस्टेड सशर्त का उपयोग किया गया था।


1

रैकेट 227 बाइट्स (30 अक्षरों के लिए -10, मिडलाइन = 167 में शिफ्ट के लिए)

प्रत्येक चरण पर, डॉट इससे दूर की तुलना में मिडलाइन की ओर बढ़ने की दो बार अधिक संभावना है:

(let lp((r(random 1 31))(c 0)(g(λ(n)(make-string n #\space))))(set! r
(cond[(< r 1)1][(> r 30)30][else r]))(printf"~a~a~a~n"(g r)"*"(g(- 29 r)))
(when(< c 30)(lp(+ r(first(shuffle(if(> r 15)'(-1 -1 1)'(1 1 -1)))))(add1 c)g)))

Ungolfed:

(define (f)
    (let loop ((r (random 1 31))
               (c 0)
               (g (λ (n) (make-string n #\space))))
      (set! r (cond
                [(< r 1) 1]
                [(> r 30) 30]
                [else r] ))
      (printf "~a~a~a~n" (g r) "*" (g (- 29 r)))
      (when (< c 30)
        (loop (+ r
                 (first
                  (shuffle
                   (if (> r 15)
                       '(-1 -1 1)
                       '(1 1 -1)))))
              (add1 c)
              g))))

परिक्षण:

(println "012345678901234567890123456789")
(f)

आउटपुट:

"012345678901234567890123456789"
                       *       
                      *        
                       *       
                        *      
                         *     
                        *      
                       *       
                      *        
                     *         
                      *        
                     *         
                    *          
                     *         
                      *        
                     *         
                    *          
                   *           
                  *            
                 *             
                *              
               *               
                *              
                 *             
                *              
                 *             
                *              
                 *             
                *              
                 *             
                *              
               *               

अच्छा समाधान! रैकेट वास्तव में दिलचस्प है। आप अपने आप को 50 बोनस अंक दे सकते हैं और जांच सकते हैं कि क्या आप अतिरिक्त 10 :-) के लिए आवेदन करते हैं
रेगेमफिन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.