Considere o triângulo equilátero padrão, com nós rotulados usando coordenadas baricêntricas :
Podemos transformar esse triângulo de 3 nós em um triângulo de 6 nós adicionando uma nova linha de 3 vértices (um a mais do que estava presente em um lado do triângulo de 3 nós original), remova quaisquer arestas internas (mas não os nós internos) e normalize as coordenadas:
Repetindo o processo para ir de um triângulo de 6 nós a um triângulo de 10 nós, adicione uma linha de 4 vértices (novamente, mais um que estava presente em um lado do triângulo de 6 nós original), remova quaisquer arestas internas (mas não os nós internos ) e normalize novamente as coordenadas:
Este processo pode ser repetido indefinidamente. O objetivo deste desafio é fornecer um número inteiro que N
representa quantas vezes esse processo foi executado, produzindo todos os nós do triângulo associado em coordenadas baricêntricas.
Entrada
Seu programa / função deve ter como entrada um número inteiro não negativo N
representando quantas vezes esse processo foi aplicado. Observe que N=0
, para , você deve gerar o triângulo original com 3 nós.
A entrada pode vir de qualquer fonte (parâmetro de função, stdio, etc.).
Saída
Seu programa / função deve produzir todos os nós em coordenadas baricêntricas normalizadas. A ordem dos nós não importa. Um número pode ser especificado como uma fração (redução de fração não necessária) ou um número de ponto flutuante. Você também pode gerar vetores "dimensionados" para especificar um nó. Por exemplo, todas as três seguintes saídas são equivalentes e permitidas:
0.5,0.5,0
1/2,2/4,0
[1,1,0]/2
Se estiver usando saída de ponto flutuante, sua saída deve ter precisão de 1%. A saída pode ser para qualquer coletor desejado (stdio, valor de retorno, parâmetro de retorno, etc.). Observe que, embora as coordenadas barocêntricas sejam determinadas exclusivamente por apenas 2 números por nó, você deve gerar todos os 3 números por nó.
Exemplos
Casos de exemplo são formatados como:
N
x0,y0,z0
x1,y1,z1
x2,y2,z2
...
onde a primeira linha é a entrada N
e todas as linhas seguintes formam um nó x,y,z
que deve estar na saída exatamente uma vez. Todos os números são dados como números aproximados de ponto flutuante.
0
1,0,0
0,1,0
0,0,1
1
1,0,0
0,1,0
0,0,1
0.5,0,0.5
0.5,0.5,0
0,0.5,0.5
2
1,0,0
0,1,0
0,0,1
0.667,0,0.333
0.667,0.333,0
0.333,0,0.667
0.333,0.333,0.333
0.333,0.667,0
0,0.333,0.667
0,0.667,0.333
3
1,0,0
0.75,0,0.25
0.75,0.25,0
0.5,0,0.5
0.5,0.25,0.25
0.5,0.5,0
0.25,0,0.75
0.25,0.25,0.5
0.25,0.5,0.25
0.25,0.75,0
0,0,1
0,0.25,0.75
0,0.5,0.5
0,0.75,0.25
0,1,0
Pontuação
Isso é código de golfe; o menor código em bytes vence. Aplicam-se brechas padrão. Você pode usar quaisquer embutidos desejados.
[1,2,3]/6
?