अपने आप को एक बियर गोल्फ


26

आज शुक्रवार है! इसका मतलब है कि यह बीयर का समय है!
अफसोस की बात है, आज हम इसे पीने के बजाय बीयर पिलाएंगे। :(

चुनौती

एक बीयर का उत्पादन और इसे पीते हैं। आपके द्वारा लिए जाने वाले सिप्स की मात्रा आपके आउटपुट को बदल देती है।

घूंट

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

आप जितना अधिक घूंट लेंगे, आपका बीयर का गिलास उतना ही खाली होगा।

यदि आप 0 घूंट लेते हैं, तो आपकी बीयर में अभी भी झाग है। इस फोम का आउटपुट हमेशा समान होता है (उदाहरण देखें)।

यदि आप 1 घूंट लेते हैं, तो आपको बीयर ग्लास का उत्पादन करना चाहिए, इसके बाद एक नई लाइन और स्ट्रिंग होगी Yuck, foam.

यदि आप 1 या अधिक घूंट लेते हैं, तो आपके बीरग्लास में फोम नहीं होना चाहिए, लेकिन आपके ग्लास के शीर्ष को दिखाना चाहिए। फोम पीना एक घूंट के रूप में गिना जाता है।

यदि आप 6 या अधिक घूंट लेते हैं, तो आपको एक खाली बीयर ग्लास का उत्पादन करना चाहिए, उसके बाद एक नई रेखा और स्ट्रिंग Burp

आपके द्वारा लिए जाने वाले प्रत्येक घूंट के लिए, आपका बीयर गिलास खाली होना चाहिए। आपकी बीयर में कितना भरा हुआ है , यह आपके बीयर में बुलबुले °( °) की मात्रा पर निर्भर करता है । प्रत्येक घूंट के लिए आप फोम के बाद लेते हैं, बुलबुले की एक पंक्ति को हटा दिया जाना चाहिए। बीयर की प्रत्येक पंक्ति में कम से कम 1और अधिकतम 5बुलबुले हो सकते हैं। इन बुलबुले की स्थिति 100% यादृच्छिक होनी चाहिए।

उदाहरण

इनपुट

empty input string, or no input at all

उत्पादन

  oo  o oo 
 oooooooooooo
o|  °     ° |\
 |     °    | \
 | °°    °  |} |
 |  °    °  | /
 |     °   °|/
 \__________/

इनपुट

sip sip sip

उत्पादन

 ____________
 |          |\
 |          | \
 |     °    |} |
 |° °     ° | /
 | °    °   |/
 \__________/

इनपुट

sip sip sip sip sip sip sip sip sip sip

उत्पादन

 ____________
 |          |\
 |          | \
 |          |} |
 |          | /
 |          |/
 \__________/
Burp

इस पास्टबिन में इनपुट और आउटपुट की एक सूची है। याद रखें कि बीरग्लास में बुलबुले यादृच्छिक होना चाहिए!

स्कोरिंग

यह , बाइट्स जीत में सबसे छोटा कोड!

हैप्पी ड्रिंकिंग गोल्फिंग!


आप यह ध्यान रखना चाहेंगे कि °कोड प्वाइंट 176 वाला चरित्र हो।
मार्टिन एंडर

2
लैटिन -1 और यूनिकोड में 176, अधिक विशिष्ट होने के लिए।
मीगो

1 और 6+ स्वीकार्य को छोड़कर इनपुट पर एक अनुगामी न्यूलाइन है?
ETHproductions

@ETHproductions हाँ। जब में लैपटॉप पर संपादित करेंगे
Bassdrop Cumberwubwubwub

1
मग आउटपुट एक ही रहना चाहिए। हर लाइन पर बुलबुले की मात्रा हर रन के हिसाब से अलग होनी चाहिए। प्रत्येक पंक्ति पर केवल एक बुलबुला हो सकता है, या 5 तक। यह चुनौती का यादृच्छिक हिस्सा है
बेसड्रॉप क्यूबर्बुबवब

जवाबों:


9

जाप , 189 बाइट्स

मैं लगभग ठीक से काम करने के लिए इसे पाने की कोशिश करते हुए पागल हो गया था ...

