ওয়াল এএসসিআইআই বিয়ারের 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 টি প্রশস্ত (প্রতিটি পক্ষের) হতে হবে।
  • এটি , সর্বনিম্ন বাইট-কাউন্ট জেতা।

আপনি কি পুরো পরীক্ষার ক্ষেত্রে কমপক্ষে একটির একটি পেস্টবিন সরবরাহ করতে পারেন?
কনর ও'ব্রায়ান

শেল্ফের শেষ বোতলটির পরে প্রয়োজনীয় স্থানগুলি কী অনুসরণ করতে হবে?
জোনাথন ফ্রেচ

পূর্ববর্তী স্থানগুলি প্রয়োজনীয়, আপনি এগুলিকে বাম থেকে ডানে সরিয়ে দিলে ASCII- আর্টের ডানদিকে ফাঁকা স্থানগুলি আপনার।
ম্যাজিক অক্টোপাস আরন

আপনি কোন পরীক্ষার কেসটি নির্দিষ্ট করেন নি হিসাবে কনরও'ব্রায়েন দেখে, আমি আশা করি আমি কোনও পেস্টবিনে অসুখী মুখ রাখি; পি।
ম্যাজিক অক্টোপাস আরন

1
ওহ, আমি ভেবেছিলাম যে কোনওরকম বিল্ট-ইনগুলি রোধ করতে আপনি 91 বেছে নিয়েছেন। o0
21-15

উত্তর:


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 বোতল বিয়ার নয়। আট বাইট নিচে যেতে হবে :): পি
হাইপারনিউট্রিনো

1
@ এরিকথ আউটগলফার এজন্যই আমি 8 বাইট গল্ফ করার পরামর্শ দিয়েছিলাম: পি এবং হ্যাঁ তিনি আসলে 8 বাইট গল্ফ করেছেন: ডি
হাইপারনিউট্রিনো

2
পুনঃটুইট করেছেন আমি 11 golfed, তারপর 3 ungolfed ...
নিল

1
@ কেভিন ক্রুইজসেন সাধারণত আপনি একটি forলুপ ব্যবহার করে বর্ধিত হন । এটি একটি whileলুপ, সুতরাং আমাকে আরও কিছু জিনিস নিজেই করতে হবে।
নিল

1
@ কেভিন ক্রুজসেন যদিও এটির কথা চিন্তা করে একটি forলুপ ছিল সমস্ত পথ দিয়ে যাওয়ার ... 13 বাইট সংরক্ষণ করা! (আচ্ছা, আমার অ্যারে পপুলেশন করার স্বাচ্ছন্দ্যে আমি কিছুটা ভাগ্যবান হয়েছি))
নীল

10

পাইথন 3 , 306 299 265 253 255 252 247 244 বাইট

দ্রুত প্রচেষ্টা, অনুকূলিত করা যেতে পারে

সম্পাদনা: -২ বাইট @ এমআরএক্সকোডারকে ধন্যবাদ

সম্পাদনা করুন: -32 বাইট পিছনের স্থানগুলির দরকার নেই

সম্পাদনা: দুটি ফাংশন একত্রিত করে -12 বাইট

সম্পাদনা করুন: -5 বাইট @ মিউজিকম্যান 523-কে ধন্যবাদ

সম্পাদনা করুন: শেষ সারির পরে তাকটি সরাতে +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)*":(")

এটি অনলাইন চেষ্টা করুন!


@ মিঃ এক্সকোডার যা x = 2, x = 4, x = 5, x = 7, ... এর জন্য কাজ করবে না
হালওয়ার্ড হুমেল

ওহ আপনি ঠিক. দুঃখিত!
মিঃ এক্সকোডার


2
Eভেরিয়েবলটি মুছে ফেলে 248 বাইট
musicman523

5

জাভাস্ক্রিপ্ট (ES6), 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"ম্যাক্রো" পছন্দ করি ; আমি অনুভব করেছি যে এখানে একটি ছোট পদ্ধতি হতে পারে তবে আমি চেষ্টা করে কিছুই এটিকে নামিয়ে আনেনি।
ETH প্রোডাকশনগুলি

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':('

হল্ভার্ড হামেল এর থেকে অনেক ভাল।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.