Trójkąt Seidela jest konstrukcją matematyczną podobną do Trójkąta Pascala i jest znany z połączenia z liczbami Bernoulliego.
Pierwsze kilka wierszy to:
1
1 1
2 2 1
2 4 5 5
16 16 14 10 5
16 32 46 56 61 61
Każdy wiersz jest generowany w następujący sposób:
Jeśli numer wiersza jest parzysty (indeksowany 1):
Opuść pierwszy element z poprzedniego rzędu
Każdy następny element jest sumą poprzedniego elementu i elementu nad nim
Zduplikuj ostatni element
Jeśli numer wiersza jest nieparzysty:
Opuść ostatni element poprzedniego rzędu
Cofając się , każdy element jest sumą poprzedniego elementu i elementu nad nim
Zduplikuj pierwszy element.
Zasadniczo budujemy trójkąt w zygzakowaty wzór:
1
v
1 > 1
v
2 < 2 < 1
v
2 > 4 > 5 > 5
Aby uzyskać więcej informacji, zobacz stronę w Wikipedii na temat liczb Bernoulli.
Wyzwanie:
Biorąc pod uwagę n
, albo jako argument funkcji, albo z STDIN, wypisz lub zwróć albo n
th wiersz trójkąta Seidela, albo pierwszyn
rzędy. Możesz użyć indeksowania 0 lub 1.
Nie musisz obsługiwać danych wejściowych ujemnych lub niecałkowitych (ani 0, jeśli indeksowane 1). Nie musisz obsługiwać wyników większych niż2147483647 = 2^31 - 1
Ponieważ jest to kod-golf, zrób to w jak najmniejszej liczbie bajtów.
Przykłady:
W tych przykładach zwracaną wartością jest n
th wiersz z indeksowaniem 0.
Input -> Output
0 1
1 1 1
2 2 2 1
6 272 272 256 224 178 122 61
13 22368256 44736512 66750976 88057856 108311296 127181312 144361456 159575936 172585936 183194912 191252686 196658216 199360981 199360981
źródło
Odpowiedzi:
Brain-Flak , 66 bajtów
Wypróbuj online!
Wiersz jest indeksowany 0.
źródło
JavaScript (SpiderMonkey) , 67 bajtów
Ten kod narusza
sort()
metodę i nie działa we wszystkich silnikach.Rzędy są indeksowane na 0.
Wypróbuj online!
W jaki sposób?
Warunkowo odwracamy tablicę za pomocą
sort()
metody z funkcją wywołania zwrotnego, która ignoruje jej parametry i zwraca wartość 0 lub dodatnią liczbę całkowitą. Nie próbuj tego w domu! Działa to niezawodnie tylko w przypadku SpiderMonkey.Zauważ, że V8 prawdopodobnie używa różnych algorytmów sortowania w zależności od długości tablicy (mniej lub więcej niż 10 elementów).
Skomentował
źródło
sort()
tego silnika. Dodałem wyjaśnienie.Perl 6 , 52 bajtów
Wypróbuj online!
źródło
Haskell ,
898782 bajtówPo prostu
s
drukuje linie w kolejności zygzakowatej, anonimowa funkcja w pierwszym rzędzie odwraca połowę wierszy.Dzięki @nimi za uratowanie 5 bajtów!
Wypróbuj online!
źródło
Galaretka , 12 bajtów
Wypróbuj online!
źródło
⁸
Python 3 ,
9891 bajtówWypróbuj online!
Przejście do numerowania wierszy opartego na 0 pozwoliło zaoszczędzić 7 bajtów.
źródło
Julia 0.6 , 85 bajtów
Wypróbuj online!
To jest rekurencyjne rozwiązanie w Julii. Zauważ, że ma indeksowanie 1. Stąd testy.
Wersja bez golfa, aby zrozumieć logikę:
Jako bonus, oto wersja nierekurencyjna, ale jest to dłużej:
źródło
Python 2 ,
10397 bajtówWypróbuj online!
Wersja nierekurencyjna (łatwiejsza do odczytania):
Python 2 , 106 bajtów
Wypróbuj online!
Z pewnością jest to możliwe!
źródło
Python 3 , 91 bajtów
Wypróbuj online!
źródło
import
i*