Rozważ standardowy trójkąt równoboczny, z węzłami oznaczonymi za pomocą współrzędnych barycentrycznych :
Możemy przekształcić ten trójkąt z 3 węzłami w trójkąt z 6 węzłami, dodając nową linię 3 wierzchołków (o jeden więcej niż z boku oryginalnego trójkąta z 3 węzłami), usuń wszelkie wewnętrzne krawędzie (ale nie wewnętrzne węzły) i ponownie znormalizować współrzędne:
Powtarzając proces przejścia z trójkąta 6-węzłowego do trójkąta 10-węzłowego, dodaj linię 4 wierzchołków (ponownie, o jeden więcej niż na boku oryginalnego trójkąta 6-węzłowego), usuń wszelkie wewnętrzne krawędzie (ale nie wewnętrzne węzły ) i ponownie znormalizować współrzędne:
Proces ten można powtarzać w nieskończoność. Celem tego wyzwania jest liczba całkowita N
reprezentująca, ile razy ten proces został wykonany, wyprowadzenie wszystkich węzłów dla powiązanego trójkąta we współrzędnych barycentrycznych.
Wejście
Twój program / funkcja powinna przyjąć jako dane wejściowe jedną nieujemną liczbę całkowitą N
reprezentującą ile razy ten proces został zastosowany. Zauważ, że dla N=0
powinieneś wygenerować oryginalny trójkąt z 3 węzłami.
Dane wejściowe mogą pochodzić z dowolnego źródła (parametr funkcji, stdio itp.).
Wynik
Twój program / funkcja powinna wypisywać wszystkie węzły w znormalizowanych współrzędnych barocentrycznych. Kolejność węzłów nie ma znaczenia. Liczbę można określić jako ułamek (redukcja ułamka nie jest wymagana) lub liczbę zmiennoprzecinkową. Możesz również wyprowadzać „skalowane” wektory, aby określić węzeł. Na przykład wszystkie 3 z następujących danych wyjściowych są równoważne i dozwolone:
0.5,0.5,0
1/2,2/4,0
[1,1,0]/2
Jeśli używasz wyjścia zmiennoprzecinkowego, twój wynik powinien być dokładny z dokładnością do 1%. Dane wyjściowe mogą być do dowolnego pożądanego ujścia (standard, wartość zwracana, parametr powrotu itp.). Zauważ, że chociaż współrzędne barycentryczne są jednoznacznie określone tylko przez 2 liczby na węzeł, powinieneś wyprowadzić wszystkie 3 liczby na węzeł.
Przykłady
Przykładowe przypadki są sformatowane jako:
N
x0,y0,z0
x1,y1,z1
x2,y2,z2
...
gdzie pierwszy wiersz jest wejściem N
, a wszystkie kolejne wiersze tworzą węzeł, x,y,z
który powinien znajdować się na wyjściu dokładnie raz. Wszystkie liczby podano jako przybliżone liczby zmiennoprzecinkowe.
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
Punktacja
To jest kod golfowy; najkrótszy kod w bajtach wygrywa. Obowiązują standardowe luki. Możesz użyć dowolnych wbudowanych funkcji.
[1,2,3]/6
?