U?S+'_pC +R:"  oo  o oo\n "+'opC +"\no")+"\\, \\,} |, /,/"q', £(V=(!Y«U?"|: |" +SpA +'|+X,(1+5*Mr)o mZ=>Ul <Y*4+4©(V=Vh2+A*Mr ,'° ),V)qR +"\n \\"+'_pA +'/+R+(Ul ¥3?"Yuck, foam.":Ug22 ?`B¨p:

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

(नोट: यह प्रोग्राम Japt के पुराने संस्करण के लिए बनाया गया था, और वर्तमान में नवीनतम संस्करण में काम नहीं करता है। इसके चारों ओर जाने के लिए, URL में पुराने संस्करण को निर्दिष्ट किया गया है। दुर्भाग्य से, इसका अर्थ शीर्ष-सही कोड बॉक्स भी है। काम नहीं करता है।)

यह अब तक का सबसे लंबा कार्यक्रम है जो मैंने जाप में लिखा है। यहाँ एक ब्रेकडाउन है:

चरण 1: बीयर मग के शीर्ष बनाएं।

U?S+'_pC +R:"  oo  o oo\n "+'opC +"\no")

           // Implicit: U = input string
           // Begin the ASCII art with:
U?S+       //  If U is not an empty string, a space +
'_pC +R:   //   "_".repeat(12) + a newline.
:"..."+    //  Otherwise, this string +
'opC +     //   "o".repeat(12) +
"\no")     //   a newline and an "o".

यदि U एक खाली स्ट्रिंग है, तो यह बनता है:

  oo  o oo
 oooooooooooo
o

अन्यथा, यह बनाता है:

 ____________

चरण 2: मग की मध्य पंक्तियों को बनाएं।

+"\\, \\,} |, /,/"q', £(V=(!Y«U?"|: |" +SpA +'|+X,

+"..."    // Add to the previous string: this string,
q', £(    // split at commas, with each item X and its index Y mapped to:
V=(       //  Set variable V to the result of concatenating:
!Y«U?     //   If Y is 0 and U is an empty string,
"|: |"    //    "|"; otherwise, " |";
+SpA      //   10 spaces,
'|+X,     //   "|", and X.

इसके परिणामस्वरूप पिछले स्ट्रिंग प्लस:

 |          |\
 |          | \
 |          |} |
 |          | /
 |          |/

चरण 3: बुलबुले जोड़ें।

(1+5*Mr)o mZ=>Ul <Y*4+4©(V=Vh2+A*Mr ,'° ),V)

            // Note: We're still looping through the five rows at this point.
(1+5*Mr)    // Generate a random integer between 1 and 5.
o           // Create an array of this many integers, starting at 0.
mZ=>        // Map each item Z in this range to:
Ul <Y*4+4©  //  If the length of U is less than Y*4+4,
            //  (in other words, if there's less than Y+1 "sip"s)
(V=Vh   '°  //   Insert "°" at position
2+A*Mr      //    2 + random number between 0 and 9.
),V)qR      // Finally, return V, and join the five rows with newlines.

इस बिंदु पर, मग कुछ इस तरह दिखता है:

 ____________
 |          |\
 |          | \
 |     °    |} |
 |° °     ° | /
 | °    °   |/

चरण 4: अंतिम पंक्ति और वैकल्पिक पाठ जोड़ें।

+"\n \\"+'_pA +'/+R+(Ul ¥3?"Yuck, foam.":Ug22 ?`B¨p:

+"\n \\"    // Add a newline and " \".
+'_pA       // Add 10 "_"s.
+'/+R       // Add a slash and a newline.
+(Ul ¥3?    // If the length of U is 3 (i.e. 1 "sip"),
"..."       //  add the string "Yuck, foam.".
:Ug22 ?     // Otherwise, if U has a character at position 22 (six or more "sip"s),
`B¨p        //  decompress this string ("Burp") and add it.
:           // Otherwise, add nothing.

अब सब कुछ आउटपुट पर भेजने के लिए तैयार है, जो स्वचालित रूप से किया जाता है। यदि आपका कोई प्रश्न है, तो कृपया पूछिए!


3 दिन हो गए। आरआईपी मस्तिष्क
बैसड्रॉफ़ कम्बरवॉबुवब

@ क्योंकि मैंने इसे ज्यादातर कल लिखा था, लेकिन यह मेरे मस्तिष्क के रूप में इतना नहीं था कि मेरे ब्राउज़र की मृत्यु हो गई;) मैं इसे आज ही लिखूंगा।
ETHproductions

मुझे खुशी है कि आपका मस्तिष्क अभी भी काम कर रहा है, और मैं इस <s> राक्षसी </ s> कोड का सुंदर टुकड़ा
बैसब्रांड कंबरवॉबुवब

