Napisz funkcję lub program, który wypisuje liczbę każdego typu elementu (wierzchołek, krawędź, powierzchnia itp.) Hipersześcianu N-wymiarowego.
Na przykład trójwymiarowy sześcian ma 1 komórkę (tj. 1 trójwymiarowy sześcian), 6 ścian (tj. 6 2-wymiarowych kostek), 12 krawędzi (tj. 12 2-wymiarowych kostek) i 8 wierzchołków (tj. 8 0-wymiarowych kostki).
Więcej informacji na temat elementów Hypercube można znaleźć tutaj
Możesz także rzucić okiem na następującą sekwencję OEIS .
Wejście
Twój kod przyjmuje jako dane wejściowe (przez STDIN lub parametr funkcji lub podobne rzeczy) liczbę całkowitą większą lub równą 0, która jest wymiarem hipersześcianu.
Twój kod musi teoretycznie działać dla każdego wejścia> = 0, nie uwzględniając problemów z pamięcią i czasem (to znaczy, szybkość i potencjalne przepełnienia stosu nie stanowią problemu dla twojej odpowiedzi, jeśli dane wejściowe są duże). Dane wejściowe podane jako przypadki testowe nie będą wyższe niż 12.
Wynik
Wyślesz listę wszystkich elementów hipersześcianu, zaczynając od elementu „najwyższego wymiaru”. Na przykład, dla sześcianu (input = 3), wypiszesz listę [1,6,12,8]
(1 komórka, 6 ścian, 12 krawędzi, 8 wierzchołków).
Format listy na wyjściu jest względnie darmowy, pod warunkiem, że wygląda jak lista.
Możesz wyprowadzić wynik do STDOUT lub zwrócić go z funkcji.
Przypadki testowe
Input = 0
Output = [1]
Input = 1
Output = [1,2]
Input = 3
Output = [1,6,12,8]
Input = 10
Output = [1, 20, 180, 960, 3360, 8064, 13440, 15360, 11520, 5120, 1024]
Input = 12
Output = [1, 24, 264, 1760, 7920, 25344, 59136, 101376, 126720, 112640, 67584, 24576, 4096]
Punktacja
To jest golf golfowy , więc wygrywa najkrótsza odpowiedź w bajtach.
MATL , 12 bajtów
Wypróbuj online
Wyjaśnienie
źródło
Mathematica, 29 bajtów
Moja pierwsza odpowiedź Mathematica! Jest to po prostu funkcja, która wykorzystuje takie samo podejście jak Alephalpha za PARI / GP odpowiedź . Konstruujemy wielomian
(1+2x)^n
i otrzymujemy listę współczynników, uszeregowanych w kolejności rosnącej mocy (tj. Najpierw stałej).Przykładowe użycie:
źródło
APL,
1511 bajtówJest to monadyczny ciąg funkcji, który akceptuje liczbę całkowitą po prawej stronie i zwraca tablicę liczb całkowitych.
Objaśnienie, wywoływanie danych wejściowych
n
:Wypróbuj online
Zaoszczędź 4 bajty dzięki Dennisowi!
źródło
PARI / GP,
2015 bajtówźródło
Galaretka, 8 bajtów
Naprawdę powinienem przestać pisać Galaretkę na moim telefonie.
Wypróbuj tutaj .
źródło
TI-BASIC, 10 bajtów
źródło
binompdf
.CJam (
1714 bajtów)Demo online
To podejście wykorzystuje zwykłą funkcję generowania
(x + 2)^n
. OEIS wspomina(2x + 1)^n
, ale to pytanie indeksuje współczynniki w odwrotnej kolejności. Kopie mnie za to, że nie myślę o odwróceniu GF, dopóki nie zobaczyłem aktualizacji Alephalpha do odpowiedzi PARI / GP, która zrobiła to samo.Interesującą sztuczką w tej odpowiedzi jest użycie mocy liczb całkowitych do działania mocy wielomianowej poprzez działanie w bazie wyższej niż jakikolwiek możliwy współczynnik. Ogólnie biorąc, biorąc pod uwagę wielomian,
p(x)
którego współczynniki są liczbami całkowitymi nieujemnymi mniejszymi niżb
,p(b)
jest to podstawowab
reprezentacja współczynników (ponieważ poszczególne monomale nie „nakładają się”). Oczywiście(x + 2)^n
będą miały współczynniki, które są dodatnimi liczbami całkowitymi i które sumują3^n
, więc każdy z nich będzie indywidualnie mniejszy niż3^n
.Alternatywne podejścia: 17 bajtów
Demo online
lub
Demo online
oba działają poprzez zsumowanie poprzedniego rzędu z przesuniętym i podwójnym rzędem (w podobnym stylu do standardowej ręcznej konstrukcji trójkąta Pascala).
Podejście „bezpośrednie” wykorzystujące potęgi kartezjańskie (w przeciwieństwie do potęg całkowitych) do operacji mocy wielomianowej ma 24 bajty:
gdzie mapa jest niezwykle skomplikowana, tak że jej użycie jest krótsze
%
niżf
:źródło
ES6, 71 bajtów
Prosta formuła rekurencyjna. Każdy hipersześcian jest tworzony przez przeniesienie poprzedniej jednostki hipersześcianu 1 przez N-ty wymiar. Oznacza to, że obiekty M-wymiarowe są powielane na początku i na końcu jednostki, ale także obiekty (M-1) zyskują dodatkowy wymiar, zamieniając się w obiekty M-wymiarowe. Innymi słowy
c(n, m) = c(n - 1, m) * 2 + c(n - 1, m - 1)
. (Rzeczywiste przesłanie odwraca parametry, aby formuła generowała dane w żądanej kolejności).Pomysłowo
fill
pozwalamap
na podanie poprawnych argumentów funkcji rekurencyjnej, oszczędzając mi 6 bajtów.źródło
Pyth,
109 bajtówKorzysta z algorytmu nCr, którego wszyscy używają.
źródło
.<L.cQdhQ
05AB1E , 9 bajtów
Kod:
Wyjaśnienie:
Wykorzystuje kodowanie CP-1252.
źródło
Julia, 31 bajtów
Jest to funkcja lambda, która przyjmuje liczbę całkowitą i zwraca tablicę liczb całkowitych. Aby go wywołać, przypisz go do zmiennej.
Dla każdego m od 0 do wejścia n liczymy liczbę ( n - m ) wymiarów hipersześcianów na granicy nadrzędnego n- wymiarowego hipersześcianu. Korzystając ze wzoru na Wikipedii, wystarczy 2 m * wybrać ( n , m ). Przypadek m = 0 odnosi się do samego n- modułu, więc wyjście zaczyna się od 1 niezależnie od danych wejściowych. Krawędzie są podane przez m = n , wierzchołki przez m = n - 1 itd.
źródło
Ruby, Rev B 57 bajtów
Poprzednia wersja tylko za każdym razem skanowała używaną część tablicy. Ta rev skanuje całą tablicę podczas każdej iteracji. Jest to wolniejsze, ale oszczędza bajty. Kolejny bajt jest zapisywany przy użyciu 1 pętli do wykonania zadania 2.
Ruby, Rev A 61 bajtów
Zaczyna się od punktu i iteracyjnie tworzy następny wymiar
W każdej iteracji każdy istniejący element zwiększa wymiarowość i generuje 2 nowe elementy o pierwotnej wymiarowości. Na przykład dla kwadratu w płaszczyźnie poziomej, który jest przedłużony pionowo, aby stał się sześcianem:
1 twarz staje się sześcianem i generuje 1 parę ścian (1 powyżej, 1 poniżej)
4 krawędzie stają się powierzchniami i generują 4 pary krawędzi (4 powyżej, 4 poniżej)
4 wierzchołki stają się krawędziami i generują 4 pary wierzchołków (4 powyżej, 4 poniżej)
Niegolfowany w programie testowym
źródło