Фон
Слизькі форми є приголомшливими. Якщо розмістити їх на поверхні з джерелами їжі, вони поширять вусики, щоб знайти їжу, після чого вони утворюють мережу зв’язків між джерелами. У цьому завданні ви повинні імітувати слизову форму для пошуку їжі. Більше того, саме ця форма зупиниться, коли її знайдеться достатньо.
Вхідні дані
Вхідними L
даними буде список двозначних цілих координат у рідному форматі вашої мови та невід’ємне ціле число N
. Список L
гарантовано не містить дублікатів, але він не може бути відсортований. Вхід N
між 0 і довжиною L
включно.
Список L
представляє набір координат джерел харчування. Наприклад, список
[(0,0),(2,-1),(3,1),(0,4),(5,5)]
можна інтерпретувати візуально як
o
o
o
o
o
Вихідні дані
Ваш вихід - це ще один без дублікату список K
двовимірних цілих координат у тому ж форматі, що і вхідний. Він представляє мережу, утворену шлаковою формою, і вона повинна відповідати наступним умовам:
- Перетин
L
іK
має розмір точноN
. - Набір
K
з'єднаний як підмножина цілої сітки (через ортогональні або діагональні суміжності). - Якщо будь-яку координату
K
видалити, вона більше не відповідає першим двом умовам.
Зауважте, що якщо N = 0
, вихід повинен бути порожнім списком.
Прикладом прийнятного результату для вищезазначеного списку L
і N = 4
буде
[(0,0),(0,1),(0,2),(0,3),(0,4),(1,4),(2,4),(3,3),(3,2),(3,1),(3,5),(4,5),(5,5)]
які можна візуалізувати як
xxO
Oxx
x x
x x
x O
O
o
де кожен O
представляє координату в обох L
і K
, і кожен x
представляє координату в, K
але не в L
. Інші результати також прийнятні, і "вусики" не повинні бути найкоротшими. Наприклад, це також прийнятне рішення:
xxOxx
Oxx x
x x
x x
x o x
O x
Ox
Правила
І вхід, і вихід мають бути списками, а не наборами чи іншими типами даних. Самі координати можуть бути списками або кортежами. При необхідності можна змінити порядок двох входів.
Ви можете написати або повну програму, або функцію. Виграє найменший байт, а стандартні лазівки заборонені.
Випробування
Ваша програма повинна працювати над цими списками для всіх застосовних значень N
.
[]
[(2,3)]
[(0,0),(1,0),(0,1),(1,1)]
[(0,0),(2,-1),(3,1),(0,4),(5,5)]
[(0,0),(1,0),(2,0),(3,0),(0,3),(1,3),(2,3),(3,3)]
[(0,0),(1,0),(2,0),(3,0),(0,3),(1,3),(2,3),(3,3),(0,1),(0,2),(3,1),(3,2),(8,1),(8,2),(-5,1),(-5,2)]
[(0,0),(20,0),(15,15),(-10,4),(-10,3),(0,-5),(7,6),(7,7),(8,8),(9,8),(10,-2),(-1,12),(-3,10)]
[(0,0),(1,0),(2,0),(3,0),(5,0),(6,0),(7,0),(0,9),(1,9),(2,9),(3,8),(4,9),(5,10),(6,10),(7,9),(3,3),(4,4),(5,5)]
Візуалізовано:
===
o
===
oo
oo
===
o
o
o
o
o
===
oooo
oooo
===
oooo
o o o o
o o o o
oooo
===
o
o
o
oo
o
o
o
o
o o
o
o
===
oo
ooo o o
o
o
o
o
oooo ooo