Considera il triangolo equilatero standard, con i nodi etichettati usando coordinate baricentriche :

Possiamo trasformare questo triangolo a 3 nodi in un triangolo a 6 nodi aggiungendo una nuova linea di 3 vertici (uno in più rispetto a un lato del triangolo originale a 3 nodi), rimuovere eventuali bordi interni (ma non nodi interni) e ri normalizzare le coordinate:
Ripetendo il processo per passare da un triangolo a 6 nodi a un triangolo a 10 nodi, aggiungi una linea di 4 vertici (di nuovo, uno in più rispetto a un lato del triangolo originale a 6 nodi), rimuovi eventuali bordi interni (ma non nodi interni ) e normalizzare nuovamente le coordinate:
Questo processo può essere ripetuto indefinitamente. L'obiettivo di questa sfida è dato un numero intero che Nrappresenta quante volte questo processo è stato eseguito, emettendo tutti i nodi per il triangolo associato in coordinate baricentriche.
Ingresso
Il tuo programma / funzione dovrebbe prendere come input un singolo intero non negativo che Nrappresenta quante volte questo processo è stato applicato. Si noti che per N=0, è necessario generare il triangolo originale con 3 nodi.
L'ingresso può provenire da qualsiasi sorgente (parametro funzione, stdio, ecc.).
Produzione
Il tuo programma / funzione dovrebbe generare tutti i nodi in coordinate baricentriche normalizzate. L'ordine dei nodi non ha importanza. Un numero può essere specificato come una frazione (riduzione della frazione non richiesta) o un numero in virgola mobile. È inoltre possibile generare vettori "ridimensionati" per specificare un nodo. Ad esempio, tutti e 3 i seguenti output sono equivalenti e consentiti:
0.5,0.5,0
1/2,2/4,0
[1,1,0]/2
Se si utilizza l'output in virgola mobile, l'output deve essere accurato entro l'1%. L'output può essere su qualsiasi sink desiderato (stdio, valore di ritorno, parametro di ritorno, ecc.). Si noti che anche se le coordinate baricentriche sono determinate in modo univoco solo da 2 numeri per nodo, è necessario generare tutti e 3 i numeri per nodo.
Esempi
I casi di esempio sono formattati come:
N
x0,y0,z0
x1,y1,z1
x2,y2,z2
...
dove la prima riga è l'input Ne tutte le righe seguenti formano un nodo x,y,zche dovrebbe essere nell'output esattamente una volta. Tutti i numeri sono indicati come numeri approssimativi in virgola mobile.
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
punteggio
Questo è il codice golf; vince il codice più breve in byte. Si applicano scappatoie standard. È possibile utilizzare qualsiasi componente incorporato desiderato.


[1,2,3]/6?