একটি ত্রিভুজ তৈরি করা যাক


15

বেশিরভাগ মানুষ প্যাসকের ত্রিভুজটির সাথে পরিচিত।

    1
   1 1
  1 2 1
 1 3 3 1
1 4 6 4 1

পাস্কেলের ত্রিভুজ একটি অটোমেটন যেখানে একটি ঘরের মান উপরের বাম এবং উপরের ডানদিকে কোষের যোগফল। এখন আমরা একটি অনুরূপ ত্রিভুজ সংজ্ঞায়িত করতে যাচ্ছি। কোষগুলি কেবল উপরের বাম এবং উপরের ডানদিকে নিয়ে যাওয়ার পরিবর্তে আমরা উপরের বাম এবং উপরের ডানদিকে বিস্তৃত দুটি অসীম রেখার সাথে সমস্ত কক্ষটি নিয়ে যাচ্ছি। পাস্কালের ত্রিভুজটির মতো আমরা 1জিরো দ্বারা অসীম এক প্যাড দিয়ে শুরু করি এবং সেখান থেকে নীচের দিকে তৈরি করি।

উদাহরণস্বরূপ, একটি দিয়ে চিহ্নিত কক্ষ গণনা করা x

   1
  1 1
 2 2 2
4 5 5 4
   x

আমরা নিম্নলিখিত কক্ষগুলি যোগ করব

   .
  . .
 2 . 2
. 5 5 .
   x

আমাদের নতুন ঘর তৈরি করছে 14

কার্য

একটি সারি নম্বর দেওয়া ( এন ), এবং বাম ( r ) থেকে দূরত্ব গণনা করে এবং n তম সারিতে বাম থেকে r ম অ-শূন্য এন্ট্রি আউটপুট দেয় । ( পাস্কেলের ত্রিভুজের সমতুল্য এনসিআর )। আপনি অনুমান করতে পারে যে চেয়ে কম হয় এন

এটি , লক্ষ্যটি হ'ল আপনার সমাধানে বাইটের সংখ্যা হ্রাস করা।

পরীক্ষার মামলা

0,0 -> 1
1,0 -> 1
2,0 -> 2
4,2 -> 14
6,3 -> 106

এখানে ত্রিভুজ আকারে প্রথম দম্পতি সারি রয়েছে:

                  1
                1   1
              2   2   2
            4   5   5   4
          8  12  14  12   8
       16  28  37  37  28  16
     32  64  94  106 94  64  32
   64  144 232 289 289 232 144 64
 128 320 560 760 838 760 560 320 128


আমাদের জমাগুলি পরিবর্তে 1-ভিত্তিক সূচক ব্যবহার করতে পারে?
ক্রিটসি লিথোস

9
পুনঃটুইট যদিও তা আমাকে দুঃখ করবে।
পোস্ট রক গারফ হান্টার 15

উত্তর:


8

জেলি , 18 17 বাইট

SṚ0;+Sṭ
1WWÇ⁸¡ṪṙḢ

0-ভিত্তিক সূচক ব্যবহার করে।

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

কিভাবে এটা কাজ করে

1WWÇ⁸¡ṪṙḢ  Main link. Arguments: n, r

1          Set the return value to 1.
 W         Wrap; yield [1].
  W        Wrap; yield [[1]].
           This is the triangle with one row.
   Ç⁸¡     Call the helper link n times.
           Each iteration adds one row to the triangle.
      Ṫ    Tail; take the last array, i.e., the row n of the triangle.
       ṙ   Rotate row n r units to the left.
        Ḣ  Head; take the first element, i.e., entry r of row n.


SṚ0;+Sṭ    Helper link. Argument: T (triangle)

S          Take the column-wise sums, i.e., sum the ascending diagonals of the 
           centered triangle, left to right.
 Ṛ         Reverse the array of sums. The result is equal to the sums of the 
           descending diagonals of the centered triangle, also left to right.
  0;       Prepend a 0. This is required because the first element of the next row 
           doesn't have a descending diagonal.
     S     Take the column-wise sum of T.
    +      Add the ascending to the descending diagonals.

5

পাইথন 3 , 72 বাইট

ক্রিটিকি লিথোসকে 1 বাইট ধন্যবাদ।

f=lambda n,r:n>=r>=0and(0**n or sum(f(i,r)+f(i,r+i-n)for i in range(n)))

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


1
আপনি এটি পেতে পুনরায় n>=r>=0and
সাজিয়ে নিতে

@ আইকর্নএঞ্চেটার যদি n0 হয় তবে এটি 1 দেয়; অন্যথায়, এটি 0 দেয় It এটি মত n and ... or 1তবে ছোট sh
লিকি নুন

আমি দেখতে পেয়েছি, তখন ভাঙা আচরণের দুর্দান্ত অপব্যবহার, +1।
পোস্ট রক গার্ফ হান্টার


@ আর্নল্ড এটি সত্য করে তোলে না;)
পোস্ট রক গার্ফ হান্টার

3

ES6, 80 78 বাইট

p=(n,r,c=0)=>n?(o=>{while(n&&r<n)c+=p(--n,r);while(o*r)c+=p(--o,--r)})(n)||c:1

কর্মে!

দুটি বাইট ধন্যবাদ আরনাউল্ডকে।


আপনি while(n&&r<n)এবং ব্যবহার করে 2 বাইট সংরক্ষণ করতে পারেন while(o*r)
আর্নল্ড

1
এই উত্তরটি পুরোপুরি বৈধ। সুতরাং, যে কেউ এটিকে নিম্নচোকে দিয়েছে তার অবশ্যই একটি ব্যাখ্যা প্রদান করা উচিত ... বা এটি সম্প্রদায়ের এই অদ্ভুত স্বয়ংক্রিয় ডাউনভোটগুলির মধ্যে একটি হতে পারে?
আর্নাউল্ড

2

পিএইচপি , 94 বাইট

পুনরাবৃত্ত উপায় 0-সূচকযুক্ত

function f($r,$c){for($s=$r|$c?$r<0?0:!$t=1:1;$t&&$r;)$s+=f($r-=1,$c)+f($r,$c-++$i);return$s;}

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

পিএইচপি , 125 বাইট

0-ইন্ডেক্স

for(;$r<=$argv[1];$r++)for($z++,$c=~0;++$c<$z;$v+=$l)$x[$c]+=$t[+$r][$c]=$l=($v=&$y[$r-$c])+$x[$c]?:1;echo$t[$r-1][$argv[2]];

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

পিএইচপি> = 7.1, 159 বাইট

50-এর বেশি সারিগুলির জন্য 0-সূচিযুক্ত

for([,$m,$n]=$argv;$r<=$m;$r++)for($z++,$c=0;$c<$z;$v=bcadd($v,$l),$x[$c]=bcadd($x[$c],$l),$c++)$t[+$r][$c]=$l=bcadd(($v=&$y[$r-$c]),$x[$c])?:1;echo$t[$m][$n];

1

পাইথন 3 , 61 বাইট

f=lambda n,r:sum(f(k,r)+f(k,r+k-n)for k in range(n))or~n<-r<1

এটি বেস কেস (0, 0) এর ক্ষেত্রে সত্য প্রত্যাবর্তন করে , যা ডিফল্টরূপে অনুমোদিত

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


~n<-r<1বেশ চালাক, আমি গল্ফ দেওয়ার চেষ্টা করে 10 মিনিট ভাল সময় কাটিয়েছি n>=r>=0
পোস্ট রক গার্ফ হান্টার

1
আসলে খাটো নয়, তবে এটি স্থান বাঁচায়। :)
ডেনিস

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