Tam giác Clark


10

Ok tôi đã có một chút đá tam giác gần đây vì vậy đây là một cái khác.

Tam giác Clark là một hình tam giác trong đó mục nhập ngoài cùng bên trái của mỗi hàng là 1 và các mục nhập ngoài cùng bên phải được tạo thành bội số của 6 tăng khi số hàng tăng lên. Đây là một hình dung

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

Giống như Tam giác của Pascal, tất cả các mục khác là tổng của các số ở phía trên bên phải và phía trên bên trái của chúng.

Dưới đây là một vài hàng đầu tiên được điền vào

          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

Bài tập

Cho một số hàng (bắt đầu từ đầu) và một số cột (bắt đầu từ mục khác không đầu tiên trên hàng đó) xuất giá trị tại ô cụ thể đó. Cả hai đầu vào có thể là 1 hoặc 0 được lập chỉ mục (bạn có thể trộn và khớp nếu bạn muốn). Trong số các giới hạn của tam giác là không xác định và bạn có thể làm bất cứ điều gì bạn muốn khi truy vấn các giá trị này.

Đây là , mục tiêu là giảm thiểu số lượng byte trong giải pháp của bạn.

OEIS A046902


1
Chúng ta có thể xây dựng một giải pháp với số 0 ở hàng đầu tiên không? giống như trong chuỗi OEIS
Jörg Hülsermann

1
@ JörgHülsermann Vì đó là giới hạn cho tam giác được xác định ở đây, bạn có thể làm bất cứ điều gì bạn muốn.
Ad Hoc Garf Hunter

Câu trả lời:


7

MATL , 15 byte

[lBB]i:"TTY+]i)

Đầu vào đầu tiên là hàng dựa trên 0; thứ hai là cột dựa trên 1.

Hãy thử trực tuyến!

Giải trình

[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 byte

-4 byte nhờ Martin Ender

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

Đầu vào là (0-based row) (0-based column)

Hãy thử trực tuyến!

Giải trình

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.

Một kỹ thuật khác để có được số tiền theo cặp là dịch chuyển một bản sao sang trái và sử dụng .+. Thông thường có vấn đề là nó giữ lại phần tử trailing mà không tóm tắt nó (chi phí byte để loại bỏ), nhưng trong trường hợp này thực sự tiết kiệm byte bởi vì sau đó bạn không cần phải thêm 6vào mỗi lần lặp. Bạn có thể lưu nhiều byte hơn vì dịch chuyển sang trái là miễn phí nếu bạn chỉ trả trước 0một bản sao:X6_]ri{0X$+.+}*ri=
Martin Ender

_0\+thay vì 0X$+là số byte tương tự nếu bạn thích.
Martin Ender

@MartinEnder Ồ tôi hiểu rồi, bạn nhận được thêm 6 điểm ở cuối mỗi hàng nằm ngoài giới hạn nên không thành vấn đề. Khéo léo, cảm ơn.
Mèo kinh doanh

4

C #, 157 byte

using System.Linq;(b,c)=>{var f=new[]{1,6};for(;c>0;c--){int s=f.Length;f=new int[s+1].Select((e,i)=>i<1?1:i==s?f[s-1]+6:f[i-1]+f[i]).ToArray();}return f[b];

Dùng thử trực tuyến


3

Python 2 , 67 byte

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

Hãy thử trực tuyến!

Phương pháp tiếp cận lực lượng, tính toán ahàng thứ, và sau đó in bsố thứ, cả hai đầu vào đều dựa trên 0


3

Python 3 , 64 60 52 byte

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

Hãy thử trực tuyến!

Giải pháp đệ quy sử dụng lập chỉ mục 1. Đầu ra "Đúng" thay vì 1 vì mục đích chơi gôn.


Nhờ vào:

  • @totallyhuman để lưu 4 byte!
  • @Rod để lưu 8 byte!


2
52 byte thay thế if / other bằng toán tử boolean và với đầu ra linh hoạt hơn
Rod

@Rod, đây là một giải pháp tuyệt vời. Tôi vẫn đang cố gắng che giấu lý do tại sao nó hoạt động. Tôi vẫn còn khá mới ở đây (đây chỉ là câu trả lời thứ hai của tôi trên trang web), vì vậy tôi không chắc về giao thức: tôi có nên đưa bản sửa đổi của bạn vào câu trả lời của tôi mặc dù bạn đã chuyển từ Python 3 sang 2 không?
Đuổi theo Vogeli

3
@icosahedron phiên bản python không liên quan trong trường hợp đó, vì vậy bạn không cần phải bận tâm. nói chung, chuyển đổi giữa các phiên bản python để khai thác các tính năng được coi là OK.
Uriel

@Uriel cảm ơn bạn đã làm rõ.
Đuổi theo Vogeli


1

Toán học, 32 byte

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

đầu vào

[hàng, cột]
[1 chỉ mục, 0 chỉ mục]


1

JavaScript (ES6), 38 byte

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

Sự cố cho các cột âm và trả về bội số của sáu cho các hàng âm hoặc các cột chồng chéo.


1

C # (.NET Core) , 44 byte

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

Đưa cột sau đó hàng, cả 1 chỉ mục. Có thể lấy hàng sau đó cột bằng cách hoán đổi các đầu vào : (r,c). Sẽ trả về row * 6tọa độ bên ngoài giới hạn bên phải (tức là column > row + 1) và 1cho tọa độ bên ngoài giới hạn bên trái (nghĩa là column < 1).


1

PHP , 64 byte

Hàm đệ quy

hàng 1 cột chỉ mục 0 lập chỉ mục

Đầu ra cho hàng = 0 và cột = 0 là 0 như trong chuỗi OEIS

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

Hãy thử trực tuyến!

PHP , 126 byte

hàng 1 cột chỉ mục 0 lập chỉ mục

Đầu ra cho hàng = 0 và cột = 0 là 0 như trong chuỗi 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]];

Hãy thử trực tuyến!


0

R , 77 byte

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

Yêu cầu zoothư viện; đọc từ stdin (các đầu vào được phân tách bằng hai dòng mới) và trả về giá trị, với NAcác lựa chọn ngoài giới hạn.

Hãy thử trực tuyến!


0

Thạch , 13 byte

,"’U0¦c/x6,1S

Một liên kết đơn âm lấy danh sách [row, entry](lập chỉ mục 0 cho các mục nhập, lập chỉ mục 1 cho các hàng), trả về giá trị.

Hãy thử trực tuyến!

Làm sao?

,"’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)
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.