Écrivez une fonction ou un programme qui génère le nombre de chaque type d'élément (sommet, arête, face, etc.) d'un hypercube à N dimensions.
Par exemple, le cube en 3 dimensions a 1 cellule (soit 1 cube en 3 dimensions), 6 faces (soit 6 cubes en 2 dimensions), 12 arêtes (soit 12 cubes en 2 dimensions) et 8 sommets (soit 8 0 dimensions) cubes).
Plus de détails sur les éléments Hypercube peuvent être trouvés ici
Vous pouvez également consulter la séquence OEIS suivante .
Contribution
Votre code prendra en entrée (via STDIN ou un paramètre de fonction ou des choses similaires) un entier supérieur ou égal à 0, qui est la dimension de l'hypercube.
Votre code doit théoriquement fonctionner pour toute entrée> = 0, sans tenir compte des problèmes de mémoire et de temps (c'est-à-dire que la vitesse et les débordements de pile potentiels ne sont pas un problème pour votre réponse si l'entrée est grande). Les entrées données comme cas de test ne seront pas supérieures à 12.
Production
Vous sortirez une liste de tous les éléments de l'hypercube, en commençant par l'élément "dimension la plus élevée". Par exemple, pour un cube (entrée = 3), vous afficherez la liste [1,6,12,8]
(1 cellule, 6 faces, 12 arêtes, 8 sommets).
Le format de la liste dans la sortie est relativement libre, tant qu'il ressemble à une liste.
Vous pouvez exporter le résultat vers STDOUT ou le renvoyer à partir d'une fonction.
Cas de test
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]
Notation
Il s'agit de code-golf , donc la réponse la plus courte en octets l'emporte.
MATL , 12 octets
Essayez-le en ligne
Explication
la source
Mathematica, 29 octets
Ma première réponse Mathematica! Ceci est une pure fonction qui utilise la même approche que PARI / GP de Alephalpha réponse . Nous construisons le polynôme
(1+2x)^n
et obtenons la liste des coefficients, classés par ordre croissant de puissance (c'est-à-dire constant en premier).Exemple d'utilisation:
la source
APL,
1511 octetsIl s'agit d'un train de fonctions monadique qui accepte un entier à droite et renvoie un tableau d'entiers.
Explication, appel de l'entrée
n
:Essayez-le en ligne
4 octets enregistrés grâce à Dennis!
la source
PARI / GP,
2015 octetsla source
Gelée, 8 octets
Je devrais vraiment arrêter d'écrire Jelly sur mon téléphone.
Essayez-le ici .
la source
TI-BASIC, 10 octets
la source
binompdf
.CJam (
1714 octets)Démo en ligne
Cette approche utilise la fonction de génération ordinaire
(x + 2)^n
. L'OEIS le mentionne(2x + 1)^n
, mais cette question indexe les coefficients dans l'ordre inverse. Je me donne un coup de pied pour ne pas penser à inverser la gf jusqu'à ce que je voie la mise à jour d'Alephalpha de la réponse PARI / GP qui a fait de même.L'astuce intéressante de cette réponse est d'utiliser des puissances entières pour le fonctionnement en puissance polynomiale en fonctionnant dans une base supérieure à tout coefficient possible. En général, étant donné un polynôme
p(x)
dont les coefficients sont tous des entiers non négatifs inférieurs àb
,p(b)
est uneb
représentation de base des coefficients (parce que les monômes individuels ne se "chevauchent"). Clairement(x + 2)^n
aura des coefficients qui sont des entiers positifs et qui se résument à3^n
, donc chacun d'eux sera individuellement inférieur à3^n
.Approches alternatives: à 17 octets
Démo en ligne
ou
Démo en ligne
les deux fonctionnent en additionnant la ligne précédente avec une ligne décalée et doublée (dans un style similaire à la construction manuelle standard du triangle de Pascal).
Une approche "directe" utilisant des puissances cartésiennes (par opposition aux puissances entières) pour le fonctionnement de puissance polynomiale, se présente à 24 octets:
où la carte est, inhabituellement, suffisamment compliquée pour être plus courte à utiliser
%
quef
:la source
ES6, 71 octets
Formule récursive simple. Chaque hypercube est créé en déplaçant l'unité d'hypercube 1 précédente à travers la Nième dimension. Cela signifie que les objets dimensionnels M sont dupliqués au début et à la fin de l'unité, mais que les objets dimensionnels (M-1) acquièrent une dimension supplémentaire, se transformant en objets dimensionnels M. En d'autres termes,
c(n, m) = c(n - 1, m) * 2 + c(n - 1, m - 1)
. (La soumission réelle inverse les paramètres afin que la formule s'affiche dans l'ordre souhaité.)Ingénieusement,
fill
permetmap
de fournir les bons arguments à la fonction récursive, me faisant économiser 6 octets.la source
Pyth,
109 octetsUtilise l'algorithme nCr que tout le monde semble utiliser.
la source
.<L.cQdhQ
05AB1E , 9 octets
Code:
Explication:
Utilise l'encodage CP-1252.
la source
Julia, 31 octets
Il s'agit d'une fonction lambda qui accepte un entier et renvoie un tableau d'entiers. Pour l'appeler, affectez-le à une variable.
Pour chaque m de 0 à l'entrée n , nous comptons le nombre d' hypercubes ( n - m ) -dimensionnels à la frontière de l' hypercube n- dimensionnel parent . En utilisant la formule sur Wikipedia, c'est simplement 2 m * choisissez ( n , m ). Le cas de m = 0 se réfère au n- cube lui-même, donc la sortie commence par 1 quelle que soit l'entrée. Les arêtes sont données par m = n , les sommets par m = n - 1, etc.
la source
Ruby, Rev B 57 octets
La version précédente a seulement analysé la partie utilisée de la baie à chaque fois. Cette rév analyse l'ensemble du tableau à chaque itération. C'est plus lent, mais cela économise des octets. Un octet supplémentaire est enregistré en utilisant 1 boucle pour faire le travail de 2.
Ruby, Rev A 61 octets
Commence par un point et crée de manière itérative la dimension suivante
À chaque itération, chaque élément existant augmente en dimensionnalité et génère 2 nouveaux éléments de sa dimensionnalité d'origine. Par exemple, pour un carré dans le plan horizontal qui se prolonge verticalement pour devenir un cube:
La 1 face devient un cube et génère 1 paire de faces (1 au dessus, 1 en dessous)
Les 4 arêtes deviennent des faces et génèrent 4 paires d'arêtes (4 au dessus, 4 en dessous)
Les 4 sommets deviennent des arêtes et génèrent 4 paires de sommets (4 au dessus, 4 en dessous)
Non testé dans le programme de test
la source