Trójkąt Pascala jako dwuwymiarowa lista

11

Utwórz trójkąt Pascala, który jest zagnieżdżoną listą i zawiera zera w nieużywanych miejscach.

W tablicy wyjściowej liczby trójkąta Pascala są oddzielone zerami i wypełnione zerami po każdej stronie, aby były wyśrodkowane. Na przykład dolny wiersz (ostatnia pod-tablica) nie może mieć zer po lewej i prawej stronie; przedostatnia podgrupa ma po jednej stronie dopełnienie zerowe i tak dalej.

Oto dane wejściowe 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]]

Jak zwykle wygrywa rozwiązanie z najmniejszą liczbą bajtów.

użytkownik51747
źródło
5
Duplikat tego . Zmiana formatu wyjściowego niestety nie zmienia wyzwania. Spróbuj opublikować w Przepełnieniu stosu, jeśli nadal potrzebujesz pomocy.
GamrCorps
2
Cóż, są dodatkowe zera.
CalculatorFeline
Ten program wypisuje ten, który chcesz (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 Dodatkowe zera po prostu zastępują spacje w poprzedniej iteracji - funkcjonalnie jest to dokładnie ten sam problem.
ricdesi
2
Czy mogę używać natywnej składni reprezentacji tablic dla mojego języka, czy też format nie podlega negocjacji?
kot

Odpowiedzi:

3

Mathematica, 70 68 bajtów

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

Podobne do rozwiązania MATL.

CalculatorFeline
źródło
3

Mathematica, 48 bajtów

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

CellularAutomation jest fantastyczna.

njpipeorgan
źródło
2

Galaretka, 12 bajtów

NR¬ṙ-,1S$³Ð¡

Wypróbuj tutaj.

Wyjaśnienie

                   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
źródło
1

Haskell, 66 bajtów

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

Przykład użycia: 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]].

Jak to działa:

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
źródło
1

Python 3, 172 158 133 bajtów

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

Jest coraz lepiej

CalculatorFeline
źródło
1
nie jest jeszcze w pełni golfa, prawda?
kot
O tak. To (w nieco mniej golfowej formie) jest wydrukowane przez program, który zostawiłem komentarz do pytania.
CalculatorFeline
1

MATL , 24 22 21 bajtów

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

EDYCJA (20 maja 2016 r.): Od wersji 18.0.0 języka powyższy kod wymaga kilku zmian, aby uruchomić. Poniższy link zawiera te modyfikacje

Wypróbuj online!

Wykorzystuje pętlę do wypychania każdego nowego wiersza na stos. Nowy wiersz jest obliczany na podstawie poprzedniego wiersza z zastosowaniem splotu z [1,0,1]zachowaniem tylko pożądanego rozmiaru. Po pętli wszystkie wiersze są łączone w tablicę 2D, która jest wyświetlana. Tablice 2D są wyświetlane w MATL jako tabele numeryczne wyrównane do kolumn.

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
źródło
0

JavaScript, 152 146 bajtów

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))

oddalony
źródło
0

Poważnie, 33 bajty

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

Wypróbuj online

Jestem względnie pewien, że co najmniej 7 z tych bajtów można zgolić, więc poczekam, aby opublikować wyjaśnienie, aż skończę grać w golfa.

Mego
źródło
0

PHP , 106 bajtów

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);

Wypróbuj online!

Jörg Hülsermann
źródło