ওয়াল এএসসিআইআই বিয়ারের 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.