गिरते हुए बॉल मैप बनाना


16

परिचय

उन लोगों के लिए जिन्होंने इस खेल के बारे में पहले कभी नहीं सुना। आप एक गेंद खेल रहे हैं, जिसे यथासंभव लंबे समय तक जीवित रहने की आवश्यकता है। यह बाईं या दाईं ओर, छिद्रों पर जाकर किया जाता है। चूंकि नक्शा ऊपर की ओर बढ़ता है, इसलिए आपको लंबे समय तक जीवित रहने के लिए नीचे की ओर जाने की आवश्यकता है। यदि आप छवियों को खोजते हैं, तो आप शायद जानते हैं कि मैं किस खेल का मतलब है।

काम

एक सकारात्मक पूर्णांक n को देखते हुए , n परतों का गिरता हुआ बॉल मैप आउटपुट करता है । परतों के बीच, 4 नए समाचार हैं। परत की चौड़ाई 25 अंडरस्कोर वर्णों से बनी है, जिसकी लंबाई 5 के एक छेद के साथ है । इसका मतलब है कि कुल चौड़ाई 30 के बराबर है। यह प्रत्येक परत के बाद यादृच्छिक रूप से स्थानांतरित हो जाती है। एक मान्य परत का एक उदाहरण है:

_______________     __________

छेद किनारों पर भी हो सकता है, जैसे कि परत एक सिलेंडर की तरह है:

  _________________________   

ध्यान दें कि 2 प्रमुख स्थान और 3 अनुगामी स्थान हैं। चौड़ाई 5 का एक ही छेद बनाना ।

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

के लिए n = 4, यह एक मान्य उत्पादन होता है:

_______________     __________





______     ___________________





_______________________     __





  _________________________

नोट: छेद को समान रूप से वितरित किया जाना चाहिए । अनुगामी और / या अग्रणी नई सूचियों की अनुमति है।

यह , इसलिए कम से कम बाइट्स जीत के साथ सबमिशन!


1
@ डोनमूसली हाहा, जो किसी के साथ भी हो सकता है: p
अदनान

जवाबों:


7

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

VQ.>+*\_25*d5O30*b4

यहाँ यह कोशिश करो!

व्याख्या

VQ।> + * \ _ 25 * d5O30 * b4 # Q = इनपुट

VQ # बार बार क्यू
     * \ _ 25 # 25 अंडरस्कोर
          * d5 # 5 रिक्त स्थान
    अंडरस्कोर और रिक्त स्थान को # समतल करें
  ।> O25 # इस स्ट्रिंग को 0-29 बार घुमाएं
                * b4 # सेपरेटिंग न्यूलाइन्स प्रिंट करें

4

रूबी, 74 71 59

एलेक्स ए के लिए मुझे याद दिलाने के लिए कि मूल रूप से एक लाइन होने का मतलब है कि मैं स्टैम्बी लैम्ब्डा का उपयोग कर सकता हूं

f=->n{n.times{puts (('_'*25+' '*5)*2)[rand(30),30]+"\n"*5}}

putsअंत में एक नई रेखा जोड़ता है (रूबी के printनहीं होने पर), इसलिए इसे नए 5समाचारों में अद्यतन कर दिया गया है।
वैल्यू इंक

सभी लूप के timesऊपर मुझे 3 बाइट्स बचाने के लिए फंक्शन में जय हो for: D
वैल्यू इंक

1
57 बाइट्स: ->n{n.times{puts (('_'*25+' '*5)*2)[rand(30),30]+"\n"*5}} यहां कोशिश करें
एलेक्स ए।

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

1
आप (->n{n.times{puts (('_'*25+' '*5)*2)[rand(30),30]+"\n"*5}})[input]इसे कॉल करने के लिए निर्दिष्ट या केवल निर्दिष्ट कर सकते हैं । यह साइट पर काफी आम है।
एलेक्स ए।

3

जूलिया, 72 बाइट्स

n->join([join(circshift(["_"^25*" "^5...],rand(1:30)))"\n"^5 for i=1:n])

यह एक अनाम फ़ंक्शन है जो पूर्णांक को स्वीकार करता है और एक स्ट्रिंग लौटाता है। इसे कॉल करने के लिए, इसे एक वैरिएबल पर असाइन करें।

