Considérons le triangle équilatéral standard, avec des nœuds étiquetés à l'aide de coordonnées barycentriques :
Nous pouvons transformer ce triangle à 3 nœuds en un triangle à 6 nœuds en ajoutant une nouvelle ligne de 3 sommets (un de plus que ce qui était présent sur un côté du triangle d'origine à 3 nœuds), supprimer tous les bords internes (mais pas les nœuds internes) et normaliser les coordonnées:
Répéter le processus pour passer d'un triangle à 6 nœuds à un triangle à 10 nœuds, ajouter une ligne de 4 sommets (là encore, un de plus que ce qui était présent sur un côté du triangle d'origine à 6 nœuds), supprimer tous les bords internes (mais pas les nœuds internes ) et renormaliser les coordonnées:
Ce processus peut être répété indéfiniment. Le but de ce défi est donné un nombre entier N
représentant le nombre de fois que ce processus a été effectué, sortie tous les nœuds pour le triangle associé en coordonnées barycentriques.
Contribution
Votre programme / fonction doit prendre en entrée un seul entier non négatif N
représentant le nombre de fois où ce processus a été appliqué. Notez que pour N=0
, vous devez sortir le triangle d'origine avec 3 nœuds.
L'entrée peut provenir de n'importe quelle source (paramètre de fonction, stdio, etc.).
Production
Votre programme / fonction doit sortir tous les nœuds en coordonnées barycentriques normalisées. L'ordre des nœuds n'a pas d'importance. Un nombre peut être spécifié sous forme de fraction (réduction de fraction non requise) ou nombre à virgule flottante. Vous pouvez également générer des vecteurs "à l'échelle" pour spécifier un nœud. Par exemple, les 3 sorties suivantes sont équivalentes et autorisées:
0.5,0.5,0
1/2,2/4,0
[1,1,0]/2
Si vous utilisez une sortie en virgule flottante, votre sortie doit être précise à 1% près. La sortie peut être vers n'importe quel récepteur souhaité (stdio, valeur de retour, paramètre de retour, etc.). Notez que même si les coordonnées barycentriques sont uniquement déterminées par seulement 2 nombres par nœud, vous devez sortir les 3 nombres par nœud.
Exemples
Les exemples de cas sont formatés comme suit:
N
x0,y0,z0
x1,y1,z1
x2,y2,z2
...
où la première ligne est l'entrée N
, et toutes les lignes suivantes forment un nœud x,y,z
qui doit être dans la sortie exactement une fois. Tous les nombres sont donnés sous forme de nombres à virgule flottante approximatifs.
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
Notation
C'est le golf de code; le code le plus court en octets gagne. Des échappatoires standard s'appliquent. Vous pouvez utiliser n'importe quel module intégré souhaité.
[1,2,3]/6
?