बारिश के बादल मेरे… चश्मे पर पड़ रहे हैं?


23

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

कार्य

पानी की एक बूंद के साथ आउटपुट ASCII कला चश्मा प्रत्येक सेकंड जोड़ा।

इनपुट

कोई नहीं

उत्पादन

उन पर पानी की बूंदों के साथ चश्मे की एक जोड़ी।

चश्मा

 ________________________
|          /__\          |
|         /    \         |
|        /      \        |
\_______/        \_______/

रेनड्रॉप्स

रेनड्रॉप को ए से चिह्नित किया जाता है .। रेनड्रॉप को चश्मे के लेंस पर बेतरतीब ढंग से रखा जाता है। इसलिए जब एक बारिश का पानी रखा जाता है, तो चश्मा इस तरह लग सकता है

 ________________________
|          /__\          |
|    .    /    \         |
|        /      \        |
\_______/        \_______/

यदि इसे एक रिक्त स्थान ( ) .पर रखा गया है, तो छवि पर रखा गया है। यदि यह एक वर्ग पर रखा गया है जिसमें पहले से ही एक वर्षाबूंद है, तो ड्रॉप ग्रेजुएट।

बूंदों पर कदम हैं

  • कोई बूँद नहीं रखी गई:
  • 1 ड्रॉप रखा: .
  • 2 बूँदें रखी गईं: o
  • 3 बूँदें रखी गईं: O
  • 4+ बूँदें रखी गईं: @

नियम

  • छवि को वैसे ही देखना चाहिए जैसे वह जगह पर रहता है। इसका मतलब यह है कि आप स्क्रीन को या तो साफ़ कर सकते हैं या स्क्रीन को "साफ़" करने के लिए पर्याप्त नई सीमाएँ प्रिंट कर सकते हैं। आप चरणों की सूची नहीं लौटा सकते। इस बारे में क्षमा करें, लेकिन आपको उसके आसपास काम करने में सक्षम होना चाहिए।
  • स्क्रीन को "स्पष्ट" करने के लिए नए सिरे से आउटपुट देते समय, आपके पास चश्मे के बीच कम से कम 3 नए अंक होने चाहिए।
  • कोड तब तक चलता है जब तक कि चश्मे पूरी तरह से स्नातक की पढ़ाई से भरे न हों, जब तक कि आउटपुट इस तरह नहीं दिखता है:
     ________________________
    | @@@@@@@@@@ / __ \ @@@@@@@@@@ |
    | @@@@@@@@@@@@@@@@@@@@@@ |
    | @@@@@@@@@@@@@@@@@@@@ |
    \ _______ / \ _______ /
  • बाइट्स में सबसे छोटा कोड जीतता है।

" कोड तब तक चलता है जब तक चश्मा पूरी तरह से स्नातक की पढ़ाई से भरा नहीं होता है " शायद एक अनुमानित नींद / प्रतीक्षा समय निर्दिष्ट करें? 150 या 250 एमएस की तरह?
केविन क्रूज़सेन

2
क्या कोड को बंद करना पड़ता है जब चश्मा अंतिम आउटपुट की तरह दिखता है या क्या यह चालू रह सकता है लेकिन बस कुछ भी प्रभावित नहीं करता है?
TheLethalCoder

@ TheLethalCoder मैं कल्पना करूंगा जब तक चश्मा पूरा न हो जाए, जैसा कि कल्पना में लिखा गया है: v
जेनकर

ड्रॉपलेट के बेतरतीब ढंग से गिरने पर लेंस के टुकड़ों के हिस्से पर भी अनियमित रूप से गिरना पड़ता है @?
जेनकर

@ TheLethalCoder को सभी स्नातक होने के बाद इसे समाप्त कर देना चाहिए
caird coinheringaahing

जवाबों:


11

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

document.write('<pre id=o>')
a=[...` _8_8_8
| 9 /__\\  9|
| 9/ 4\\ 9|
| 8/ 6\\ 8|
\\_7/ 8\\_7/`.replace(/.\d/g,s=>s[0].repeat(s[1]))]
s=" .oO@@"
g=_=>o.innerHTML=a.join``
f=(i=s.indexOf(a[j=Math.random()*a.length|0])+1)=>i?g(a[j]=s[i]):f()
g()
setInterval(f,1e3)

