มาทำสามเหลี่ยมกัน


15

คนส่วนใหญ่คุ้นเคยกับสามเหลี่ยมของ Pascal

    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ทำมือถือใหม่ของเรา

งาน

ได้รับหมายเลขแถว ( n ) และระยะทางจากด้านซ้าย ( R ) คำนวณและเอาท์พุทR TH ไม่ใช่ศูนย์รายการจากซ้ายบนn TH แถว (เทียบเท่ากับสามเหลี่ยมของปาสคาลคือnCr ) คุณอาจจะคิดว่าRน้อยกว่าn

นี่คือเป้าหมายคือลดจำนวนไบต์ในโซลูชันของคุณ

กรณีทดสอบ

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 แทนได้หรือไม่?
Kritixi Lithos

9
@KritixiLithos แน่นอน มันจะทำให้ฉันเศร้า
โพสต์ Rock Garf Hunter

คำตอบ:


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

Python 3 , 72 ไบต์

ขอบคุณ 1 ไบต์สำหรับ Kritixi Lithos

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และบันทึกไบต์
Kritixi Lithos

@EinkornEnchanter ถ้าnเป็น 0 ดังนั้นจะให้ 1; มิฉะนั้นมันจะให้ 0 มันเหมือนn and ... or 1แต่สั้นกว่า
Leun Nun

ฉันเข้าใจแล้วว่าใช้พฤติกรรมที่ไม่เหมาะสมในลักษณะที่ไม่เหมาะสม +1
โพสต์ Rock Garf Hunter

@EinkornEnchanter 0^0เป็นส่วนใหญ่ในการเขียนโปรแกรมภาษา1
Arnauld

@Arnauld นั่นไม่ได้ทำให้เป็นจริง;)
โพสต์ร็อค Garf Hunter

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

ในการดำเนินการ!

สองไบต์ขอบคุณ Arnauld


คุณสามารถบันทึก 2 ไบต์โดยใช้และwhile(n&&r<n) while(o*r)
Arnauld

1
คำตอบนี้ถูกต้องสมบูรณ์ ดังนั้นใครก็ตามที่ถูกลดระดับลงอย่างแน่นอนควรให้คำอธิบาย ... หรือเป็นหนึ่งใน downvotes อัตโนมัติที่แปลกประหลาดเหล่านี้จากชุมชน
Arnauld

2

PHP , 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;}

ลองออนไลน์!

PHP , 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]];

ลองออนไลน์!

PHP> = 7.1, 159 ไบต์

ดัชนี 0 สำหรับแถวที่มากกว่า 50

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

Python 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นาทีพยายามที่จะเล่นกอล์ฟ
โพสต์ Rock Garf Hunter

1
ไม่สั้นกว่าจริง แต่ช่วยประหยัดพื้นที่ :)
Dennis

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.