Prawie wszyscy tutaj znają Trójkąt Pascala. Tworzą go kolejne rzędy, w których każdy element jest sumą dwóch górnych lewych i prawych górnych sąsiadów. Oto pierwsze 5
wiersze (zapożyczone z trójkąta Generuj Pascala ):
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
Weźmiemy Trójkąt Pascala i dokonamy na nim pewnych sum (hah-ha). Dla danych wejściowych n
wypisz sumę kolumnową pierwszych n
wierszy trójkąta Pascala. Na przykład dane wejściowe 5
byłyby tworzone przez
1
1 1
1 2 1
1 3 3 1
[+] 1 4 6 4 1
----------------------
1 1 5 4 9 4 5 1 1
Więc wynik byłby [1, 1, 5, 4, 9, 4, 5, 1, 1]
.
Pamiętaj, że nie musisz generować trójkąta Pascala, aby obliczyć sumę - to zależy od twojej implementacji, jeśli jest to krótsze, czy nie.
Wkład
Pojedyncza dodatnia n
ze n >= 1
w dowolnym, wygodnym formacie .
Wydajność
Powstała tablica / lista z podsumowaniem kolumnowym pierwszych n
rzędów trójkąta Pascala, jak opisano powyżej. Ponownie, w dowolnym odpowiednim formacie.
Zasady
- Wiodące lub końcowe znaki nowej linii lub białe znaki są opcjonalne, o ile same znaki są odpowiednio ustawione w linii.
- Dopuszczalny jest pełny program lub funkcja. Jeśli funkcja, możesz zwrócić dane wyjściowe zamiast je drukować.
- Jeśli to możliwe, dołącz link do internetowego środowiska testowego, aby inni mogli wypróbować Twój kod!
- Standardowe luki są zabronione.
- To jest golf golfowy, więc obowiązują wszystkie zwykłe zasady gry w golfa, a wygrywa najkrótszy kod (w bajtach).
Przykłady
[input]
[output]
1
[1]
2
[1, 1, 1]
3
[1, 1, 3, 1, 1]
5
[1, 1, 5, 4, 9, 4, 5, 1, 1]
11
[1, 1, 11, 10, 54, 44, 155, 111, 286, 175, 351, 175, 286, 111, 155, 44, 54, 10, 11, 1, 1]
źródło
CJam ,
322524 bajtówPodziękowania dla Luisa Mendo za zaoszczędzenie 1 bajtu.
Wypróbuj online!
Wyjaśnienie
źródło
JavaScript (ES6), 83 bajty
Indeksowanie 1 kosztowało mnie bajt. Objaśnienie:
g(j-1,i-1)+g(j-1,i+1)
rekurencyjnie oblicza trójkąt Pascala, aż osiągnie pierwszy rząd, który jest przypadkiem podstawowym. Aby uzyskać sumy kolumn, wykorzystuję fakt, żemap
faktycznie przekazuje trzeci parametr, więc jest dodatkowy krok rekurencyjny, gdy tak jest.źródło
JavaScript (ES6),
9087868482 bajtówZaoszczędzono 3 bajty dzięki produktom ETH
Przypadki testowe
Pokaż fragment kodu
źródło
Mathematica,
5957 bajtówPodziękowania dla Martina Endera za znalezienie dwubajtowych oszczędności!
Czysta funkcja pobierająca dodatnie liczby całkowite i zwracająca listę liczb całkowitych. Dosłownie tworzy wszystkie odpowiednie wpisy trójkąta Pascala i odpowiednio je sumuje.
Poprzednie zgłoszenie (które jest nieco łatwiejsze do odczytania):
źródło
Oktawa ,
846745 bajtów22 bajty zapisane dzięki Neilowi !
Wypróbuj online!
Wyjaśnienie
pascal
Funkcja daje matrycę, która zawiera wartości w trójkąt Pascala:Aby wyodrębnić pożądane wartości, odwracamy w pionie (
flip
), zachowujemy dolną trójkątną część (tril
) i ponownie odwracamy. To dajespdiags
następnie wyodrębnia przekątne jako kolumnyi
sum
oblicza sumę każdej kolumny, co daje wynik.źródło
@(n)sum(spdiags(flip(tril(flip(pascal(n))))))
?05AB1E ,
3432282524 bajtów-4 dzięki Emignie.
Wypróbuj online!
Zasadniczo wszystko, co robi, to generuje to:
Transponuj to:
Następnie sumuje każdy wiersz:
Jeśli wiodące i końcowe 0 są niedopuszczalne,
®>-Å
oznacza®-Å
to naprawienie kary +1 bajta.Wynik dla
50
:źródło
-Å0
zamiast>-Ý0*
powinien działać i€
nie jest potrzebny na końcu.>F
może byćƒ
.Å
, sprytne! Trzymałem „ctrl + f” dla „listy tożsamości” lub coś w tym stylu nainfo.txt
heh ...13 x 5
na5 x 11
? Gdzie poszły pozostałe dwie kolumny / rzędy?PHP , 119 bajtów
numery kolumn od 1-wejściowego do wejściowego -1
Wypróbuj online!
źródło
array_column
to nowa funkcja w tej wersjiarray_column()
.$x=2*$j++-$i
oszczędza 7 bajtów. Zapętlenie $ j w dół zamiast w górę może zaoszczędzić 1 (for($j=$i+1;$j--;)
). I jeszcze 3 bajty mogą być golfowane z wyjścia.array_column
Galaretka , 12 bajtów
Wypróbuj online!
Jak to działa
źródło
Python 3,
201184 bajtówźródło
Python 2 ,
140137 bajtówWypróbuj online! lub Wypróbuj online!
Na
n=3
początek z listą z
n
zerami otaczającymi jeden -[[0, 0, 0, 1, 0, 0, 0]]
Wygeneruj pełną piramidę
Obróć o 90º i zsumuj każdy wiersz, odrzucając pierwszy i ostatni (tylko zera)
źródło
Haskell,
118112104 bajtów614 bajtów zapisanych dzięki @nimiźródło
#
dor#n|d<-0<$[1..n]=d++r++d
.#
, ponieważ nie jest już rekurencyjny: zdefiniujf
jakof n=foldl1 z[d++p x++d|x<-[1..n],d<-[0<$[1..n-x]]]
i zrzuć#
.Python 3, 124 znaki
Wykorzystuje to fakt, że Trójkąt Pascala można zdefiniować za pomocą współczynników dwumianowych. Próbowałem usunąć
abs(x)
irange(-n+1,n)
, robiąc to,range(n)
a następnie używając,lambda l:l[-1:0:-1]+l
ale było dłużej.To także mój pierwszy raz w golfa, więc mam nadzieję, że wybaczysz faux-pas.
Dwumian nie jest mój i został zabrany stąd .
źródło