दीवार पर ASCII-बीयर की 91 बोतलें


17

एक पूर्णांक को देखते हुए xजहां 0 <= x <= 91बीयर की बोतलों के ढेर के साथ कई बोतलें (और अलमारियां) गायब हैं। सादगी की खातिर मैं केवल पहली 6 बोतलें दिखाऊंगा और यह पहली इनपुट्स में से प्रत्येक के लिए क्या होगी।

यहां बोतलों का ढेर है, प्रत्येक संख्या वह बोतल है जिसे आपको उस इनपुट (1-अनुक्रमित) के लिए निकाल देना चाहिए:

https://pastebin.com/wSpZRMV6


ध्यान दें, हम 99 के बजाय 91 का उपयोग कर रहे हैं क्योंकि 99 बोतलों के अस्थिर स्टैक के परिणामस्वरूप होगा।


उदाहरण

0 बोतलें गायब होने से ( x=0):

             |=|            
             | |            
             | |            
            /   \           
           .     .          
           |-----|          
           |     |          
           |-----|          
           |_____|          
        =============       
         |=|     |=|        
         | |     | |        
         | |     | |        
        /   \   /   \       
       .     . .     .      
       |-----| |-----|      
       |     | |     |      
       |-----| |-----|      
       |_____| |_____|      
    =====================    
     |=|     |=|     |=|     
     | |     | |     | |     
     | |     | |     | |     
    /   \   /   \   /   \    
   .     . .     . .     .   
   |-----| |-----| |-----|   
   |     | |     | |     |   
   |-----| |-----| |-----|   
   |_____| |_____| |_____|   
=============================
 [THERE ARE MORE UNDER THIS]

0 के पूर्ण आउटपुट के लिए, यहां देखें: https://pastebin.com/ZuXkuH6s


1बोतल गायब होने के साथ ( x=1):

         |=|     |=|        
         | |     | |        
         | |     | |        
        /   \   /   \       
       .     . .     .      
       |-----| |-----|      
       |     | |     |      
       |-----| |-----|      
       |_____| |_____|      
    =====================    
     |=|     |=|     |=|     
     | |     | |     | |     
     | |     | |     | |     
    /   \   /   \   /   \    
   .     . .     . .     .   
   |-----| |-----| |-----|   
   |     | |     | |     |   
   |-----| |-----| |-----|   
   |_____| |_____| |_____|   
=============================
 [THERE ARE MORE UNDER THIS]

एक बार फिर, यह यहाँ से पहली दो पंक्तियाँ हैं: https://pastebin.com/ZuXkuH6s (1 हटाए जाने के साथ) ...


2 बोतलें गायब हैं:

                 |=|        
                 | |        
                 | |        
                /   \       
               .     .      
               |-----|      
               |     |      
               |-----|      
               |_____|      
    =====================    
     |=|     |=|     |=|     
     | |     | |     | |     
     | |     | |     | |     
    /   \   /   \   /   \    
   .     . .     . .     .   
   |-----| |-----| |-----|   
   |     | |     | |     |   
   |-----| |-----| |-----|   
   |_____| |_____| |_____|   
=============================
 [THERE ARE MORE UNDER THIS]

[अतिरिक्त सामग्री का भुगतान]


91 बोतलें गायब होने ( n = 91) के साथ:

