Tam giác Pascal như một danh sách 2 chiều


11

Tạo Tam giác Pascal là một danh sách lồng nhau và chứa các số không trong các điểm không sử dụng.

Trong mảng đầu ra, các số của Tam giác Pascal được phân tách bằng các số 0 và được đệm bởi các số 0 ở mỗi bên để chúng được căn giữa. Ví dụ, hàng dưới cùng (mảng con cuối cùng) phải không có số 0 ở bên trái và bên phải; mảng con thứ hai cuối cùng có một phần đệm bằng không ở mỗi bên, v.v.

Đây là đầu ra cho đầu vào 5:

[[0,0,0,0,1,0,0,0,0],
[0,0,0,1,0,1,0,0,0],
[0,0,1,0,2,0,1,0,0],
[0,1,0,3,0,3,0,1,0],
[1,0,4,0,6,0,4,0,1]]

Như thường lệ, giải pháp có ít byte nhất sẽ thắng.


5
Bản sao này . Chỉ thay đổi định dạng đầu ra không thay đổi thách thức, thật không may. Hãy thử đăng lên Stack Overflow nếu bạn vẫn cần trợ giúp về vấn đề này.
GamrCorps

2
Vâng, có những số không thêm.
Máy

Chương trình này in cái bạn muốn (Python 3):print("def pascal(n):\n #make the nested list\n a=[[0 for i in range(2*n+1)] for j in range(n+1)] #make the list\n a[0][n]=1 #add the initial 1\n for i in range(1,n+1):\n for j in range(2*n+1):\n a[i][j]=a[i-1][j-1]+a[i-1][(j+1)%(2*n+1)] #the main part\n return a")
CalculatorFeline

1
@CatsAreFluffy Các số 0 bổ sung chỉ thay thế khoảng trắng trong lần lặp trước - đây thực sự là vấn đề chính xác.
ricdesi

2
Tôi có thể sử dụng cú pháp biểu diễn mảng gốc cho ngôn ngữ của mình hoặc định dạng không thể thương lượng không?
con mèo

Câu trả lời:


3

Toán học, 70 68 byte

NestList[ListConvolve[{1,0,1},#,2]&,Join[#,{1},#],#2]&[0~Table~#,#]&

Tương tự như giải pháp MATL.


3

Toán học, 48 byte

CellularAutomaton[{#+#3&@@#&,{},1},{{1},0},#-1]&

CellularAutomation thật tuyệt vời


2

Thạch, 12 byte

NR¬ṙ-,1S$³Ð¡

Hãy thử nó ở đây.

Giải trình

                   This is a list of functions, each operating on the input, n:
NR                 Get the range [-n -n+1 ... 0 ... n-1 n].
  ¬                Logical NOT the entire range: [0 0 ... 1 ... 0 0].
         ³Ð¡       Repeat n times, and cumulate the results:
   ṙ-,1                Rotate by both -1 and 1
       S               Sum the results.
        $              (Joins the above two functions)

1

Haskell, 66 byte

q n|d<-0<$[2..n]=scanl(\(s:t)_->zipWith(+)(0:s:t)$t++[0])(d++1:d)d

Ví dụ sử dụng: q 4-> [[0,0,0,1,0,0,0],[0,0,1,0,1,0,0],[0,1,0,2,0,1,0],[1,0,3,0,3,0,1]].

Làm thế nào nó hoạt động:

d <- 0<$[2..n]                      -- bind d to a list of (length n)-1 zeros
scanl                               -- build a list
                         (d++1:d)   -- starting with  [d ++ 1 ++ d]
      \(s:t)_                    d  -- by combining the previous element with the
                                    -- elements of d, but ignoring them, i.e.
                                    -- build a list of (length d) by repeatedly
                                    -- modifying the start element by
          zipWith(+)                -- adding element-wise
                    (0:s:t)         -- the previous element prepended by 0  
                           t++[0]   -- and the tail of the previous element
                                    -- followed by a 0 

1

Python 3, 172 158 133 byte

def p(n):
 x=2*n+1;y=range
 a=[[0]*x]*n;a[0][n]=1
 for i in y(1,n+1):
  for j in y(x):a[i][j]=a[i-1][j-1]+a[i-1][(j+1)%(x)]
 return a

Hay tiêp tục tôt hơn nưa


1
Đây chưa phải là golf hoàn toàn, phải không?
con mèo

Ừm, ừ. Điều này (trong một hình thức ít chơi gôn hơn) được in bởi một chương trình tôi đã để lại một bình luận về câu hỏi.
Máy

1

MATL , 24 22 21 byte

tEq:=Gq:"t5BX+8L)]N$v

EDIT (ngày 20 tháng 5 năm 2016): kể từ phiên bản 18.0.0 của ngôn ngữ, đoạn mã trên cần một vài thay đổi để chạy. Liên kết dưới đây bao gồm những sửa đổi

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

Điều này sử dụng một vòng lặp để đẩy mỗi hàng mới lên ngăn xếp. Một hàng mới được tính từ hàng trước áp dụng tích chập với [1,0,1]và chỉ giữ kích thước mong muốn. Sau vòng lặp, tất cả các hàng được nối vào một mảng 2D, được hiển thị. Mảng 2D được hiển thị trong MATL dưới dạng bảng số được căn chỉnh theo cột.

t           % implicit input n. Duplicate
Eq          % 2*n-1
:           % range [1,2,...,2*n-1]
=           % gives [0,0,...1,...0,0]. This is the first row
Gq:         % range [1,2,...,n-1]
"           % for each. Repeat n-1 times
  t         %   duplicate latest row. This duplicate will become the next row
  5B        %   push array [1,0,1] (5 converted to binary)
  X+        %   convolution
  8L        %   predefined literal [2,-1i]. Used for indexing
  )         %   apply that index: remove one element at each end
]           % end for each
N$v         % concatenate all rows into a 2D array. Implicitly display

0

Javascript, 152 146 byte

f=i=>[...Array(i)].map((x,j)=>(z=[...Array(i*2-1)].map((_,k)=>+!!~[i-j,i+j].indexOf(k+1)),y=j?z.map((_,k)=>_||(k&&(k+1 in y)?y[k-1]+y[k+1]:_)):z))


0

Nghiêm túc, 33 byte

╩╜r`╣;lD0nkdZΣ`M╜rRZ`i0nkd@;)kΣ`M

Dùng thử trực tuyến

Tôi tương đối chắc chắn ít nhất 7 hoặc hơn những byte đó có thể bị loại bỏ, vì vậy tôi sẽ chờ để đăng một lời giải thích cho đến khi tôi hoàn thành việc đánh gôn này.


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.