ভূত এবং কুমড়ো


15

এখানে একটি এএসসিআইআই কুমড়ো একটি জ্যাক-ও-ল্যান্টারে খোদাই করা আছে। এটা কি সুন্দর না?

((^v^))

এখানে একটি ASCII ভূত আছে। দেখুন কতটা বেমানান!

\{O.O}/

স্পষ্টতই, কুমড়োগুলি মাটিতে থাকতে হবে, তাদের মধ্যে একটি জায়গা থাকবে যাতে তারা পচে না।

ভূতরা অবশ্য কুমড়োর উপরে দাঁড়াতে পছন্দ করে, তাই তারা এমনকি স্পুকিয়ারও । যাইহোক, তাদের দুটি কুমড়োর উপর দাঁড়াতে হবে , অন্যথায় তাদের ভুতুড়ে ওজন তাদের নীচের কুমড়াকে পিষে ফেলবে। তবে, কীভাবে তাদের ভুতুড়ে ম্যাজিক কাজ করে, একাধিক ভূত কুমড়োগুলি স্ট্যাক এবং ভাগ করতে পারে, তবে ভূতগুলি নীচের কুমড়ো বা নীচের ভূতের উপর সমানভাবে বিভক্ত হয়। অন্য কথায়, একটি মানব পিরামিড মত একটি আকার গঠন । নোট করুন যে নীচে একটি কুমড়ো না থাকলে ভূতরা প্রেতকে স্ট্যাক করতে পারে না (যাদুটি এভাবে কাজ করে)।

দুটি অ-নেতিবাচক পূর্ণসংখ্যা দেওয়া হয়েছে gএবং হোস্ট এবং আম্পকিনের pসংখ্যা উপস্থাপন করে উপরের পিরামিড স্ট্যাকিং বিধি অনুসরণ করে সর্বাধিক কমপ্যাক্ট বাম-সর্বাধিক গঠন সম্ভব হবে। বাম কুমড়ো এবং ভূত (যেগুলি পিরামিড গঠন করে না) ডানদিকে মাটিতে যায়।gp

স্পষ্টতার জন্য, এই ফর্মেশনগুলি ঠিক আছে (ফাঁকা নিউলাইন পৃথক করা হয়েছে), এবং উদাহরণ হিসাবে I / O পরিবেশন করুন:

0p 1g
\{O.O}/

1p 0g
((^v^))

1p 1g
((^v^)) \{O.O}/

2p 1g
    \{O.O}/
((^v^)) ((^v^))

2p 2g
    \{O.O}/
((^v^)) ((^v^)) \{O.O}/

3p 1g
    \{O.O}/
((^v^)) ((^v^)) ((^v^))

3p 2g
    \{O.O}/ \{O.O}/
((^v^)) ((^v^)) ((^v^))

3p 3g
        \{O.O}/
    \{O.O}/ \{O.O}/
((^v^)) ((^v^)) ((^v^))

0p 4g
\{O.O}/ \{O.O}/ \{O.O}/ \{O.O}/

3p 0g
((^v^)) ((^v^)) ((^v^))

7p 6g
            \{O.O}/
        \{O.O}/ \{O.O}/
    \{O.O}/ \{O.O}/ \{O.O}/
((^v^)) ((^v^)) ((^v^)) ((^v^)) ((^v^)) ((^v^)) ((^v^))

এই গঠনগুলি ঠিক নেই Not

\{O.O}/
((^v^))

    \{O.O}/
((^v^))

((^v^)) ((^v^)) \{O.O}/

    \{O.O}/
    \{O.O}/
((^v^)) ((^v^))

            \{O.O}/
\{O.O}/ ((^v^)) ((^v^))

    ((^v^))
((^v^)) ((^v^))

      \{O.O}/
((^v^)) ((^v^))

ইনপুট

যে কোনও সুবিধাজনক বিন্যাসে দুটি অ-নেতিবাচক পূর্ণসংখ্যা । কমপক্ষে একটি সংখ্যার শূন্যহীন হবে। আপনি উভয় ক্রমে ইনপুটগুলি নিতে পারেন (উদাহরণস্বরূপ, আমার আগে কুমড়োগুলির উদাহরণগুলিতে) - দয়া করে আপনার উত্তরটিতে কীভাবে ইনপুট নিবেন তা নির্দিষ্ট করুন।