:(

आपको दुखी चेहरे का उत्पादन करना चाहिए, क्योंकि आप बीयर से बाहर हैं।


नियम

  • बोतलों को बाएं से दाएं हटाया जाना है।
  • अलमारियों के शीर्ष पर कोई बीयर नहीं रहने पर अलमारियों को हटा दिया जाता है।
  • 0 के इनपुट के लिए, आप एक त्रिकोण में खड़ी 91 बोतलों का उत्पादन कर रहे हैं।
    • नीचे की पंक्ति में 13 बोतलें हैं, शीर्ष में 1 है।
  • प्रत्येक शेल्फ पर प्रत्येक बोतल के बीच 1 स्थान।
  • बोतलों की प्रत्येक पंक्ति के बीच अलमारियों का इनपुट होना चाहिए।
    • अलमारियों का उपयोग कर सकते हैं =, -या #चरित्र के रूप में।
    • अलमारियों को उनके द्वारा रखी गई बोतलों की तुलना में 3 व्यापक (प्रत्येक तरफ) होना चाहिए।
  • यह , सबसे कम बाइट-काउंट जीतता है।

क्या आप कह सकते हैं, कह सकते हैं, पूरे परीक्षण मामलों में से कम से कम एक अतीत का मामला?
कॉनर ओ'ब्रायन

एक शेल्फ की अंतिम बोतल के बाद रिक्त स्थान की आवश्यकता होती है?
जोनाथन फ्रेच

पूर्ववर्ती रिक्त स्थान की आवश्यकता होती है, जैसा कि आप उन्हें बाएं से दाएं हटा रहे हैं, एएससीआईआई-कला के दाईं ओर के रिक्त स्थान आपके ऊपर हैं।
मैजिक ऑक्टोपस Urn

@ ConorO'Brien यह देखकर कि आपने कौन सा टेस्ट केस निर्दिष्ट नहीं किया है, काश मैंने एक पास्टबिन में नाखुश चेहरा रखा होता? पी।
मैजिक ऑक्टोपस Urn

1
ओह, मैंने सोचा था कि आपने किसी भी तरह के अंतर्निर्मित को रोकने के लिए 91 को चुना था। o0
totallyhuman

जवाबों:


15

चारकोल , 99 91 बाइट्स

A⁻⁹¹NθA¹³η:(Wθ«A⌊⟦θη⟧ζA⁻θζθA⁻η¹ηFζ«↑⁴↖.\↑²←|=↓³←↙¹↓.P⁶↓²P⁶↓¹P______←| »¿θ«M⁹↑M³→×=⁻×⁸ζ³↑M⁴←

इसे ऑनलाइन आज़माएं! लिंक कोड के वर्बोज़ संस्करण के लिए है। वास्तव में असली संस्करण केवल 83 70 बाइट्स हैं:

F¹⁵Fι⊞υκ:(F⁻⁹¹N«F¬⊟υ«M³±⁹×=⁺⁵×⁸⊟υ↑M⁴←»↑⁴↖.\↑²←|=↓³←↙¹↓.P⁶↓²P⁶↓¹P×_⁶←|←

स्पष्टीकरण:

F¹⁵Fι⊞υκ

यह जानकारी प्रदान करें कि अलमारियाँ कहाँ तक जाती हैं और वे कितने समय तक हैं।

:(

एक दुखी चेहरे को प्रिंट करें, हालांकि यह तुरंत बीयर की पहली बोतल (यदि कोई हो) द्वारा अधिलेखित हो जाएगा।

F⁻⁹¹N«

बीयर की शेष बोतलों के माध्यम से लूप।

   F¬⊟υ«

यह देखने के लिए जांचें कि क्या शेल्फ को खींचने की आवश्यकता है।

        M³±⁹×=⁺⁵×⁸⊟υ↑M⁴←»

इसके ऊपर की अगली बोतल को खींचने के लिए तैयार शेल्फ और स्थिति को प्रिंट करें।

   ↑⁴↖.\↑²←|=↓³←↙¹↓.P⁶↓²P⁶↓¹P×_⁶←|←

एक बोतल और दूसरी बोतल खींचने के लिए तैयार स्थिति।


6
हुह। बहुत बुरी यह चुनौती बीयर की लगभग 99 बोतलें नहीं हैं । हो जाएगा नीचे 8 बाइट्स :): P
हाइपरएनुट्रिनो

1
@EriktheOutgolfer यही कारण है कि मैंने 8 बाइट्स गोल्फिंग का सुझाव दिया: पी और याय वह वास्तव में गोल्फ 8 बाइट्स करता था: डी
हाइपरएन्यूट्रीनो

2
@ हिपरनेत्रो बिलकुल नहीं; मैंने 11 को गोल्फ दिया, फिर 3 को अपूज किया ...
नील

1
@ केविनक्रूजसेन आम तौर पर आप एक forलूप का उपयोग करके वेतन वृद्धि करेंगे । यह एक whileलूप है, इसलिए मुझे कुछ काम मैन्युअल रूप से करना होगा।
नील

1
@KevinCruijssen हालांकि, इसके बारे में सोचते हुए, एक forपाश सभी के साथ जाने का रास्ता था ... 13 बाइट्स बचाए गए! (ठीक है, मुझे अपनी सरणी
नील

10

पायथन 3 , 306 299 265 253 255 252 247 244 बाइट्स

त्वरित प्रयास, अनुकूलित किया जा सकता है

संपादित करें: -2 बाइट्स @MrXcoder के लिए धन्यवाद

संपादित करें: -32 बाइट्स के रूप में अनुगामी रिक्त स्थान की आवश्यकता नहीं है

संपादित करें: -12 दो कार्यों के संयोजन से बाइट्स

संपादित करें: -5 बाइट्स @ musicman523 के लिए धन्यवाद

संपादित करें: अंतिम पंक्ति के बाद शेल्फ को हटाने के लिए +7 बाइट्स

संपादित करें: -3 बाइट्स

संपादित करें: एक मेमने के कार्य के कारण -5 बाइट्स केवल एक बार नक्शे में उपयोग किए जाते हैं

संपादित करें: स्ट्रिंग फ़ंक्शन का उपयोग करके -3 बाइट्सcenter

def l(y,x=13,z=" "):b=min(x,91-y);A,D="  |%s|  ","|-----|";print(y<91and(l(y+x,x-1)or"".join(map(lambda t:((t+z)*b)[:-1].center(103)+"\n",(A%"=",A%z,A%z," /   \ ",".     .",D,"|     |",D,"|_____|")))+z*(49-4*x)+"="*(x*8+5)*(x<13))or(x>12)*":(")

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


@ Mr.Xcoder जो x = 2, x = 4, x = 5, x = 7, के लिए काम नहीं करेगा ...
Halvard Wil

ओह, तुम सही हो। माफ़ करना!
श्री एक्सकोडर


2
248 बाइट्सE चर को हटाकर
musicman523

5

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

संपादित करें: सहेजी गयी 2 करने के लिए धन्यवाद बाइट्स @dzaima
संपादित करें: पैरामीटर के साथ समस्या को ठीक करने के लिए 7 बाइट्स जोड़े गए।:(

c=>(f=(c,w=13)=>c>0&&f(c-w,w-1)+(c=c<w?c:w,r=(n,s=' ')=>s.repeat(n),a='\n'+r(52-w*4),'  |=|  0  | |  0  | |  0 /   \\ 0.     .0|-----|0|     |0|-----|0|_____|'.split(0).map(x=>a+r((w-c)*8+2)+r(c,' '+x)).join('')+a+r(w*8+5,'#')),(c=91-c)?f(c).slice(6):':(')

यहाँ (अधिकतर) अनगुल्ड संस्करण है:

function (consumed) {
  let remaining = 91 - consumed;

  function inner (count, width = 13) {
    if (count <= 0) return false;

    function repeat (count, string = ' ') {
      return string.repeat(count);
    }

    const pattern = [
      '  |=|  ',
      '  | |  ',
      '  | |  ',
      ' /   \\ ',
      '.     .',
      '|-----|',
      '|     |',
      '|-----|',
      '|_____|' ];

    let clamped = Math.min(count, width);
    let alignment = '\n' + repeat((13 - width) * 4);
    let empty = alignment + repeat((width - clamped) * 8 + 2);
    let shelf = alignment + repeat((width * 8) + 5, '#');
    let bottles = pattern.map(row => empty + repeat(clamped, ' ' + row));

    return inner(count - width, width - 1) + bottles.join('') + shelf;
  }

  return (remaining) ? inner(remaining).slice(6) : ':(';
}

टेस्ट कोड


बहुत प्रभावशाली, शानदार जवाब। मुझे आपका r"मैक्रो" पसंद है; मुझे लगा जैसे कोई छोटा तरीका हो सकता है, लेकिन मैंने जो कुछ भी करने की कोशिश की, उसे किसी भी तरह से नीचे नहीं लाया।
ETHproductions

2

सी (जीसीसी) , 360 358 बाइट्स

#define P printf(
r,i,j;char*b[]={"  |=|  ","  | |  ","  | |  "," /   \\ ",".     .","|-----|","|     |","|-----|","|_____|"};w(n){P"%*c",n,' ');}main(n,a)char**a;{(n=-atoi(a[1]))<-90?P":(\n"):({while(++r<14)if((n+=r)>0){for(j=0;j<9;++j){w(4*(13-r)+1);for(i=r;i>0;)--i<n?P b[j]),w(1):w(8);P"\n");}if(r<13){w(4*(13-r)-2);for(i=0;++i<8*r+6;)P"=");P"\n");}}});}

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