संपादित करें: 2 4 बाइट्स @ शगुन की बदौलत सहेजे गए।


3
ऊपरी बाएँ कोने में कुछ गड़बड़ है
J42161217

-1 क्योंकि यह खराब है (जेनी की टिप्पणी देखें)
विनाशकारी नींबू

1
@DestructibleLemon क्षमा करें इसके बारे में, मुझे फ़ायरफ़ॉक्स के क्लिपबोर्ड के "फीचर" से काट दिया गया ... अब ठीक होना चाहिए।
नील

के innerTextबजाय textContentऔर के searchबजाय के साथ बाइट्स के एक जोड़े को बचाओ indexOf। और केवल <pre id=oHTML के रूप में उपयोग करके कुछ और , बजाय document.writeइसे आईएनजी के।
झबरा

1
@ शागि ग्रेट मिल, धन्यवाद!
नील

5

जावा 8, 449 421 बाइट्स

v->{String q="########",g=" ________________________\n|##"+q+"/__\\##"+q+"|\n|#"+q+"/    \\#"+q+"|\n|"+q+"/      \\"+q+"|\n\\_______/        \\_______/\n\n\n";for(int t=0,n,x;g.matches("(?s).*[#\\.oO].*");Thread.sleep(150)){for(;(x=g.charAt(n=(int)(Math.random()*g.length())))!=35&x!=46&x!=111&x!=79;);if(t++>0)g=g.substring(0,n)+(x<36?".":x<47?"o":x<80?"@":"O")+g.substring(n+1);System.out.println(g.replace('#',' '));}}

स्पष्टीकरण:

इसे यहाँ आज़माएँ। ( Thread.sleepइसलिए निकाल दिया जाता है ताकि आप तुरंत परिणाम देखें।)

v->(){                      // Method without empty unused parameter and no return-type
  String q="########",g=" ________________________\n|##"+q+"/__\\##"+q+"|\n|#"+q+"/    \\#"+q+"|\n|"+q+"/      \\"+q+"|\n\\_______/        \\_______/\n\n\n";
                            //  The glasses (with inner spaces replaced by '#')
  for(int t=0,n,x;          //  Index integers
      g.matches("(?s).*[#\\.oO].*");
                            //   Loop (1) as long as the glasses still contain "#.oO"
      Thread.sleep(150)){   //   And sleep 150ms after each iteration to give the animation
    for(;                   //   Inner loop (2)
         (x=g.charAt(n=(int)(Math.random()*g.length())))!=35&x!=46&x!=111&x!=79;
                            //    To find the next '#', '.', 'o' or 'O' randomly
    );                      //   End of inner loop (2)
    if(t++>0)               //   Flag so it prints the initial glasses without a raindrop
      g=g.substring(0,n)+(x<36?".":x<47?"o":x<80?"@":"O")+g.substring(n+1);
                            //    Add a raindrop on this random position
    System.out.println(g    //   And print the glasses
        .replace('#',' ')); //   After we've replaced '#' with spaces
  }                         //  End of loop (1)
}                           // End of method

आउटपुट:

नोट: डॉट्स gif में थोड़े अजीब हैं, लेकिन मेरे स्क्रीनटॉफ़ ..exe में एक समस्या है।
यहाँ छवि विवरण दर्ज करें


