Розглянемо стандартний рівносторонній трикутник з вузлами, позначеними за допомогою барицентричних координат :
Ми можемо перетворити цей трикутний трикутник у трикутник із 6 вузлів, додавши новий рядок із 3 вершин (на одну більше, ніж було на стороні від початкового трикутника), видалити будь-які внутрішні краї (але не внутрішні вузли) та повторно нормалізувати координати:
Повторивши процес, щоб перейти від трикутника 6 вузлів до трикутника 10 вузлів, додайте рядок з 4 вершин (знову ж таки, один більше, ніж був на стороні від початкового трикутника з 6 вузлами), видаліть будь-які внутрішні краї (але не внутрішні вузли ) і повторно нормалізувати координати:
Цей процес можна повторити нескінченно. Мета цього завдання задається цілим числом, яке N
відображає, скільки разів цей процес був виконаний, виводить усі вузли для пов'язаного трикутника в барицентричних координатах.
Вхідні дані
Ваша програма / функція повинна брати за вхід одне невід'ємне ціле число, що N
відображає, скільки разів цей процес застосовувався. Зауважте, що для цього N=0
слід вивести початковий трикутник з 3-ма вузлами.
Вхід може надходити з будь-якого джерела (параметр функції, stdio тощо).
Вихідні дані
Ваша програма / функція повинна виводити всі вузли в нормалізованих барицентричних координатах. Порядок вузлів значення не має. Число може бути вказане у вигляді дробу (зменшення дробу не потрібно) або числа з плаваючою комою. Ви також можете вивести "масштабовані" вектори, щоб вказати вузол. Наприклад, усі 3 наступних виходу є еквівалентними та дозволеними:
0.5,0.5,0
1/2,2/4,0
[1,1,0]/2
Якщо ви використовуєте вихід з плаваючою комою, ваш вихід повинен бути точним до 1%. Вихід може бути до будь-якої бажаної раковини (stdio, значення повернення, параметр повернення тощо). Зауважте, що хоча барицентричні координати однозначно визначаються лише 2 числами на вузол, вам слід вивести всі 3 числа на вузол.
Приклади
Приклади випадків форматуються як:
N
x0,y0,z0
x1,y1,z1
x2,y2,z2
...
де перший рядок є входом N
, а всі наступні рядки утворюють вузол, x,y,z
який повинен бути у висновку рівно один раз. Всі числа задаються як приблизні числа з плаваючою комою.
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
Оцінка балів
Це кодовий гольф; найкоротший код в байтах виграє. Застосовуються стандартні лазівки. Ви можете використовувати будь-які бажані вбудовані модулі.
[1,2,3]/6
?