1
@ बैस स्पष्टीकरण तैयार है :-)
ETHproductions

4

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

s=>` `+(u=`_________`,(s=s&&s.split` `.length)?u+`___
 `:` oo  o oo
 oooooooooooo
o`)+(i=0,l=q=>`|`+[...u].map(_=>Math.random()>.8&i>=s&&b++<5?`°`:` `,b=0,i++).join``+(b|i<s?` `:`°`)+`|`+q+`
 `)`\\`+l` \\`+l`} |`+l` /`+l`/`+`\\`+u+`_/
`+(s&&s<2?`Yuck, foam.`:s>5?`Burp`:``)

व्याख्या

s=>
  ` `+(u=`_________`,        // u = 9 underscores
  (s=s&&s.split` `.length)   // s = number of sips
    ?u+`_
 `:` oo  o oo
 oooooooooooo
o`)                          // print glass top or foam

  // Print glass lines
  +(i=0,                     // i = line number
    l=q=>                    // l = print glass line
      `|`+[...u].map(_=>     // iterate 9 times
        Math.random()>.8     // should we put a bubble here?
        &i>=s                // has this line already been sipped?
        &&b++<5              // have we already placed 5 bubbles?
          ?`°`:` `,          // if not, place the bubble!
        b=0,                 // reset the number of placed bubbles
        i++                  // increment the line counter
      ).join``               // put the 9 spaces and bubbles together
      +(b|i<s?` `:`°`)       // place a bubble at 10 if none were placed
      +`|`+q+`
 `                           // print the suffix of this glass line
  )`\\`
  +l` \\`
  +l`} |`
  +l` /`
  +l`/`

  +`\\`+u+`_/
`                            // print the bottom of the glass
  +(s&&s<2?`Yuck, foam.`
    :s>5?`Burp`:``)          // print the message

परीक्षा

Input: <input type="text" id="sips" /><button onclick="result.innerHTML=(

s=>` `+(u=`_________`,(s=s&&s.split` `.length)?u+`___
 `:` oo  o oo
 oooooooooooo
o`)+(i=0,l=q=>`|`+[...u].map(_=>Math.random()>.8&i>=s&&b++<5?`°`:` `,b=0,i++).join``+(b|i<s?` `:`°`)+`|`+q+`
 `)`\\`+l` \\`+l`} |`+l` /`+l`/`+`\\`+u+`_/
`+(s&&s<2?`Yuck, foam.`:s>5?`Burp`:``)

)(sips.value)">Go</button><pre id="result"></pre>


1

PHP, 277 265 263 बाइट्स

1-बाइट-लाइनब्रेक मान लेना। विंडोज पर एक 14और जोड़ें 17

$r=str_pad(($i=$argc-1)?"":"  oo  o oo",16).str_pad("
 ",14,_o[!$i])."   ".($s="
 |          |")."\\  $s \\ $s} |$s / $s/
 \__________/
 ".($i<6?$i-1?"":"Yuck, foam.":burp)if(!$i){$r[34]=o;$i=1;}for(;$i++<6;)for($n=rand(1,5);$n--;)$r[17*$i+rand(2,11)]="°";echo$r;

साथ चलाना -r। लाइन ब्रेक से बचने की आवश्यकता हो सकती है।

टूट - फूट

// draw beer glass
$r=
    // first line: empty or foam
    str_pad(($i=$argc-1)?"":"  oo  o oo",16)
    // second line: top or foam
    .str_pad("\n ",14,_o[!$i])
    // other lines: empty glass+bottom
    ."   ".($s="\n |          |")."\\  $s \\ $s} |$s / $s/\n \__________/\n"
    // lyrics
    .($i<6?$i-1?"":"Yuck, foam.":burp)
;

// add foam left to the glass
if(!$i){$r[34]=o;$i=1;}

// add bubbles
for(;$i++<6;)
    for($n=rand(1,5);$n--;)
        $r[17*$i+rand(2,11)]="°";

// output
echo$r;

नमस्ते, समय में आपके सवाल का जवाब देने में विफल रहने के लिए खेद है, लेकिन फोम को ठीक किया जाना चाहिए। हालांकि, अगर यह आपकी बाइट गिनती में सुधार करता है तो मुझे लगता है कि यह यादृच्छिक भी हो सकता है। स्पष्ट रूप से निर्दिष्ट नहीं करने के लिए मेरी बुरी है, इसलिए इसे अपने लाभ के लिए उपयोग करें
बैसब्रांड कम्बर्बुबवबूब

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