हम 5 स्थानों के बाद 25 अंडरस्कोर की एक स्ट्रिंग का निर्माण करते हैं, फिर वर्णों की एक सरणी में विभाजित करते हैं। हम इसे एक यादृच्छिक संख्या में (1 और 30 के बीच) समय-समय पर स्थानांतरित करते हैं, इसे एक स्ट्रिंग में वापस जोड़ते हैं, और 5 नईलाइन्स से निपटते हैं। यह प्रक्रिया n बार दोहराई जाती है , जहां n इनपुट है। परिणामी सरणी जुड़ जाती है और वापस आ जाती है।

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


3

पॉवरशेल 65 बाइट्स

0..$args[0]|%{-join("_"*25+" "*5)[($r=Random 25)..($r-29)];,""*5}

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

संपादित करें: मुझे नहीं पता कि मुझे लगा कि मुझे -Maximumस्थिति के लिए पैरामीटर की आवश्यकता है । टिम्मीड के लिए धन्यवाद मैंने कुछ बाइट्स मुंडाए और इनपुट प्राप्त करना भूल गया ताकि मुझे 65 तक वापस ले जाए।


@TimmyD मुझे आश्चर्य होगा अगर किसी के पास अभी भी 1.0 था। यह केवल एक डाउनलोड के रूप में उपलब्ध था और किसी भी ओएस के साथ शिप नहीं किया गया था। 2.0 को आदर्श माना जाना चाहिए।
मैट

@TimmyD मैं उस बिंदु से सहमत हूं जहां पावरशेल 1.0 का संबंध नहीं है। अगर कोई इस साइट का उपयोग कर रहा है कि यह मुझे आश्चर्य होगा। अगर मैंने 3.0 या उच्चतर सुविधा का उपयोग किया है, तो मैं उस पर प्रकाश डालूंगा।
मैट

3

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

VQ.>r"5 25_"9O30*4b

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

बग को पकड़ने के लिए FryAmTheEggman को धन्यवाद।


@AandN FryAmTheEggman सही है, मैंने इसे 0-25 के बजाय 0-29 अक्षरों द्वारा बेतरतीब ढंग से स्थानांतरित करने के लिए बदल दिया है।
माइक ब्यूफेरेसी

2

SpecBAS - 93 बाइट्स

