Considere el triángulo equilátero estándar, con los nodos etiquetados con coordenadas barcéntricas :
Podemos convertir este triángulo de 3 nodos en un triángulo de 6 nodos agregando una nueva línea de 3 vértices (uno más de lo que estaba presente en un lado del triángulo original de 3 nodos), eliminar los bordes internos (pero no los nodos internos) y volver normalizar las coordenadas:
Repitiendo el proceso para pasar de un triángulo de 6 nodos a un triángulo de 10 nodos, agregue una línea de 4 vértices (nuevamente, uno más de lo que estaba presente en un lado del triángulo original de 6 nodos), elimine los bordes internos (pero no los nodos internos ) y re-normalizar las coordenadas:
Este proceso puede repetirse indefinidamente. El objetivo de este desafío es un número entero que N
representa cuántas veces se ha realizado este proceso, generar todos los nodos para el triángulo asociado en coordenadas barcéntricas.
Entrada
Su programa / función debe tomar como entrada un número entero no negativo que N
represente cuántas veces se ha aplicado este proceso. Tenga en cuenta que para N=0
, debe generar el triángulo original con 3 nodos.
La entrada puede provenir de cualquier fuente (parámetro de función, stdio, etc.).
Salida
Su programa / función debería generar todos los nodos en coordenadas barcéntricas normalizadas. El orden de los nodos no importa. Un número puede especificarse como una fracción (no se requiere reducción de fracción) o un número de coma flotante. También puede generar vectores "escalados" para especificar un nodo. Por ejemplo, las 3 de las siguientes salidas son equivalentes y están permitidas:
0.5,0.5,0
1/2,2/4,0
[1,1,0]/2
Si usa salida de punto flotante, su salida debe ser precisa dentro del 1%. La salida puede ser a cualquier sumidero deseado (estándar, valor de retorno, parámetro de retorno, etc.). Tenga en cuenta que a pesar de que las coordenadas barcéntricas están determinadas únicamente por 2 números por nodo, debe generar los 3 números por nodo.
Ejemplos
Los casos de ejemplo están formateados como:
N
x0,y0,z0
x1,y1,z1
x2,y2,z2
...
donde la primera línea es la entrada N
, y todas las siguientes líneas forman un nodo x,y,z
que debería estar en la salida exactamente una vez. Todos los números se dan como números aproximados de coma flotante.
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
Puntuación
Este es el código de golf; el código más corto en bytes gana. Se aplican lagunas estándar. Puede usar los complementos deseados.
[1,2,3]/6
?