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
. . .
Zwiń te rzędy po lewej stronie
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
. . .
Posortuj je w porządku rosnącym
1
1 1
1 1 2
1 1 3 3
1 1 4 4 6
. . .
Przeczytaj ten trójkąt po wierszach
[1, 1, 1, 1, 1, 2, 1, 1, 3, 3, 1, 1, 4, 4, 6 ...]
Biorąc pod uwagę dane n
wyjściowe, n
wypisz liczbę th w tej serii. To jest OEIS 107430 .
Zasady
- Możesz wybrać indeksowanie oparte na 0 lub 1. Proszę podać, które w swoim zgłoszeniu.
- Można założyć, że dane wejściowe i wyjściowe pasują do natywnego typu liczb całkowitych twojego języka.
- Dane wejściowe i wyjściowe można podać dowolną dogodną metodą .
- Dopuszczalny jest pełny program lub funkcja. Jeśli funkcja, możesz zwrócić dane wyjściowe zamiast je drukować.
- 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).
code-golf
sequence
number-theory
AdmBorkBork
źródło
źródło
Odpowiedzi:
JavaScript (ES6), 79 bajtów
0-indeksowane.
Próbny
Pokaż fragment kodu
W jaki sposób?
Ten algorytm bezpośrednio generuje posortowane wiersze trójkąta Pascala. Aktualizuje n zgodnie z długością poprzedniego wiersza, dopóki nie pojawi się [n] . Na przykład, 6 iteracji jest wymaganych dla n = 19 :
źródło
Oktawa , 46 bajtów
Na podstawie 1.
Wypróbuj online!
Wyjaśnienie
Rozważ
n=4
jako przykład.pascal(n)
daje macierz Pascala:Rzędy trójkąta Pascala są antydiagonalami tej macierzy. Więc jest odwracany w pionie za pomocą
flip(···)
który przekształca antydiagonale w przekątne.
spdiags(···)
wyodrębnia (niezerowe) przekątne, zaczynając od lewego dolnego rogu i ustawia je jako kolumny wypełnione zerami:M=sort(···)
sortuje każdą kolumnę tej macierzy i przypisuje wynik do zmiennejM
:Indeksowanie logiczne
(···)(~~M)
jest teraz używane do wyodrębniania nonzerów tej macierzy w porządku głównym kolumny (w dół, a potem w poprzek). Wynikiem jest wektor kolumny:Wreszcie,
n
-ty wpis tego wektora jest wyodrębniany za pomocą(···)(n)
, co w tym przypadku daje1
.źródło
Python 2 ,
867872 bajtów-8 bajtów dzięki Rod
Wypróbuj online!
Bez golfa
Wypróbuj online!
Funkcja rekurencyjnie oblicza rząd trójkąta Pascala. Biorąc pod uwagę obecny rząd jako
row
,map(sum, zip([0] + row, row + [0]))
.Przy każdym połączeniu
n
zmniejsza się o długość bieżącego wiersza. Jeśli funkcja dotrze do prawegonth
wiersza, należy zwrócić najniższą liczbę wierszy.Ponieważ pierwsza połowa wiersza jest w porządku rosnącym, a każdy wiersz jest symetryczny, liczba jest na indeksie
n/2
(indeksowane 0, dzielenie całkowite).źródło
Wolfram Language (Mathematica) , 55 bajtów
Indeksowanie jest oparte na 1.
Wypróbuj online!
Wyjaśnienie
Jest to prawdopodobnie gra w golfa, nie jestem bardzo doświadczonym użytkownikiem Mathematica.
Dla każdego n ∈ [0, Wejście] ∩ ℤ wygeneruj tabelę dwumianów z każdym k ∈ [0, n] ∩ ℤ .
Sortuj każdy. Używa skrótu do
Map[function,object]
-function/@object
.Spłaszcz wynikową listę i pobierz element, którego indeksem na liście jest dane wejściowe.
źródło
APL (Dyalog) ,
2625 bajtów1 bajt zapisany dzięki @ngn
Wypróbuj online!
źródło
{⍵[⍋⍵]}
->(⍋⊃¨⊂)
R , 58 bajtów
Wypróbuj online!
Oblicza
n choose k
dla każdegon,k
w[0,1,...,n]
macierzy, sortuje wiersze rosnąco (*) i usuwa zera, a następnie wybieran
element th.(*) To również przekształca je w kolumny, ale to lepiej, ponieważ R przechowuje macierz jako wektor kolumnowy, co pozwala nam indeksować bezpośrednio do niej, zachowując porządek.
źródło
Haskell ,
143132125 125123 bajtówPierwszy wiersz to funkcja bez punktów, która pobiera indeks (na podstawie 0) i zwraca odpowiednią liczbę w sekwencji. Wypróbuj online!
To mój pierwszy program Haskell! Jestem pewien, że może być znacznie krótszy. Wskazówki są mile widziane.
Zapisany 2 bajty dzięki Nimi
Bez golfa
źródło
i
funkcjęs
, która!
, jak sądzę , została przemianowana na . W przypadku korzystania z funkcji Infix można upuścić()
wokółreverse b
:s(a,b)=reverse b!a
.JavaScript, 57 bajtów
0-indeksowane.
Jak to się dzieje:
Krok 0:
Ten kod jest łatwy do zrozumienia:
c
obliczyć wzór użycia kombinacji: C (n, k) = C (n-1, k) + C (n-1, k-1); lub 1, jeżeli k == 0 lub k == nf
próbuje znaleźć numer wiersza i indeks w wierszu, a następnie wywołać funkcję c, aby uzyskać wynik.Krok 1:
W tym kroku staramy się zmienić wywołanie funkcji
c
nac(i,r)
co sprawia, że tak samo jak parametrf
.Krok 2:
Sprawdzamy,
i<r
czy używasz funkcjif
czy funkcjic
. Dlatego piżmoi<r
utrzymuje się podczas rekurencji funkcjic
.Krok 3:
Na tym etapie łączymy te dwie funkcje w jedną.
Po trochę więcej golfa, w końcu otrzymaliśmy odpowiedź opisaną powyżej.
Pokaż fragment kodu
źródło
Galaretka , 13 bajtów
Wypróbuj online!
Wykorzystanie algorytmu Dyiel Uriela.
1-indeksowany.
Wyjaśnienie:
źródło
þ
tu robi.JavaScript (Node.js) , 65 bajtów
Nawet tablica nie jest używana. 0-indeksowane.
Wypróbuj online!
Wyjaśnienie:
źródło
Pascal , 373 bajtów
g
jest funkcją.Wypróbuj online!
źródło
n=1 then
może byćn=1then
.if(k=0)then
może się staćif k=0then
.word
zamiastinteger
.Java 8, 187 bajtów
Wyjaśnienie:
Wypróbuj online.
źródło
MATL , 11 bajtów
Na podstawie 1.
Wypróbuj online! Lub sprawdź wszystkie przypadki testowe .
Wyjaśnienie
Rozważ dane wejściowe
4
jako przykład.;
jest separatorem wierszy dla macierzy lub wektorów kolumnowych.źródło
Partia, 128 bajtów
0-indeksowane.
źródło
r
i kolumny%1-(s-2)
na%1
TH serii. Czwarta linia następnie używa tego do obliczenia współczynnika dwumianowego(n k) = n!/(n-k)!k!
=n(n-1)...(n+1-k)/(1)(2)...k
=(n/1)((n-1)/2)...((n+1-k)/k)
. Gdzie jest MathJax, kiedy go potrzebuję?APL (Dyalog Classic) , 17 bajtów
Wypróbuj online!
Indeksowanie na podstawie 0
zauważ, że
(49!98) > 2*53
np. dwumianowy współczynnik 98 powyżej 49 jest większy niż 2 53 , więc w tym momencie Dyalog zaczął już tracić precyzję z powodu zmiennoprzecinkowego IEEEźródło
05AB1E , 10 bajtów
0-indeksowane
Wypróbuj online!
Wyjaśnienie
źródło
Galaretka , 11 bajtów
Wypróbuj online!
Łącze monadyczne pobierające indeks i zwracające liczbę całkowitą - wykorzystuje indeksowanie 1.
W jaki sposób?
Wykonuje wyzwanie właściwie tak, jak jest napisane, tylko z większą częścią trójkąta Pascala (zer), który jest następnie wyrzucany ...
źródło
Czerwony , 206 bajtów
Na podstawie 1
Wypróbuj online!
Wyjaśnienie:
źródło
Perl, 48 bajtów
Obejmuje
+1
dlap
Wykorzystuje indeksowanie podstawy 0.
źródło
J,
4641 bajtów0-indeksowane
Wypróbuj online!
Uwagi:
<.2&!@,:^:_1
podaje odpowiednią liczbę wierszy trójkąta Pascala, zaokrąglając w dół odwrotnośćy choose 2
./:~@(i.!<:)@]
oblicza wiersz i sortuje go.[-2!]
daje indeks do wiersza.źródło
Julia , 70 bajtów
Na podstawie 1
Wyjaśnienie:
najpierw znajduje numer wiersza, następnie numer kolumny, a następnie oblicza dwumianowy
źródło
Galaretka , 17 bajtów
Wypróbuj online!
źródło
Pyth, 15 bajtów
0-indeksowane
Spróbuj
Wyjaśnienie
źródło
Czysty , 80 bajtów
Wypróbuj online!
Jako funkcja lambda.
źródło
Rubinowy , 56 bajtów
W oparciu o 0
Najpierw uzyskaj wiersz i kolumnę w trójkącie, a następnie oblicz współczynnik dwumianowy odpowiadający tej pozycji.
Wypróbuj online!
źródło
Właściwie 8 bajtów
W dużej mierze oparty na odpowiedzi Jonathana Allana na galaretkę . Wykorzystuje indeksowanie 0.
Wypróbuj online!
Ungolfing
źródło
n
th w serii. To tworzy tablicę.Kokos , 69 bajtów
Wypróbuj online!
źródło
Pari / GP , 47 bajtów
Wypróbuj online!
źródło
C (gcc) ,
140123 bajtówWypróbuj online!
źródło