1 a$="_"*25+" "*5: INPUT n: FOR i=1 TO n: r=1+INT(RND*30): ?a$(r TO)+a$( TO r-1)''''': NEXT i

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

एपोस्ट्रोफ एक नई रेखा को बल देता है, इसलिए स्ट्रिंग के अंत में 1 और 4 खाली लाइनें।


2

MATL , 23 बाइट्स

:"95l25X"5Z"h30YrYS10ct

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

व्याख्या

:"           % take input n implicitly. Repeat loop n times
  95l25X"    %   row vector with number 95 ('_') repeated 25 times
  5Z"        %   row vector of 5 blank spaces
  h          %   concatenate vertically
  30Yr       %   random number uniformly distributed on [1,2,...,30]
  YS         %   circularly shift
  10c        %   newline character. Includes another newline when printed
  t          %   duplicate
             % implicitly end loop and display stack contents

2

जावा, 177 140 बाइट्स

-1 बाइट से ब्लू i ++ चल रहा है

मूल में व्यर्थ व्हाट्सएप छोड़ने के लिए -2 बाइट्स

-34 बाइट टू ब्लू फॉर रियलाइजिंग I द नीड ऑफ द चार [] बिलकुल

क्योंकि, फिर पता है, जावा।

n->{String s="";for(;n-->0;){int r=(int)(Math.random()*30);for(int i=0;i<30;){s+=i>r&i<r+6|r>24&i++<=r%25?" ":"_";}s+="\n\n\n\n";}return s;}

थोड़ा अपराजित:

Function<Integer, String> fallingBall = n -> {
    String s = "";
    for (;n-->0;) {
        int r = (int)(Math.random()*30);
        for (int i=0; i<30; i++) {
            s += i>r&i<r+6|r>24&i<=r%25?" ":"_";
        }
        s += "\n\n\n\n";
    }
    return s;
}

चूंकि जावा में स्ट्रिंग 'रोटेट' नहीं है, इसलिए मुझे एक अलग तरीका अपनाना पड़ा। मैंने एक यादृच्छिक int 0-29 उत्पन्न किया जो छेद के प्रारंभ सूचकांक का प्रतिनिधित्व करता है (OBO क्योंकि इससे >छोटा है >=)। प्रत्येक व्यक्तिगत चरित्र को तर्क द्वारा तय किया जाता है

l[index] = (index>random && index<random+6) || (random>24 && index<=random%25) ? ' ' : '_';

यह पूरे के "रैपिंग" प्रकृति को संभालता है।


I ++ को अंतिम स्थान पर उपयोग किया जाता है जिसे लगाकर आप एक बाइट बचा सकते हैं।
ब्लू

होशियार। हैकी, लेकिन स्मार्ट। होशियार अभी भी मुझे किसी तरह अपने स्निपेट ( s = "") की शुरुआत में व्यर्थ व्हाट्सएप छोड़ रहा है । अभी दोनों तय हैं।
सीएडी 97

आप वर्ण सरणी से छुटकारा पाकर अधिक झुंड को भी बचा सकते हैं, चार शाब्दिकों को स्ट्रिंग शाब्दिकों में बदल सकते हैं, और लूप के लिए अंदर s + = का उपयोग कर सकते हैं। मैंने अभी इसका परीक्षण किया
ब्लू

Btw महान जवाब
ब्लू

इसे करने के एक तरीके पर ध्यान केंद्रित करने के लिए मुझे यही मिलता है। -34 (!) बाइट्स।
CAD97

1

पायथन 3.5 - 109 113 बाइट्स (प्रत्येक परिणाम के बीच 4 नई लाइनें प्रिंट करने के लिए +4):

def g(a,j='_'*25+' '*5):
 for l in range(a):import random;n=random.randrange(len(j)+1);print(j[-n:]+j[:-n]+'\r'*4)

अघोषित रूप:

# j is the starting string with the 25 underscores and then 5 spaces at the end
def g(a,j='_'*25+' '*5):
    import random #Import the random module
    for l in range(a): # Do the following as many times as provided by the user
        n=random.randrange(len(j)+1) Get a random number in the range 0-29
        print(j[-n:]+j[:-n]+'\r'*4) #Shift the string characters right "n" times and print out the results with 4 new lines in between

असल में क्या चल रहा है कि एक स्ट्रिंग 'जे', जिसमें 5 स्थानों के बाद 25 अंडरस्कोर शामिल है, फ़ंक्शन "जी" के तर्क के रूप में दिया गया है। फिर, यादृच्छिक मॉड्यूल आयात किया जाता है, और, उपयोगकर्ता द्वारा निर्दिष्ट के रूप में कई बार, एक यादृच्छिक संख्या को सीमा में चुना जाता है 0 => 29, और स्ट्रिंग, "जे", को कई बार सही स्थानांतरित किया जाता है। परिणाम प्रत्येक परिणाम के बीच 4 नई लाइनों के साथ, प्रत्येक पुनरावृत्ति के बाद मुद्रित किया जाता है।


क्या यह भी बीच में newlines मुद्रित करता है?
अदनान

@ और अब यह करता है। :)
आर। काप

आपको वास्तव में 4 नए समाचार प्रिंट करने की आवश्यकता है: पी। इसलिए बदलने के '\r'लिए '\r'*4शायद काम करना चाहिए। इसके अलावा, मुझे लगता है कि आप बदल सकते हैं range(a+1)करने के लिए range(a)
अदनान

@AandN वास्तव में, range(a)वास्तव a-1में लाइनों की संख्या को प्रिंट करता है , इसलिए range(a+1)उपयोगकर्ता द्वारा प्रदान की जाने वाली लाइनों की सटीक संख्या का प्रिंट आउट करने का सबसे अच्छा तरीका है। इसके अलावा, यह अब प्रत्येक परिणाम के बीच में 4 नई लाइनें प्रिंट करता है।
आर। काप

हम्म, यह अजीब है, क्योंकि मैंने इसके साथ परीक्षण किया g(5)और यह पांच के बजाय 6 तार प्रिंट करता है, इसलिए इसे बदलने a+1से aशायद यह ठीक हो जाएगा।
अदनान

1

पायथन, 119 103 बाइट्स

import random
s='_'*20+' '*5
def f(n,a=random.randint(0,25)):[print(s[a:]+s[:a]+3*'\n')for _ in' '*n]

आपका नवीनतम अद्यतन काम नहीं करता है क्योंकि आपने यादृच्छिक को एक डिफ़ॉल्ट तर्क में रखा है, इसलिए फ़ंक्शन हमेशा एक ही पंक्ति nबार आउटपुट करेगा
Sp3000
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.