আউটপুট

উপরোক্ত নিয়মগুলি অনুসরণ করে ভূত এবং কুমড়োর একটি ASCII- শিল্প উপস্থাপনা। ভূত এবং কুমড়ো যথাযথভাবে সারিবদ্ধ হয়ে থাকে তবে শীর্ষস্থানীয় / পিছনের নিউলাইনগুলি বা অন্যান্য সাদা স্থানগুলি alচ্ছিক।

বিধি

  • হয় একটি সম্পূর্ণ প্রোগ্রাম বা একটি ফাংশন গ্রহণযোগ্য। যদি কোনও ফাংশন হয় তবে আপনি আউটপুটটি মুদ্রণের পরিবর্তে ফিরে আসতে পারেন।
  • স্ট্যান্ডার্ড লুফোলগুলি নিষিদ্ধ।
  • এটি তাই সাধারণ গল্ফিংয়ের সমস্ত নিয়ম প্রয়োগ হয় এবং সংক্ষিপ্ততম কোড (বাইটে) জয়ী হয়।

7 টি কুমড়ো এবং 6 ভূতের সঠিক গঠন কী?
নীল

@ নীল যেহেতু নিয়মগুলি সবচেয়ে কমপ্যাক্ট বাম-সর্বাধিক আউটপুট চেয়েছে, এটি ডানদিকে অতিরিক্ত 3 টি কুমড়ো সহ 4 টি কুমড়োর উপরে 6 টি ভূতের একটি পিরামিড হবে। আমি এটি উদাহরণ হিসাবে যুক্ত করব।
অ্যাডমবর্কবার্ক

ঠিক আছে, আপনার কমপ্যাক্টের ব্যবহার আমাকে বিভ্রান্ত করেছে - আমি সমস্ত ভূতকে একই সারিতে রেখে দিতে পারি, সুতরাং এটি উল্লম্বভাবে আরও কমপ্যাক্ট!
নিল

ভূতের আগে সর্বদা কুমড়ো সরবরাহ করা হবে?
গ্যাব্রিয়েল বেনামি

2
আমি পছন্দ করি যে ভূত এবং কুমড়ো একটি মানব পিরামিড তৈরি করছে
মেয়রমন্টি

উত্তর:


5

জাভাস্ক্রিপ্ট (ES7), 166 164 159 বাইট

নীলকে ধন্যবাদ 5 বাইট সংরক্ষণ করা

f=(p,g,j=(g*2)**.5+.5|0,G=j>p-1?p?p-1:0:j,P=`
`,i=~j?g-G*++G/2:G,n=i>0?i>g?g:i:0)=>p|g?f(0,g-n,-1,G-1,P+'    ')+P+'((^v^)) '.repeat(p)+'\\{O.O}/ '.repeat(n):''

ফর্ম্যাট এবং মন্তব্য

f = (                                    // given:
  p,                                     // - p = number of pumpkins
  g,                                     // - g = number of ghosts
  j = (g * 2) ** .5 + .5 | 0,            // - j = ceil(triangular root of g)
  G = j > p - 1 ? p ? p - 1 : 0 : j,     // - G = max(0, min(p - 1, j))
  P = '\n',                              // - P = padding string (+ line-break)
  i = ~j ?                               // - i =
    g - G * ++G / 2                      //   first iteration: g - G * (G + 1) / 2
  : G,                                   //   next iterations: G
  n = i > 0 ? i > g ? g : i : 0          // - n = max(0, min(i, g)) = number of
) =>                                     //   ghosts to print at this iteration
p | g ?                                  // if there's still something to print:
  f(                                     //   do a recursive call with:
    0,                                   //   - no pumpkin anymore
    g - n,                               //   - the updated number of ghosts
    -1,                                  //   - j = -1 (so that ~j == 0)
    G - 1,                               //   - one less ghost on the pyramid row
    P + '    '                           //   - updated padding string
  ) +                                    //   
  P +                                    //   append padding string
  '((^v^)) '.repeat(p) +                 //   append pumpkins
  '\\{O.O}/ '.repeat(n)                  //   append ghosts
: ''                                     // else: stop

অন্তর্নিহিত গণিত