1
तुम्हें पता है कि मेरे बारे में क्या चकाचौंध है, उन अजीब डॉट्स (वही स्केल्ड-डाउन पर लागू होते हैं ") वास्तव में मेरी स्क्रीन के शीर्ष पर एक असली पानी की बूंद
दिखती है

1
यह @: v
जेनकर

@ जेनकेर दूसरी बार जब आपने कहा है कि उत्तर पर। कृपया इसका मतलब बताएं।
17'17

@RandomUser बुनियादी तौर पर, इस उत्तर में वर्तमान कोड एक ऐसे स्थान की तलाश करता है जो अभी तक एक @ पर गिरने के लिए नहीं है, बल्कि लेंस पर बेतरतीब ढंग से गिरने के बजाय, भले ही यह एक है। आवश्यकताओं में "4+" से प्रतीत होता है कि यह जाने की स्थिति नहीं है, बल्कि इसके बजाय एक @ सहित यादृच्छिक रूप से लेंस पर गिरना चाहिए। क्या यह सही व्याख्या नहीं है?
जेनकर

@ जेनकर यह कोई फर्क नहीं पड़ता कि यह कैसे होता है, बस यह किसी भी नियम या मानक खामियों का उल्लंघन किए बिना करता है। मैंने कभी नहीं कहा "प्रश्न में एक समान यादृच्छिक वितरण होना चाहिए" इसलिए यह उत्तर ठीक है।
'16:02 पर caird coinheringaahing

3

एफ #, गैर-पुनरावर्ती 379 414 404 बाइट्स

open System
let z=String.replicate
let mutable s,d=z 54" ",new Random()
while Seq.exists((<>)'@')s do printfn" %s\n|%s/__\\%s|\n|%s/    \\%s|\n|%s/%7s%s|\n\\_______/%9s_______/\n\n"(z 24"_")(s.[..9])(s.[10..19])(s.[20..28])(s.[29..37])(s.[38..45])"\\"(s.[46..53])"\\";Threading.Thread.Sleep(1000);d.Next54|>fun i->s<-(s.[i]|>function|' '->"."|'.'->"o"|'o'->"O"|_->"@")|>(fun c->s.Remove(i,1).Insert(i,c))

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

  • -7 बाइट्स @vzwick को धन्यवाद
    • String.replicate को अलग करके
    • हर बार रेफर करने के बजाय सिस्टम को खोलकर
  • -3 बाइट्स जबकि लूप को एक पंक्ति में कम करके

मुझे इस चुनौती का आधार पसंद है :)

और इयरवॉर्म के लिए धन्यवाद।

एफ #, 406 441 438 437 423 बाइट्स

open System
let z=String.replicate
let s,d=z 54" ",new Random()
let rec(!)s=s="";printfn" %s\n|%s/__\\%s|\n|%s/    \\%s|\n|%s/%7s%s|\n\\_______/%9s_______/\n\n"(z 24"_")(s.[..9])(s.[10..19])(s.[20..28])(s.[29..37])(s.[38..45])"\\"(s.[46..53])"\\";Threading.Thread.Sleep(1000);if Seq.exists((<>)'@')s then d.Next 54|>fun i-> !((s.[i]|>function|' '->"."|'.'->"o"|'o'->"O"|_->"@")|>(fun c->s.Remove(i,1).Insert(i,c)))else()
!s

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

  • -3 बाइट्स स्ट्रिंग के साथ तुलना करके स्ट्रिंग को विवश करने के लिए
  • -1 बाइट, फंक्शन का नाम अब "है!" एक सिंगल स्पेस को सेव करने पर
  • -7 बाइट्स @vzwick को धन्यवाद
    • String.replicate को अलग करके
    • हर बार रेफर करने के बजाय सिस्टम को खोलकर
  • -1 बाइट, d.Next कहते समय कोष्ठक की कोई आवश्यकता नहीं
  • -6 बाइट्स, फ़ंक्शन अब एक पंक्ति है

व्याख्या

open System
let z = String.replicate    // define alias
let s, d = z 54 " ", new Random() // s holds a flat representation of the glasses.. glasses
let rec(!) s =
    s=""; // type s to string
    printfn" %s\n|%s/__\\%s|\n|%s/    \\%s|\n|%s/%7s%s|\n\\_______/%9s_______/\n\n"
        (z 24 "_")     // top of the glasses
        (s.[..9])      // slice
        (s.[10..19])   // and
        (s.[20..28])   // dice
        (s.[29..37])   // the
        (s.[38..45])   // glasses
        "\\"           // \ gets prepended with 6 spaces thanks to %7s
        (s.[46..53])
        "\\";          // same deal, just 8 spaces this time
    Threading.Thread.Sleep(1000);
    if Seq.exists((<>)'@') s then // if not everything's totally covered
        d.Next 54                 // get new random int < 54 (string has indices 0-53)
        |> fun i->                // passing is shorter than a let binding, saves two spaces and a new line
            !(                    // call the function again with new drop on glasses
              (s.[i]              // get part of the glasses drop fell on
              |>function
              |' '->"."           // promote drop
              |'.'->"o"
              |'o'->"O"
              |_->"@")
              |>(fun c-> s.Remove(i,1).Insert(i,c))) // and insert this in the string
    else ()
!s

आप 1 char को ( और कॉल से open Systemहटाकर ) बचा सकते हैं;)SystemRandom()Threading.Thread.Sleep()
vzwick

