สามเหลี่ยมของคลาร์ก


10

โอเคฉันเพิ่งจะเตะสามเหลี่ยมได้ไม่นาน

Clark's Triangle เป็นรูปสามเหลี่ยมที่รายการทางซ้ายสุดของแต่ละแถวคือ 1 และรายการทางขวาสุดนั้นประกอบด้วยจำนวนทวีคูณ 6 ซึ่งเพิ่มขึ้นตามจำนวนแถวที่เพิ่มขึ้น นี่คือการสร้างภาพ

     1 6
    1 . 12
   1 . . 18
  1 . . . 24
 1 . . . . 30
1 . . . . . 36

เช่นเดียวกับสามเหลี่ยมของ Pascal รายการอื่น ๆ ทั้งหมดคือผลรวมของตัวเลขทางด้านขวาบนและซ้ายบน

นี่คือสองสามแถวแรกที่ถูกเติมเต็ม

          1   6
        1   7  12
      1   8  19  18
    1   9  27  37  24
  1  10  36  64  61  30
1  11  46  100 125 91  36

งาน

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

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

OEIS A046902


1
เราสามารถสร้างโซลูชันที่มีศูนย์ในแถวแรกได้หรือไม่? เหมือนในลำดับ OEIS
JörgHülsermann

1
@ JörgHülsermannเนื่องจากที่อยู่นอกขอบเขตของสามเหลี่ยมที่กำหนดไว้ที่นี่คุณสามารถทำสิ่งที่คุณต้องการ
Ad Hoc Garf Hunter

คำตอบ:


7

MATL , 15 ไบต์

[lBB]i:"TTY+]i)

อินพุตแรกคือแถวที่อิง 0 ที่สองคือคอลัมน์ที่ใช้ 1

ลองออนไลน์!

คำอธิบาย

[lBB]   % Push [1 6 6]
i       % Input: row number (0-based)
:"      % Repeat that many times
  TT    %   Push [1 1]
  Y+    %   Convolution, increasing size. This computes the sum of overlapping
        %   pairs, including the endpoints. So for example [1 6 6] becomes
        %   [1 7 12 6], which will later become [1 8 19 18 6], ...
]       % End
i       % Input: column number (1-based)
)       % Use as index. Implicit display


5

CJam , 22 18 ไบต์

-4 ไบต์ขอบคุณ Martin Ender

X6_]ri{0X$+.+}*ri=

อินพุตคือ (0-based row) (0-based column)

ลองออนไลน์!

คำอธิบาย

X6_]  e# Push the list [1 6 6]. This is the first row, but each row will have an extra 6 at
      e# the end, which is out of bounds.
ri    e# Push the first input as an integer.
{     e# The following block calculates the next row given a row on top of the stack:
 0X$+ e#  Copy the top list on the stack and prepend 0.
 .+   e#  Element-wise addition with the list before prepending 0. This adds each element of
      e#  with the one to its left, except the initial 1 gets added to 0 and the final number
      e#  gets added to the out-of-bounds 6. The out-of-bounds 6 is unchanged since one list
      e#  is longer.
}*    e# Run this block (row index) times.
ri=   e# Get the (column index)th item of the final list.

.+เทคนิคที่แตกต่างกันสำหรับการได้รับผลบวกจากจำนวนคือจะเปลี่ยนหนึ่งสำเนาซ้ายและการใช้งาน โดยปกติแล้วจะมีปัญหาที่จะเก็บองค์ประกอบต่อท้ายโดยไม่รวม (ซึ่งมีค่าใช้จ่ายไบต์ที่จะลบ) แต่ในกรณีนี้ที่จริงบันทึกไบต์เพราะคุณไม่จำเป็นต้องเพิ่ม a 6ซ้ำทุกครั้ง คุณสามารถบันทึกไบต์ได้มากขึ้นเนื่องจากการเลื่อนไปทางซ้ายนั้นฟรีหากคุณเพิ่ม0สำเนาต่อหนึ่งสำเนาเท่านั้น:X6_]ri{0X$+.+}*ri=
Martin Ender

_0\+แทนที่จะ0X$+เป็นจำนวนไบต์เดียวกันหากคุณต้องการ
Martin Ender

@ มาร์ตินเอนเดอร์ฉันเข้าใจแล้วคุณจะได้รับเพิ่มอีก 6 ตัวในตอนท้ายของแต่ละแถวที่ไม่มีขอบเขตดังนั้นมันจึงไม่สำคัญ ฉลาดขอบคุณ
ธุรกิจ Cat


3

Python 2 , 67 ไบต์

a,b=input()
x=[1,6]
exec"x=map(sum,zip([0]+x,x+[6]));"*a
print x[b]

ลองออนไลน์!

วิธีการบังคับแบบเดรัจฉานคำนวณaแถว th จากนั้นพิมพ์bหมายเลข th ทั้งอินพุตเป็นแบบอิง 0


3

Python 3 , 64 60 52 ไบต์

f=lambda r,c:c<2or c>r and r*6or f(r-1,c-1)+f(r-1,c)

ลองออนไลน์!

