Segitiga Pascal sebagai daftar 2 dimensi

11

Buat Segitiga Pascal yang merupakan daftar bersarang dan berisi nol di tempat yang tidak digunakan.

Dalam array output, jumlah Segitiga Pascal dipisahkan oleh nol dan diisi dengan nol di setiap sisi sehingga mereka berpusat. Misalnya, baris bawah (sub-larik terakhir) harus tidak memiliki nol di sebelah kiri dan kanan; sub-array kedua-terakhir memiliki satu bantalan nol di setiap sisi, dan seterusnya.

Berikut ini adalah output untuk input 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]]

Seperti biasa, solusi dengan byte paling sedikit menang.

pengguna51747
sumber
5
Gandakan ini . Hanya mengubah format output tidak mengubah tantangan, sayangnya. Coba posting di Stack Overflow jika Anda masih membutuhkan bantuan untuk ini.
GamrCorps
2
Nah, ada nol tambahan.
CalculatorFeline
Program ini mencetak yang Anda inginkan (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 Nol ekstra hanya menggantikan spasi di iterasi sebelumnya - ini secara fungsional merupakan masalah yang sama persis.
ricdesi
2
Dapatkah saya menggunakan sintaks representasi array asli untuk bahasa saya, atau apakah formatnya tidak dapat dinegosiasikan?
kucing

Jawaban:

3

Mathematica, 70 68 byte

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

Mirip dengan solusi MATL.

CalculatorFeline
sumber
3

Mathematica, 48 byte

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

CellularAutomation fantastis.

njpipeorgan
sumber
2

Jelly, 12 byte

NR¬ṙ-,1S$³Ð¡

Coba di sini.

Penjelasan

                   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)
Lynn
sumber
1

Haskell, 66 byte

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

Contoh penggunaan: 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]] .

Bagaimana itu bekerja:

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 
nimi
sumber
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

Semakin membaik

CalculatorFeline
sumber
1
ini belum sepenuhnya golf, kan?
kucing
Um, ya. Ini (dalam bentuk yang sedikit kurang golf) dicetak oleh sebuah program saya meninggalkan komentar pada pertanyaan.
CalculatorFeline
1

MATL , 24 22 21 byte

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

EDIT (20 Mei 2016): pada versi bahasa 18.0.0, kode di atas perlu beberapa perubahan untuk dijalankan. Tautan di bawah ini mencakup modifikasi tersebut

Cobalah online!

Ini menggunakan loop untuk mendorong setiap baris baru ke stack. Baris baru dihitung dari baris sebelumnya yang menerapkan konvolusi dengan [1,0,1]dan hanya mempertahankan ukuran yang diinginkan. Setelah loop, semua baris digabungkan menjadi array 2D, yang ditampilkan. Array 2D ditampilkan dalam MATL sebagai tabel numerik yang disejajarkan dengan kolom.

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
Luis Mendo
sumber
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))

dihapus
sumber
0

Serius, 33 byte

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

Cobalah online

Saya relatif yakin setidaknya 7 atau lebih dari byte tersebut dapat dicukur, jadi saya akan menunggu untuk mengirim penjelasan sampai saya selesai bermain golf ini lebih lanjut.

Mego
sumber
0

PHP , 106 byte

for(;$r++<$a=$argn;)for($c=-$a;++$c<$a;)$t[$r][$c]=$r>1|$c?$t[$r-1][$c-1]+$t[$r-1][$c+1]?:0:1;print_r($t);

Cobalah online!

Jörg Hülsermann
sumber