Trójkąt Pascala jest generowany przez rozpoczęcie 1
i utworzenie każdego rzędu z kolejnych dodań. Zamiast tego utworzymy trójkąt, naprzemiennie mnożąc i dodając.
Zaczynamy wiosłę 1
od samotności 1
. Następnie dodawane są wiersze nieparzyste, a mnożenie odbywa się w wierszach parzystych (indeksowane 1). Podczas wykonywania kroku dodawania załóż, że spacje poza trójkątem są wypełnione 0
s. Wykonując krok mnożenia, załóż, że na zewnątrz jest wypełniony 1
s.
Oto pełny trójkąt do 7 rzędów. Symbol *
lub +
po lewej stronie pokazuje, jaki krok został wykonany, aby wygenerować ten wiersz.
1 1
2 * 1 1
3 + 1 2 1
4 * 1 2 2 1
5 + 1 3 4 3 1
6 * 1 3 12 12 3 1
7 + 1 4 15 24 15 4 1
Wyzwanie
Biorąc pod uwagę dane wejściowe n
, wyślij n
th rząd tego trójkąta.
Zasady
- Zamiast tego możesz wybrać indeksowanie 0, ale pamiętaj, że wiersze dodawania i mnożenia muszą przerzucać, aby wygenerować dokładnie taki sam trójkąt jak powyżej. Jeśli zdecydujesz się to zrobić, podaj 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 podawać w dowolnym dogodnym formacie .
- 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
Pokazuje dwa możliwe przykłady wyników spośród wielu: listę lub ciąg znaków oddzielony spacjami.
4
[1, 2, 2, 1]
8
"1 4 60 360 360 60 4 1"
code-golf
math
number
arithmetic
number-theory
AdmBorkBork
źródło
źródło
n
rząd.Odpowiedzi:
Pascal ,
249247233 bajtówTo jest na przemian trójkąt Pascala .
1 bajt zapisany dzięki @ Mr.Xcoder
Wypróbuj online!
źródło
Python 2 ,
9793868178 bajtów-4 bajty dzięki Rod. -10 bajtów dzięki Halvardowi Hummelowi.
0-indeksowane.
Wypróbuj online!
źródło
map([int.__add__ ,int.__mul__][i%2],[i%2]+a,a+[i%2])
powinno zadziałać (nie testowałem)Galaretka ,
1712 bajtówJest to pełny program (lub łącze niladyczne), który pobiera dane wejściowe ze STDIN.
Wypróbuj online!
Jak to działa
źródło
Python 2 ,
96 8987 bajtów2 bajty Dzięki Mr. Xcoder:
s=[1]
Trochę inaczej niż odpowiedź całkowicie ludzka
Wypróbuj online!
źródło
[1]
.CJam , 25 bajtów
0-indeksowane.
Wypróbuj online!
Wyjaśnienie
Jest to anonimowy blok, który pobiera liczbę ze stosu i pozostawia wynik na stosie.
źródło
2%!
należy nacisnąć 1, jeśli parzysty i 0, jeśli nieparzysty, nie?Mathematica, 92 bajty
Wypróbuj online! (w celu pracy z matematyką „Tr” zastępuje się „Total”)
źródło
Haskell ,
7672 bajtówRozwiązanie 0-indeksowane:
Wypróbuj online!
Wyjaśnienie
p
rekurencyjnie definiuje przemienny trójkąt, podstawa / pierwszy jego element to[1]
Następnie buduje trójkąt, biorąc poprzednią linię (
l
). Aby wiedzieć, co z tym zrobić, musimy śledzić poprawny operator (o
) i odpowiadający mu element neutralny (e
):Z tego zbuduj nową linię, powielając linię, a dla jednej kopii wstawiamy element neutralny, spakowujemy je operatorem i dołączamy 1:
źródło
R ,
10898 bajtów-10 bajtów poprzez zastąpienie rzeczywistego znaku mnożenia znakiem plus. Proszę wybacz mi.
Wypróbuj online!
Zadowolony z ogólnej metody (po raz pierwszy aliasuję prymityw), ale jestem pewien, że trzeba jeszcze zagrać w golfa, szczególnie z niezręczną obsługą przypadków, w których n <3, co prowadzi do dużej ilości płyt kotłowych.
źródło
`*`=`+`
! całkiem sprytny. Reszta moich ulepszeń to tylko standardowe techniki gry w golfa, które chętnie wyjaśnię na twoją prośbę :)n<3
Łuska ,
1716 bajtówWypróbuj online!
Rozwiązanie 1-indeksowane.
Wyjaśnienie
Pierwsza linia jest główną funkcją, która wywołuje funkcję pomocniczą na drugiej linii. Funkcja pomocnika jest zwykle wywoływana za pomocą
₁
, ale w tym przypadku korzystam z funkcji przepełnienia etykiet Husk: jeśli odwołujesz się do linii N w programie z M <N linii, otrzymujesz linię N mod M z funkcją modyfikatora M / Zastosowano do tego N. Druga funkcja modyfikująca toflip
, więc używam₅
do odwracania argumentów funkcji pomocniczej bez dodatkowych kosztów bajtu.Oto funkcja pomocnika.
Oto główna funkcja.
źródło
C # (.NET Core) ,
143134128 bajtów-4 bajty dzięki Phaeze
-5 bajtów dzięki Zac Faragher
-6 bajtów dzięki Kevin Cruijssen
Wypróbuj online!
Wyjaśnienie:
źródło
var b=new[]{1};
a kompilator określi dla ciebie typ tablicy.int[]b={1};
- 11 bajtów vs 20 jak jest lub 16 jak w sugestiin=>{int[]b={1},c;for(int i=0,j;++i<n;b=c)for(c=new int[i+1],c[0]=c[i]=1,j=0;++j<i;)c[j]=i%2<1?b[j-1]+b[j]:b[j-1]*b[j];return b;}
. Mam połączonec
takint[]b={1},c;
; skróconei%2==0
doi%2<1
; I usunąłem wsporniki pętli, wkładając wszystko do środka.Python 2 , 83 bajty
Daj trochę miłości
exec
indeksowanym 0
Wypróbuj online!
źródło
Pyth , 22 bajty
Zaoszczędź mnóstwo bajtów dzięki @FryAmTheEggman ! Wstępne rozwiązanie znajduje się poniżej.
Pełny pakiet testowy (indeksowany 0).
Pyth ,
40 38 3635 bajtówTo wydaje się
zbytdługie. Sugestie są mile widziane.Pakiet testowy lub wypróbuj online!
źródło
u
(ale nie mogłem tego rozgryźć). Dzięki!jot , 32 bajty
Wypróbuj online!
źródło
Perl 5 , 111 + 2 (-na) = 113 bajtów
Wypróbuj online!
źródło
Mathematica, 70 bajtów
Wypróbuj w piaskownicy Wolfram ! Niestety nie działa w matematyce. Jest indeksowany na 0.
Objaśnienie:
Partition[#,2,1,{-1,1},{}]
pobiera listę i zwraca wszystkie dwuelementowe listy podrzędne oraz listy 1-elementowe dla początku i końca - np .{1,2,3,4}
Staje się{{1}, {1,2}, {2,3}, {3,4}, {4}}
.PadRight[{},#,{1##&,Plus}]
tworzy na przemian listę1##&
(efektywnieTimes
) iPlus
, którego długość jest liczbą wejściową. PotemFold
wielokrotnie stosuje funkcję partycji zPlus
ES iTimes
es stosowanych do tego, aby wiersze trójkąta.źródło
Rubin ,
8382 bajtówWypróbuj online!
To jest indeksowane na 0.
źródło
Rakieta , 116 bajtów
Wypróbuj online!
źródło
TI-Basic (TI-84 Plus CE), 100 bajtów
1-indeksowany, monituje użytkownika o podanie danych i drukuje listę zawierającą
n
th rząd naprzemiennego trójkąta Pascala.Podczas zapętlania: L M jest bieżącym rzędem, a L L jest poprzednim rzędem.
TI-Basic to tokenizowany język . Wszystkie użyte tutaj tokeny są jednobajtowe.
Myślę, że mogę pograć w golfa, modyfikując M na miejscu od końca.
Wyjaśnienie:
źródło
JavaScript (ES6),
716966 bajtówWypróbuj online!
0-indeksowane.
-3 bajty przez @Arnauld
źródło
i--?n%2?v*p[i]:v+p[i]