Schreiben Sie eine Funktion oder ein Programm, das die Nummer jedes Elementtyps (Scheitelpunkt, Kante, Fläche usw.) eines N-dimensionalen Hyperwürfels ausgibt.
Beispielsweise hat der dreidimensionale Würfel 1 Zelle (dh 1 dreidimensionaler Würfel), 6 Flächen (dh 6 zweidimensionale Würfel), 12 Kanten (dh 12 zweidimensionale Würfel) und 8 Eckpunkte (dh 8 0-dimensional) Würfel).
Weitere Details zu Hypercube-Elementen finden Sie hier
Sie können sich auch die folgende OEIS-Sequenz ansehen .
Eingang
Ihr Code nimmt als Eingabe (über STDIN oder einen Funktionsparameter oder ähnliche Dinge) eine ganze Zahl größer oder gleich 0 an, die die Dimension des Hyperwürfels darstellt.
Ihr Code muss theoretisch für jede Eingabe> = 0 funktionieren, wobei Speicher- und Zeitprobleme unberücksichtigt bleiben (dh Geschwindigkeit und potenzielle Stapelüberläufe sind für Ihre Antwort kein Problem, wenn die Eingabe groß ist). Als Testfälle angegebene Eingaben werden nicht höher als 12 sein.
Ausgabe
Sie geben eine Liste aller Elemente des Hypercubes aus, beginnend mit dem Element "höchste Dimension". Für einen Würfel (Eingabe = 3) geben Sie beispielsweise die Liste aus [1,6,12,8]
(1 Zelle, 6 Flächen, 12 Kanten, 8 Eckpunkte).
Das Format der Liste in der Ausgabe ist relativ frei, solange es wie eine Liste aussieht.
Sie können das Ergebnis an STDOUT ausgeben oder von einer Funktion zurückgeben.
Testfälle
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]
Wertung
Das ist Code-Golf , also gewinnt die kürzeste Antwort in Bytes.
MATL , 12 Bytes
Probieren Sie es online aus
Erläuterung
quelle
Mathematica, 29 Bytes
Meine erste Mathematica-Antwort! Dies ist eine reine Funktion, die den gleichen Ansatz wie Alephalphas PARI / GP verwendet Antwort verwendet . Wir konstruieren das Polynom
(1+2x)^n
und erhalten die Liste der Koeffizienten, sortiert nach aufsteigender Potenz (dh konstant zuerst).Anwendungsbeispiel:
quelle
APL,
1511 BytesDies ist ein monadischer Funktionszug, der eine Ganzzahl auf der rechten Seite akzeptiert und ein Ganzzahl-Array zurückgibt.
Erklärung, Aufruf der Eingabe
n
:Probieren Sie es online aus
4 Bytes gespart dank Dennis!
quelle
PARI / GP,
2015 Bytesquelle
Gelee, 8 Bytes
Ich sollte wirklich aufhören, Jelly auf mein Handy zu schreiben.
Probieren Sie es hier aus .
quelle
TI-BASIC, 10 Bytes
quelle
binompdf
.CJam (
1714 Bytes)Online-Demo
Dieser Ansatz verwendet die gewöhnliche Erzeugungsfunktion
(x + 2)^n
. Der OEIS erwähnt(2x + 1)^n
, aber diese Frage indiziert die Koeffizienten in umgekehrter Reihenfolge. Ich mache mir den Kopf zerbrochen, weil ich nicht daran gedacht habe, die Gf umzukehren, bis ich Alephalphas Aktualisierung der PARI / GP-Antwort gesehen habe, die dasselbe tat.Der interessante Trick bei dieser Antwort besteht darin, ganzzahlige Potenzen für die polynomiale Potenzoperation zu verwenden, indem mit einer Basis gearbeitet wird, die höher ist als jeder mögliche Koeffizient. Im Allgemeinen ist bei einem Polynom,
p(x)
dessen Koeffizienten alle nicht negative ganze Zahlen sindb
,p(b)
eine Basisdarstellungb
der Koeffizienten (da sich die einzelnen Monome nicht "überlappen"). Es ist klar(x + 2)^n
, dass Koeffizienten positive ganze Zahlen sind, die sich summieren3^n
, sodass jeder von ihnen einzeln kleiner als ist3^n
.Alternative Ansätze: bei 17 Bytes
Online-Demo
oder
Online-Demo
Beide arbeiten, indem sie die vorherige Zeile mit einer versetzten und doppelten Zeile summieren (in einem ähnlichen Stil wie bei der manuellen Standardkonstruktion von Pascals Dreieck).
Ein "direkter" Ansatz unter Verwendung kartesischer Potenzen (im Gegensatz zu ganzzahligen Potenzen) für die polynomiale Potenzoperation ergibt 24 Bytes:
Wo die Karte ungewöhnlich kompliziert genug ist, um kürzer zu sein
%
alsf
:quelle
ES6, 71 Bytes
Einfache rekursive Formel. Jeder Hyperkubus wird erstellt, indem die vorherige Einheit Hyperkubus 1 durch die N-te Dimension bewegt wird. Dies bedeutet, dass die M-dimensionalen Objekte am Anfang und Ende der Einheit dupliziert werden, aber auch die (M-1) -dimensionalen Objekte erhalten eine zusätzliche Dimension und werden zu M-dimensionalen Objekten. Mit anderen Worten,
c(n, m) = c(n - 1, m) * 2 + c(n - 1, m - 1)
. (Die tatsächliche Übermittlung kehrt die Parameter um, sodass die Formel in der gewünschten Reihenfolge ausgegeben wird.)Genialerweise
fill
erlaubtmap
es, die richtigen Argumente für die rekursive Funktion bereitzustellen, was mir 6 Bytes spart.quelle
Pyth,
109 BytesVerwendet den nCr-Algorithmus, den anscheinend jeder verwendet.
quelle
.<L.cQdhQ
05AB1E , 9 Bytes
Code:
Erläuterung:
Verwendet CP-1252-Codierung.
quelle
Julia, 31 Bytes
Dies ist eine Lambda-Funktion, die eine Ganzzahl akzeptiert und ein Ganzzahl-Array zurückgibt. Um es aufzurufen, weisen Sie es einer Variablen zu.
Für jedes m von 0 bis zur Eingabe n zählen wir die Anzahl der ( n - m ) -dimensionalen Hyperwürfel an der Grenze des übergeordneten n -dimensionalen Hyperwürfels. Mit der Formel auf Wikipedia sind es einfach 2 m * wähle ( n , m ). Der Fall von m = 0 bezieht sich auf den n- Würfel selbst, sodass die Ausgabe unabhängig von der Eingabe mit 1 beginnt. Kanten sind gegeben durch m = n , Eckpunkte durch m = n - 1 usw.
quelle
Ruby, Rev. B 57 Bytes
Die vorherige Version hat jedes Mal nur den verwendeten Teil des Arrays durchsucht. Diese Version durchsucht das gesamte Array bei jeder Iteration. Das ist langsamer, spart aber Bytes. Ein weiteres Byte wird gespeichert, indem 1 Schleife verwendet wird, um die Arbeit von 2 zu erledigen.
Ruby, Rev A 61 Bytes
Beginnt mit einem Punkt und erstellt iterativ die nächste Dimension
In jeder Iteration nimmt die Dimension jedes vorhandenen Elements zu und erzeugt 2 neue Elemente seiner ursprünglichen Dimension. Zum Beispiel für ein Quadrat in der horizontalen Ebene, das vertikal erweitert wird, um ein Würfel zu werden:
Die 1 Fläche wird zu einem Würfel und erzeugt 1 Paar Flächen (1 oben, 1 unten)
Die 4 Kanten werden zu Flächen und erzeugen 4 Kantenpaare (4 oben, 4 unten)
Die 4 Eckpunkte werden zu Kanten und erzeugen 4 Paare von Eckpunkten (4 oben, 4 unten)
Ungolfed im Testprogramm
quelle