स्पष्टीकरण:

#define P printf(
r,i,j;
char*b[]={
    "  |=|  ",
    "  | |  ",
    "  | |  ",
    " /   \\ ",
    ".     .",
    "|-----|",
    "|     |",
    "|-----|",
    "|_____|"};

// function to print `n` spaces:
w(n){P"%*c",n,' ');}

main(n,a)char**a;
{
    // no beer left?
    (n=-atoi(a[1]))<-90

        // sad face
        ?P":(\n")

        // else create stack
        // using GCC extension "expression statement" `({ <statement> })` here,
        // shorter than if-else or a function call
        :({
            // loop over 13 rows
            while(++r<14)

                // found non-empty row?
                if((n+=r)>0)
                {
                    // loop over text lines of beer bottles
                    for(j=0;j<9;++j)
                    {
                        w(4*(13-r)+1);

                        // for each bottle
                        for(i=r;i>0;)

                            // print either 8 spaces or line of the bottle
                            --i<n?P b[j]),w(1):w(8);P"\n");
                    }

                    // except for last row, ...
                    if(r<13)
                    {
                        // ... print shelf
                        w(4*(13-r)-2);
                        for(i=0;++i<8*r+6;)
                            P"=");
                        P"\n");
                    }
                }
        });
}

0

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

ओह !!

मेरी विधि बहुत अधिक क्रियाशील है, लेकिन वैसे भी: यह बोतलों की प्रत्येक पंक्ति को अनिवार्य रूप से 'ड्रॉ' करता है, रिक्त स्थान में जोड़ता है, और फिर जो कुछ भी बचा है, उसे जरूरी मिटा देता है।

B=['  |=|   ','  | |   ','  | |   ',' /   \\  ','.     . ','|-----| ','|     | ','|-----| ','|_____| ']
N=lambda r:sum(n for n in range(1,r+1))
n=input()
R=0
while N(R)<n:R+=1
L=R-n+N(R-1)
e=range(1,R)+([R],[])[L!=0]
for r in range(1,14):
    if r in e:continue
    if(r-1 in e)<1:print('',' '*(1+(13-r)*4)+'='*(r*8-3))[r!=1]
    i=(0,R-L)[r==R];w=(8*i+(13-r)*4,0)[i==0];print'\n'.join([' '*w+((13-r)*4*' '+l*r)[w:]for l in B])
if n=91:print':('

हैलवार्ड विल्मोस ज्यादा बेहतर है।

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