Escriba una función o programa que genere el número de cada tipo de elemento (vértice, arista, cara, etc.) de un hipercubo N-dimensional.
Como ejemplo, el cubo tridimensional tiene 1 celda (es decir, 1 cubo tridimensional), 6 caras (es decir, 6 cubos bidimensionales), 12 aristas (es decir, 12 cubos bidimensionales) y 8 vértices (es decir, 8 dimensiones). cubitos).
Puede encontrar más detalles sobre los elementos de Hypercube aquí
También puede echar un vistazo a la siguiente secuencia OEIS .
Entrada
Su código tomará como entrada (a través de STDIN o un parámetro de función o cosas similares) un número entero mayor o igual a 0, que es la dimensión del hipercubo.
Su código tiene que funcionar teóricamente para cualquier entrada> = 0, sin tener en cuenta los problemas de memoria y tiempo (es decir, la velocidad y los desbordamientos potenciales de la pila no son un problema para su respuesta si la entrada es grande). Las entradas dadas como casos de prueba no serán superiores a 12.
Salida
Superará una lista de todos los elementos del hipercubo, comenzando con el elemento de "dimensión más alta". Por ejemplo, para un cubo (input = 3), generará la lista [1,6,12,8]
(1 celda, 6 caras, 12 aristas, 8 vértices).
El formato de la lista en la salida es relativamente libre, siempre que parezca una lista.
Puede enviar el resultado a STDOUT o devolverlo desde una función.
Casos de prueba
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]
Puntuación
Este es el código de golf , por lo que gana la respuesta más corta en bytes.
MATL , 12 bytes
Pruébalo en línea
Explicación
fuente
Mathematica, 29 bytes
¡Mi primera respuesta de Mathematica! Esta es una pura función que utiliza el mismo enfoque que PARI / GP de Alephalpha respuesta . Construimos el polinomio
(1+2x)^n
y obtenemos la lista de coeficientes, enumerados en orden de potencia ascendente (es decir, constante primero).Ejemplo de uso:
fuente
APL,
1511 bytesEste es un tren de funciones monádicas que acepta un número entero a la derecha y devuelve una matriz entera.
Explicación, llamando a la entrada
n
:Pruébalo en línea
¡Guardado 4 bytes gracias a Dennis!
fuente
PARI / GP,
2015 bytesfuente
Jalea, 8 bytes
Realmente debería dejar de escribir Jelly en mi teléfono.
Probarlo aquí .
fuente
TI-BASIC, 10 bytes
fuente
binompdf
.CJam (
1714 bytes)Demostración en línea
Este enfoque utiliza la función generadora ordinaria
(x + 2)^n
. La OEIS menciona(2x + 1)^n
, pero esta pregunta indexa los coeficientes en el orden opuesto. Me estoy pateando por no pensar en revertir el gf hasta que vi la actualización de Alephalpha a la respuesta PARI / GP que hizo lo mismo.El truco interesante en esta respuesta es utilizar potencias enteras para la operación de potencia polinómica operando en una base más alta que cualquier coeficiente posible. En general, dado un polinomio
p(x)
cuyos coeficientes son todos enteros no negativos menores queb
,p(b)
es unab
representación base de los coeficientes (porque los monomios individuales no se "superponen"). Claramente(x + 2)^n
tendrá coeficientes que son enteros positivos y que suman3^n
, por lo que cada uno de ellos será individualmente menor que3^n
.Enfoques alternativos: a 17 bytes
Demostración en línea
o
Demostración en línea
ambos trabajan sumando la fila anterior con una fila desplazada y doblada (en un estilo similar a la construcción manual estándar del triángulo de Pascal).
Un enfoque "directo" que usa potencias cartesianas (en oposición a las potencias enteras) para la operación de potencia polinómica, viene en 24 bytes:
donde el mapa es, inusualmente, lo suficientemente complicado como para que sea más corto de usar
%
quef
:fuente
ES6, 71 bytes
Fórmula recursiva simple. Cada hipercubo se crea moviendo la unidad anterior del hipercubo 1 a través de la enésima dimensión. Esto significa que los objetos M-dimensionales se duplican al comienzo y al final de la unidad, pero también los objetos dimensionales (M-1) ganan una dimensión extra, convirtiéndose en objetos M-dimensionales. En otras palabras,
c(n, m) = c(n - 1, m) * 2 + c(n - 1, m - 1)
. (El envío real invierte los parámetros para que la fórmula salga en el orden deseado).Ingeniosamente,
fill
permitemap
proporcionar los argumentos correctos a la función recursiva, ahorrándome 6 bytes.fuente
Pyth,
109 bytesUtiliza el algoritmo nCr que todo el mundo parece estar usando.
fuente
.<L.cQdhQ
05AB1E , 9 bytes
Código:
Explicación:
Utiliza la codificación CP-1252.
fuente
Julia, 31 bytes
Esta es una función lambda que acepta un entero y devuelve una matriz de enteros. Para llamarlo, asígnelo a una variable.
Para cada m desde 0 hasta la entrada n , contamos el número de hipercubos dimensionales ( n - m ) en el límite del hipercubo n- dimensional primario . Usando la fórmula en Wikipedia, es simplemente 2 m * elegir ( n , m ). El caso de m = 0 se refiere al n -cubo en sí mismo, por lo que la salida comienza con 1 independientemente de la entrada. Los bordes están dados por m = n , los vértices por m = n - 1, etc.
fuente
Ruby, Rev B 57 bytes
La rev anterior solo escaneaba a través de la parte utilizada de la matriz cada vez. Esta revolución explora toda la matriz en cada iteración. Esto es más lento, pero ahorra bytes. Un byte adicional se guarda usando 1 bucle para hacer el trabajo de 2.
Ruby, Rev A 61 bytes
Comienza con un punto y crea iterativamente la siguiente dimensión
En cada iteración, cada elemento existente aumenta en dimensionalidad y genera 2 elementos nuevos de su dimensionalidad original. Por ejemplo, para un cuadrado en el plano horizontal que se extiende verticalmente para convertirse en un cubo:
La 1 cara se convierte en un cubo y genera 1 par de caras (1 arriba, 1 abajo)
Los 4 bordes se convierten en caras y generan 4 pares de bordes (4 arriba, 4 abajo)
Los 4 vértices se convierten en bordes y generan 4 pares de vértices (4 arriba, 4 abajo)
Sin golf en el programa de prueba
fuente