2 boyutlu bir liste olarak Pascal Üçgeni


11

Yuvalanmış bir liste olan ve kullanılmayan noktalarda sıfır içeren bir Pascal Üçgeni oluşturun.

Çıktı dizisinde, Pascal Üçgeni sayıları sıfırlarla ayrılır ve her iki tarafta sıfırlarla doldurulur, böylece ortalanırlar. Örneğin, alt satırda (son alt dizi) sol ve sağda sıfır olmamalıdır; ikinci son alt dizinin her iki tarafında da bir tane sıfır dolgu vardır ve bu böyle devam eder.

İşte girdi için çıktı 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]]

Her zamanki gibi, en az bayt içeren çözüm kazanır.


5
Kopyası bu . Ne yazık ki, çıktı biçimini değiştirmek zorluğu değiştirmiyor. Bununla ilgili hâlâ yardıma ihtiyacınız varsa Yığın Taşmasıyla ilgili yayın göndermeyi deneyin.
GamrCorps

2
Fazladan sıfırlar var.
CalculatorFeline

Bu program istediğiniz birini yazdırır (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 Fazla sıfırlar sadece önceki yinelemedeki boşlukların yerini alır - bu işlevsel olarak aynı problemdir.
ricdesi

2
Kendi dilim için yerel dizi gösterim sözdizimini kullanabilir miyim, yoksa biçim tartışılamaz mı?
kedi

Yanıtlar:


3

Mathematica, 70 68 bayt

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

MATL çözümüne benzer.


3

Mathematica, 48 bayt

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

CellularAutomation harika.


2

Jöle, 12 bayt

NR¬ṙ-,1S$³Ð¡

Burada deneyin.

açıklama

                   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 bayt

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

Kullanım örneği: 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]].

Nasıl çalışır:

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 bayt

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

İyileşmeye devam ediyor


1
bu henüz tam olarak golf oynamamış, değil mi?
kedi

Ee, evet. Bu (biraz daha az golf şeklinde) yazılı bir program tarafından basıldı soru üzerine bir yorum.
CalculatorFeline

1

MATL , 24 22 21 bayt

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

EDIT (20 Mayıs 2016): dilin 18.0.0 sürümünden itibaren, yukarıdaki kodun çalışması için birkaç değişiklik yapılması gerekiyor. Aşağıdaki bağlantı bu değişiklikleri içerir

Çevrimiçi deneyin!

Bu, her yeni satırı yığına itmek için bir döngü kullanır. Önceki satırdan yeni bir satır hesaplanır [1,0,1]ve yalnızca istenen boyutta kıvrım uygulanır ve yalnızca istenen boyutta tutulur. Döngüden sonra, tüm satırlar görüntülenen bir 2D diziye birleştirilir. 2B dizi, MATL'de sütun hizalı sayısal tablolar olarak görüntülenir.

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, 152146 bayt

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

Ciddi, 33 byte

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

Çevrimiçi deneyin

En azından 7 ya da bu baytların traş edilebileceğinden eminim, bu yüzden daha fazla golf yapana kadar bir açıklama yayınlamak için bekleyeceğim.


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.