জটিল অংশটি হল Gভূত পিরামিডের সর্বোত্তম প্রস্থ খুঁজে বের করা ।

এই gজাতীয় পিরামিডে প্রেতের সংখ্যা দেওয়া আছে:

g = 1 + 2 + 3 + ... + G = G(G + 1) / 2

স্বতঃস্ফূর্তভাবে, প্রেতযুক্ত পিরামিডের প্রস্থ gহ'ল ফলাফল চতুষ্কোণ সমীকরণের আসল মূল:

G² + G - 2g = 0

Δ = 1² - 4(-2g)
Δ = 8g + 1

G = (-1 ± √Δ) / 2

যা নিম্নলিখিত আসল মূলকে ( ত্রিভুজাকার মূল হিসাবেও পরিচিত ) বাড়ে :

G = (√(8g + 1) - 1) / 2

যাইহোক, পিরামিডের প্রস্থ কুমড়ো সংখ্যা দ্বারাও সীমাবদ্ধ: কুমড়োর p-1উপর আমাদের ভূত ছাড়া আর কিছু থাকতে পারে না p। সুতরাং কোডে ব্যবহৃত চূড়ান্ত সূত্র:

j = ⌈(√(8g + 1) - 1) / 2⌉
G = max(0, min(p - 1, j))

ES6 সংস্করণ, 173 171 166 বাইট

f=(p,g,j=Math.pow(g*2,.5)+.5|0,G=j>p-1?p?p-1:0:j,P=`
`,i=~j?g-G*++G/2:G,n=i>0?i>g?g:i:0)=>p|g?f(0,g-n,-1,G-1,P+'    ')+P+'((^v^)) '.repeat(p)+'\\{O.O}/ '.repeat(n):''

পরীক্ষার কেস (ES6)


1
আমার মনে হয় j=(g+g)**.5+.5|0কাজ করা উচিত।
নিল

সুন্দর ব্যাখ্যা!
অ্যাডমবর্কবার্ক

@ নীল এটি খাটো এবং আরও নির্ভরযোগ্য। (আমার পদ্ধতিতে g = 5051 থেকে শুরু করে কিছু অবৈধ মান ছিল)) ধন্যবাদ।
30:56

3

পার্ল, 246 বাইট (নিউলাইনগুলি কোডের অংশ নয় এবং কেবল পাঠযোগ্যতার জন্য সরবরাহ করা হয়)

($c,$d)=<>=~/(\d+)/g;
$p="((^v^)) ";$g="\\{O.O}/ ";
for($f[0]=$c;$d>0;$d--){$f[$b+1]+1<$f[$b]?$f[++$b]++:$f[$b]++;$f[0]+=$d,$d=0 if$b==$c-1;$f[$b]==1?$b=0:1}
$h[0]=($p x$c).$g x($f[0]-$c);$h[$_].=$"x(4*$_).$g x$f[$_]for(1..$#f);
say join$/,reverse@h;

দুটি সংখ্যা গ্রহণ করে: প্রথমে কুমড়ো, তারপরে ভূত। নমুনা ইনপুট:

5 20

নমুনা আউটপুট:

                \{O.O}/ 
            \{O.O}/ \{O.O}/ 
        \{O.O}/ \{O.O}/ \{O.O}/ 
    \{O.O}/ \{O.O}/ \{O.O}/ \{O.O}/ 
((^v^)) ((^v^)) ((^v^)) ((^v^)) ((^v^)) \{O.O}/ \{O.O}/ \{O.O}/ \{O.O}/ \{O.O}/ \{O.O}/ \{O.O}/ \{O.O}/ \{O.O}/ \{O.O}/ \{O.O}/ 

ওহ, আপনি যেভাবে আমার উদ্দেশ্যটি চেয়েছিলেন তার থেকে আপনি আমার কথাটি কিছুটা আলাদা করে পড়েন - নীচে একটি কুমড়ো থাকলে ভূত কেবল ভূতের উপরেই স্ট্যাক করতে পারে, অন্যথায় তাদের ডান একক-ফাইলে যেতে হবে। এজন্য 0p 4gপরীক্ষার কেস স্ট্যাক করার পরিবর্তে সমস্ত ভূতকে এক লাইনে ফেলেছে।
অ্যাডমবর্কবার্ক

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