โซลูชันแบบเรียกซ้ำโดยใช้ 1 การจัดทำดัชนี เอาท์พุท "True" แทน 1 เพื่อประโยชน์ในการเล่นกอล์ฟ


ขอบคุณที่:

  • @tallyallyhuman สำหรับการบันทึก 4 ไบต์!
  • @Rod สำหรับการบันทึก 8 ไบต์!


2
52 ไบต์แทนที่ if / else ด้วยตัวดำเนินการบูลีนและเอาต์พุตที่ยืดหยุ่นมากขึ้น
Rod

@ เร็วนี้เป็นทางออกที่ยอดเยี่ยม ฉันยังคงพยายามคลุมหัวทำไมมันถึงใช้ได้ ฉันยังค่อนข้างใหม่อยู่ที่นี่ (นี่เป็นเพียงคำตอบที่สองของฉันบนเว็บไซต์) ดังนั้นฉันไม่แน่ใจในโปรโตคอล: ฉันควรรวมการแก้ไขของคุณในคำตอบของฉันแม้ว่าคุณจะเปลี่ยนจาก Python 3 เป็น 2 หรือไม่
Chase Vogeli

3
@icosahedron เวอร์ชัน python นั้นไม่เกี่ยวข้องในกรณีนี้ดังนั้นคุณไม่ต้องกังวล โดยทั่วไปการสลับระหว่างเวอร์ชันของงูหลามเป็นการใช้ประโยชน์จากคุณสมบัตินั้นถือว่าโอเค
Uriel

@Uriel ขอบคุณสำหรับการชี้แจง
Chase Vogeli


1

Mathematica ขนาด 32 ไบต์

b=Binomial;b[#,#2-1]6+b[#-1,#2]&

อินพุต

[แถว, คอลัมน์]
[ดัชนี 1 ดัชนี, ดัชนี 0]


1

JavaScript (ES6), 38 ไบต์

f=(r,c)=>c?r>c?f(--r,c)+f(r,--c):r*6:1

เกิดปัญหากับคอลัมน์เชิงลบและส่งคืนผลคูณของหกสำหรับคอลัมน์เชิงลบหรือคอลัมน์ขนาดใหญ่


1

C # (. NET Core) 44 ไบต์

f=(c,r)=>c<=1?1:c>r?6*r:f(c-1,r-1)+f(c,r-1);

ใช้คอลัมน์จากนั้นแถวทั้ง 1 ดัชนี (r,c)สามารถใช้แถวแล้วคอลัมน์โดยการแลกเปลี่ยนปัจจัยการผลิต: จะส่งกลับค่าrow * 6พิกัดนอกขอบเขตด้านขวา (เช่นcolumn > row + 1) และ1สำหรับพิกัดนอกขอบเขตด้านซ้าย (เช่นcolumn < 1)


1

PHP , 64 ไบต์

ฟังก์ชั่นซ้ำ

แถว 1 การจัดทำดัชนีคอลัมน์ 0 การจัดทำดัชนี

เอาท์พุทสำหรับแถว = 0 และคอลัมน์ = 0 เป็น 0 เหมือนในลำดับ OEIS

function f($r,$c){return$c-$r?$c?f($r-=1,$c-1)+f($r,$c):1:$r*6;}

ลองออนไลน์!

PHP , 126 ไบต์

แถว 1 การจัดทำดัชนีคอลัมน์ 0 การจัดทำดัชนี

เอาท์พุทสำหรับแถว = 0 และคอลัมน์ = 0 เป็น 0 เหมือนในลำดับ OEIS

for(;$r<=$argv[1];$r++)for($z++,$c=~0;++$c<$z;)$t[+$r][$c]=$c<$r?$c?$t[$r-1][$c-1]+$t[$r-1][$c]:1:$r*6;echo$t[$r-1][$argv[2]];

ลองออนไลน์!


0

R , 77 ไบต์

Reduce(function(x,y)zoo::rollsum(c(0,x,6),2),double(scan()-1),c(1,6))[scan()]

ต้องการzooห้องสมุด อ่านจาก stdin (อินพุตคั่นด้วยสองบรรทัดใหม่) และส่งคืนค่าโดยNAไม่เลือกขอบเขต

ลองออนไลน์!


0

เยลลี่ 13 ไบต์

,"’U0¦c/x6,1S

ลิงก์ monadic ที่ใช้รายการ[row, entry](การทำดัชนี 0 รายการ, การจัดทำดัชนี 1 แถว) คืนค่า

ลองออนไลน์!

อย่างไร?

,"’U0¦c/x6,1S - Link: list of numbers, [row, entry]
  ’           - decrement     -> [row-1, entry-1]
 "            - zip with:
,             -   pair        -> [[row, row-1], [entry, entry-1]]
     ¦        - sparse application of:
   U          -   upend
    0         - for indexes: 0 -> [[row, row-1], [entry-1, entry]]
       /      - reduce by:
      c       -   choose       -> [(row choose entry-1), (row-1 choose entry)]
         6,1  - 6 paired with 1 = [6,1]
        x     - times        i.e. [a, a, a, a, a, a, a, b]
            S - sum            -> 6*(row choose entry-1) + (row-1 choose entry)
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.