Escreva uma função ou programa que produza o número de cada tipo de elemento (vértice, aresta, face etc.) de um hipercubo N-dimensional.
Como exemplo, o cubo tridimensional possui 1 célula (ou seja, 1 cubo tridimensional), 6 faces (ou seja, 6 cubos bidimensionais), 12 arestas (ou seja, 12 cubos bidimensionais) e 8 vértices (ou seja, 8 dimensões 0 cubos).
Mais detalhes sobre os elementos do Hypercube podem ser encontrados aqui
Você também pode dar uma olhada na seguinte sequência OEIS .
Entrada
Seu código terá como entrada (via STDIN ou um parâmetro de função ou algo semelhante) um número inteiro maior ou igual a 0, que é a dimensão do hipercubo.
Teoricamente, seu código deve funcionar para qualquer entrada> = 0, desconsiderando problemas de memória e tempo (ou seja, velocidade e estouros de pilha em potencial não são um problema para sua resposta se a entrada for grande). As entradas fornecidas como casos de teste não serão superiores a 12.
Resultado
Você emitirá uma lista de todos os elementos do hipercubo, começando com o elemento "maior dimensão". Por exemplo, para um cubo (entrada = 3), você exibirá a lista [1,6,12,8]
(1 célula, 6 faces, 12 arestas, 8 vértices).
O formato da lista na saída é relativamente livre, desde que pareça uma lista.
Você pode enviar o resultado para STDOUT ou retorná-lo de uma função.
Casos de teste
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]
Pontuação
Isso é código-golfe , então a resposta mais curta em bytes vence.
MATL , 12 bytes
Experimente online
Explicação
fonte
Mathematica, 29 bytes
Minha primeira resposta do Mathematica! Essa é uma função pura que usa a mesma abordagem da resposta PARI / GP de Alephalpha . Construímos o polinômio
(1+2x)^n
e obtemos a lista de coeficientes, listados em ordem de potência ascendente (ou seja, constante primeiro).Exemplo de uso:
fonte
APL,
1511 bytesEste é um trem de função monádica que aceita um número inteiro à direita e retorna um array inteiro.
Explicação, chamando a entrada
n
:Experimente online
Economizou 4 bytes graças a Dennis!
fonte
PARI / GP,
2015 bytesfonte
Gelatina, 8 bytes
Eu realmente deveria parar de escrever Jelly no meu telefone.
Experimente aqui .
fonte
TI-BASIC, 10 bytes
fonte
binompdf
.CJam (
1714 bytes)Demonstração online
Essa abordagem usa a função geradora comum
(x + 2)^n
. O OEIS menciona(2x + 1)^n
, mas esta questão indexa os coeficientes na ordem oposta. Estou me chutando por não pensar em reverter o FG até que vi a atualização de Alefalpha na resposta do PARI / GP, que fez o mesmo.O truque interessante nesta resposta é usar potências inteiras para a operação de potência polinomial operando em uma base mais alta que qualquer coeficiente possível. Em geral, dado um polinômio
p(x)
cujos coeficientes são todos inteiros não negativos menores queb
,p(b)
é umab
representação básica dos coeficientes (porque os monômeros individuais não "se sobrepõem"). Claramente(x + 2)^n
terá coeficientes que são números inteiros positivos e que somam3^n
, então cada um deles será individualmente menor que3^n
.Abordagens alternativas: em 17 bytes
Demonstração online
ou
Demonstração online
os dois funcionam somando a linha anterior com uma linha offset e dobrada (em um estilo semelhante à construção manual padrão do triângulo de Pascal).
Uma abordagem "direta" usando potências cartesianas (em oposição às potências inteiras) para a operação de potência polinomial, tem 24 bytes:
onde o mapa é incomumente complicado o suficiente para ser mais curto do
%
quef
:fonte
ES6, 71 bytes
Fórmula recursiva simples. Cada hipercubo é criado movendo a unidade anterior do hipercubo 1 através da enésima dimensão. Isso significa que os objetos tridimensionais M são duplicados no início e no final da unidade, mas também os objetos tridimensionais (M-1) ganham uma dimensão extra, transformando-se em objetos tridimensionais. Em outras palavras
c(n, m) = c(n - 1, m) * 2 + c(n - 1, m - 1)
,. (O envio real reverte os parâmetros para que a fórmula saia na ordem desejada.)Engenhosamente,
fill
permitemap
fornecer os argumentos corretos para a função recursiva, economizando 6 bytes.fonte
Pitão,
109 bytesUsa o algoritmo nCr que todo mundo parece estar usando.
fonte
.<L.cQdhQ
05AB1E , 9 bytes
Código:
Explicação:
Usa a codificação CP-1252.
fonte
Julia, 31 bytes
Esta é uma função lambda que aceita um número inteiro e retorna uma matriz inteira. Para chamá-lo, atribua-o a uma variável.
Para cada m de 0 à entrada n , contamos o número de hipercubos ( n - m ) -dimensionais no limite do hipercubo n- dimensional pai . Usando a fórmula na Wikipedia, é simplesmente 2 m * escolher ( n , m ). O caso de m = 0 refere-se ao próprio cubo n , portanto a saída começa com 1, independentemente da entrada. As arestas são dadas por m = n , os vértices por m = n - 1, etc.
fonte
Ruby, Rev B 57 bytes
A rotação anterior varria apenas a parte usada da matriz a cada vez. Essa revisão varre toda a matriz em todas as iterações. Isso é mais lento, mas salva bytes. Um byte adicional é salvo usando 1 loop para fazer o trabalho de 2.
Ruby, Rev A 61 bytes
Começa com um ponto e cria iterativamente a próxima dimensão
Em cada iteração, cada elemento existente aumenta em dimensionalidade e gera 2 novos elementos de sua dimensionalidade original. Por exemplo, para um quadrado no plano horizontal que é estendido verticalmente para se tornar um cubo:
A 1 face se torna um cubo e gera 1 par de faces (1 acima, 1 abaixo)
As 4 arestas tornam-se faces e geram 4 pares de arestas (4 acima, 4 abaixo)
Os 4 vértices tornam-se arestas e geram 4 pares de vértices (4 acima, 4 abaixo)
Ungolfed in program program
fonte