कुछ और पात्रों का मुंडन
vzwick

@vzwick धन्यवाद :) एक और कुछ बाइट्स मिला जैसे मैं editig था
ब्रूनर

2

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

यह थोड़ा बेहतर है ...

import time,random
g=' '+'_'*24+r"""
|xxX/__\Xxx|
|xX/    \Xx|
|X/      \X|
\_______/        \_______/""".replace('X','x'*8)
while 1:
 print'\n'*3+g.replace('x',' ')
 s='x.oO@@'
 if all(c not in g for c in s[:-2]):exit()
 i,c=random.choice([(i,s[s.index(j)+1])for i,j in enumerate(g)if j in s])
 g=g[:i]+c+g[i+1:]
 time.sleep(1)

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

उपरोक्त लिंक 3 के बजाय 30 लाइनों का उपयोग करता है, लेकिन आप इसे 3 के साथ देख सकते हैं यदि आप अपनी ब्राउज़र विंडो को छोटे से लंबवत रूप से छोटा करते हैं। बदले time.sleep(1)के लिए time.sleep(.1)10x गति के लिए।


2

सी, 313 309 305 304 बाइट्स

थोड़ा नीचे गोल्फ करने की जरूरत है;

c;f(r,q){for(char*m=" ________________________\n|**********/__\\**********|\n|*********/    \\*********|\n|********/      \\********|\n\\_______/        \\_______/\n";c<216;r=rand()%144,m-=135)for(system("clear");*m++;putchar(*m^42?*m:32))q=--r?*m:*m^42?*m^46?*m^111?*m^79?*m:64:79:111:46,c+=q!=*m,*m=q;}

मैं इसे निम्नलिखित परीक्षण ठूंठ के साथ चलाता हूं

main()
{
    srand(time(0));    
    f();
}

यहाँ छवि विवरण दर्ज करें


2

रूबी , 237 224 228 218 206 198 197 बाइट्स

g=" #{?_*24}
|x##/__ax##|
|x#/    ax#|
|x/      ax|
a#{u=?_*7}/xa#{u}/


".gsub ?x,?#*8;217.times{|t|puts g.tr('#a',' \\');()while t<216&&g[x=rand*106]!~/[#.oO]/;g[x]=g[x].tr '#.oO','.oO@';sleep 1}

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

पिछला उत्तर गलत था, इसमें @ पर गिरने वाली वर्षा का ध्यान नहीं रखा गया था। जाहिर है एक आवश्यकता नहीं है। कुछ बाइट्स को बचाया।

यह एक त्रुटि के साथ समाप्त हो जाता है, लेकिन निश्चित रूप से पूर्ण चश्मा मुद्रित होते ही यह समाप्त हो जाता है।

  • 13 बाइट्स को एक लंबोदर में डालकर, और ट्रे (डुह) का उपयोग करने के लिए असाइनमेंट को बदलकर सहेजा गया
  • 1 सेकंड की आवश्यकता के साथ 8 बाइट्स की हानि।
  • 10 बाइट्स प्रक्षेप के बजाय gsub चाल का उपयोग करके प्राप्त करते हैं ( mbomb007 के पायथन उत्तर से देखा और अनुकूलित )।
  • 12 बाइट्स लैंबडा प्रिंटिंग को हटाकर लाभ प्राप्त करते हैं कि प्रिंट केवल एक बार ही>>> लिखा जाता है
  • सभी बनाकर 1 बाइट लाभ \\हो aटीआर अंदर है, तो बदल रहा है वापस
  • 7 बाइट को अंतिम पंक्ति पर दूसरे x(डुह) के साथ बदलते हुए स्थान डालकर लाभ । यदि आप में से कुछ लोग सोच रहे हैं कि यह मुख्य लूप को प्रभावित क्यों नहीं करता है: मुख्य लूप इसका निर्धारण करने के लिए अंतिम पंक्ति पर विचार नहीं करता है x
  • चश्मे के ऊपर के सिरे को हटाकर 1 बाइट हासिल करें

याय <200 बाइट्स: डी

Gif:

Gif


3
भविष्य के संदर्भ के लिए आप अपने पिछले उत्तर को संपादित कर सकते हैं जो इसे हटाने और नया जोड़ने के बजाय काम करता है।
TheLethalCoder

क्या आप इसे चलाने के gif में जोड़ सकते हैं?
17'17

