Antecedentes
Los moldes de limo son increíbles. Si los coloca en una superficie con fuentes de alimento, extenderán sus zarcillos para encontrar el alimento, luego de lo cual formarán una red de conexiones entre las fuentes. En este desafío, simularás un molde de limo buscando comida. Además, este molde particular se detendrá una vez que se encuentre lo suficiente.
Entrada
Sus entradas serán una lista L
de coordenadas enteras 2D en el formato nativo de su idioma, y un número entero no negativo N
. Se L
garantiza que la lista no tendrá duplicados, pero es posible que no se ordene. La entrada N
está entre 0 y la longitud de L
, inclusive.
La lista L
representa un conjunto de coordenadas para las fuentes de alimentos. Por ejemplo, la lista
[(0,0),(2,-1),(3,1),(0,4),(5,5)]
podría interpretarse visualmente como
o
o
o
o
o
Salida
Su salida es otra lista libre de duplicados K
de coordenadas enteras 2D en el mismo formato que la entrada. Representa la red formada por el molde de limo y debe cumplir las siguientes condiciones:
- La intersección de
L
yK
tiene tamaño exactamenteN
. - El conjunto
K
está conectado como un subconjunto de la cuadrícula entera (a través de adyacencias ortogonales o diagonales). - Si
K
se elimina cualquier coordenada de , ya no cumple las dos primeras condiciones.
Tenga en cuenta que si N = 0
, la salida debe ser una lista vacía.
Un ejemplo de una salida aceptable para la lista anterior L
y N = 4
sería
[(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)]
que se puede visualizar como
xxO
Oxx
x x
x x
x O
O
o
donde cada uno O
representa una coordenada en ambos L
y K
, y cada uno x
representa una coordenada en K
pero no en L
. Otros resultados también son aceptables, y los "zarcillos" no tienen que ser lo más cortos posible. Por ejemplo, esta también es una solución aceptable:
xxOxx
Oxx x
x x
x x
x o x
O x
Ox
Reglas
Tanto la entrada como la salida serán listas, no conjuntos u otros tipos de datos. Las coordenadas mismas pueden ser listas o tuplas. Puede cambiar el orden de las dos entradas si es necesario.
Puede escribir un programa completo o una función. El conteo de bytes más bajo gana, y las lagunas estándar no se permiten.
Casos de prueba
Su programa debería funcionar en estas listas para todos los valores aplicables de 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)]
Visualizado:
===
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