Це другий з двох викликів щодо «підтягування функцій». Ось кілька простіше Частина I .
Введемо m цвяхів у дошку у положеннях (x 1 , y 1 ) до (x m , y m ) . Прив’яжіть гумку до першого і останнього з них і натягніть навколо інших цвяхів, таким чином, щоб стрічка перетинала всі цвяхи в порядку. Зауважимо, що резинка тепер описує кусково-лінійну параметризовану функцію (x (t), y (t)) у двовимірному просторі.
Тепер введіть ще п цвяхів у дошку, у положеннях (x 1 , y 1 ) до (x n , y n ) . Якщо ми тепер видалити всі оригінальні м нігтів , за винятком першого і останнього (що кінці гуми прив'язаних до), гумка буде скоротити до тих пір, поки бреше тугу навколо нових цвяхів, отримуючи інше кусочно - лінійну функцію.
Як приклад, візьміть m = 12 початкових цвяхів у положеннях (0, 0), (2, -1), (3/2, 4/3), (7/2, 1/3), (11/2, 16/3), (1, 16/3), (0, 1), (7, -2), (3, 4), (8, 1), (3, -1), (11, 0) , і n = 10 подальших цвяхів у положеннях (1, 1), (3, 1), (4, 4), (1, 3), (2, 2), (5, -1), (5, 0 ), (6, 2), (7, 1), (6, 0) . Наступні три сюжети показують описаний вище процес:
Для більшої версії: Клацніть правою кнопкою миші -> Відкрити в новій вкладці
А ось анімація затягування гумки, якщо у вас виникли труднощі із візуалізацією:
Змагання
Враховуючи два списки «цвяхів», накресліть натягнуту гумку навколо другого списку, якщо вона починається з форми, що обходить усі цвяхи в першому списку.
Ви можете написати програму або функцію та взяти вхід через STDIN, ARGV або аргумент функції. Ви можете відображати результат на екрані або зберігати зображення у файлі.
Якщо результат розсіяний, він повинен бути не менше 300 пікселів з кожного боку. Заключна гумова стрічка та цвяхи повинні покривати не менше 75% горизонтальної та вертикальної протяжності зображення. Масштаби довжини x і y повинні бути однаковими. Потрібно показати цвяхи у другому наборі (використовуючи не менше 3х3 пікселів) та рядку (не менше 1 пікселя в ширину). Ви можете або не включати оси.
Кольори - це ваш вибір, але вам потрібно як мінімум два кольори, що відрізняються: один для фону і один для нігтів і рядок (хоча вони можуть мати різні кольори).
Ви можете припустити, що всі цвяхи у другому списку розташовані як мінімум на 10 -5 одиниць від початкової форми гумки (так що вам не потрібно турбуватися про неточність з плаваючою комою).
Це кодовий гольф, тому найкоротша відповідь (у байтах) виграє.
Більше прикладів
Ось ще два приклади:
{{1, 1}, {3, 3}, {2, 4}, {1, 3}, {4, 0}, {3, -1}, {2, 0}, {4, 2}}
{{2, 1}, {3, 2}, {1, 2}, {4, 1}}
{{1, 1}, {3, 1}, {3, 3}, {1, 3}, {1, 5}, {3, 5}, {-1, 3}, {-1, 0}, {3, 4}, {5, 1}, {5, -1}, {7, -1}, {3, 7}, {7, 5}}
{{0, 0}, {0, 2}, {0, 4}, {0, 6}, {2, 0}, {2, 2}, {2, 4}, {2, 6}, {4, 0}, {4, 2}, {4, 4}, {4, 6}, {6, 0}, {6, 2}, {6, 4}, {6, 6}}
І ось один приклад, який показує значення двох початкових цвяхів, що залишилися. Результат повинен бути б і НЕ :
{{0, 0}, {0, 1}, {-1, 1}, {-1, -1}, {1, -1}, {1, 0}}
{{-0.5, 0.5}}
Дякуємо Ell, що надав цей приклад.