@RandomUser किया।
जेनकर

1

बैश, 576 510 429 416 बाइट्स

j()(IFS=
printf "$*")
for i in {53..0};{ a[$i]= 
b[$i]=@;}
while(($i == 0));do clear
echo  " ________________________
|`j ${a[@]::10}`/__\\`j ${a[@]:10:10}`|
|`j ${a[@]:20:9}`/    \\`j ${a[@]:29:9}`|
|`j ${a[@]:38:8}`/      \\`j ${a[@]:46}`|
\_______/        \_______/"
[ `j ${a[@]}` = `j ${b[@]}` ]&&{
i=1
}
sleep 1
d=`shuf -i0-53 -n1`
c=${a[$d]}
case $c in  )a[$d]=.;;.)a[$d]=o;;o)a[$d]=0;;0)a[$d]=@;esac
done

वाह, बहुत गुदगुदाया। अगर किसी को आगे गोल्फ के लिए कोई विचार है, तो मैं सुझाव के लिए खुला हूँ

यह अपने आप का प्रयास करें! यह 60 सेकंड की सीमा के कारण नींद की टिप्पणी है

यहाँ gif है:

यहाँ छवि विवरण दर्ज करें



0

गणितज्ञ, 438 बाइट्स

f=Flatten;p=Print;z=32;q=95;l=124;t=Table;v=z~t~8;s={f@{z,q~t~24,z},f@{124,z~t~10,47,q,q,92,z~t~10,l},f@{l,z~t~9,47,z~t~4,92,z~t~9,l},f@{l,v,47,z~t~6,92,v,l},f@{92,q~t~7,47,v,92,q~t~7,47}};c=0;Monitor[While[c<54,a=s[[i=RandomInteger@{2,4},j=RandomChoice[Range[2,13-i]~Join~Range[14+i,25]]]];If[a==z,s[[i,j]]=46,If[a==46,s[[i,j]]=111,If[a==111,s[[i,j]]=48,If[a==48,s[[i,j]]=64]]]];c=Count[Flatten@s,64];Pause@1],Column@FromCharacterCode@s]

यहाँ एक 10x गति परिणाम gif है

यहाँ छवि विवरण दर्ज करें


कभी भी गणितज्ञ का उपयोग नहीं किया गया Table, लेकिन क्या आप इसे असाइन कर सकते हैं , 95और 32?
'23:55 पर caird coinheringaahing

में t=Table x = 32और y = 95?
caird coinheringaahing

हां बिल्कुल। मैंने कल से इसे बहुत बड़ा किया
J42161217

आप अंतिम Flattenको बदलकर 6 बाइट निकाल सकते हैं f?
caird coinheringaahing

0

PHP, 262 254 बाइट्स

for($t=" 8_8_8_
|Y9Y/__\Y9Y|
|9Y/4 \9Y|
|8Y/6 \8Y|
\\7_/8 \\7_/";$c=$t[$i++];)$s.=$c<1?$c:str_repeat($t[$i++],$c);for(;$c=$s[++$k];)$c!=Y?:$s[$m[]=$k]=" ";for(;$u<216;print str_pad($s,999,"
",sleep(1)))$u+=($c=".oO@"[$a[$p=rand(0,53)]++])&&$s[$m[$p]]=$c;

इसे ऑनलाइन चलाएं -nRया इसके लिए प्रयास करें

टूट - फूट

# prep 1: generate template from packed string
for($t=" 8_8_8_\n|Y9Y/__\Y9Y|\n|9Y/4 \9Y|\n|8Y/6 \8Y|\n\\7_/8 \\7_/";
    $c=$t[$i++];)$s.=$c<1?$c:str_repeat($t[$i++],$c);
# prep 2: map substituted spaces and replace with real spaces
for(;$c=$s[++$k];)$c!=Y?:$s[$m[]=$k]=" ";
# loop until glasses are fully wet:
for(;$u<216;
    # 4. print glasses prepended with 865 newlines
    print str_pad($s,999,"\n",
    # 3. wait 1 second
        sleep(1)))
    $u+=($c=".oO@"[
        $a[$p=rand(0,53)    # 1. pick random position
        ]++])               # 2. and increment
        &&$s[$m[$p]]=$c         # if not fully wet, graduate drop
    ;                           # and increment drop count ($u+=)
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.