Contexte
Les moules visqueux sont impressionnants. Si vous les placez sur une surface avec des sources de nourriture, ils étaleront leurs vrilles pour trouver la nourriture, après quoi ils formeront un réseau de connexions entre les sources. Dans ce défi, vous simulerez un moule visqueux à la recherche de nourriture. De plus, ce moule particulier s'arrêtera une fois qu'il sera suffisamment trouvé.
Contribution
Vos entrées doivent être une liste L
de coordonnées entières 2D dans le format natif de votre langue, et un entier non négatif N
. La liste L
est garantie sans doublon, mais elle ne peut pas être triée. L'entrée N
est comprise entre 0 et la longueur de L
, inclus.
La liste L
représente un ensemble de coordonnées pour les sources de nourriture. Par exemple, la liste
[(0,0),(2,-1),(3,1),(0,4),(5,5)]
pourrait être interprété visuellement comme
o
o
o
o
o
Production
Votre sortie est une autre liste sans doublon K
de coordonnées entières 2D sur le même format que l'entrée. Il représente le réseau formé par la moisissure visqueuse et doit satisfaire aux conditions suivantes:
- L'intersection de
L
etK
a exactement la tailleN
. - L'ensemble
K
est connecté en tant que sous-ensemble de la grille entière (via des contiguïtés orthogonales ou diagonales). - Si une coordonnée de
K
est supprimée, elle ne remplit plus les deux premières conditions.
Notez que si N = 0
, la sortie doit être une liste vide.
Un exemple de sortie acceptable pour la liste ci-dessus L
et N = 4
serait
[(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)]
qui peut être visualisé comme
xxO
Oxx
x x
x x
x O
O
o
où chacun O
représente une coordonnée dans les deux L
et K
, et chacun x
représente une coordonnée dans K
mais pas dans L
. D'autres sorties sont également acceptables, et les "vrilles" ne doivent pas être les plus courtes possible. Par exemple, c'est également une solution acceptable:
xxOxx
Oxx x
x x
x x
x o x
O x
Ox
Règles
L'entrée et la sortie doivent être des listes et non des ensembles ou d'autres types de données. Les coordonnées elles-mêmes peuvent être des listes ou des tuples. Vous pouvez modifier l'ordre des deux entrées si nécessaire.
Vous pouvez écrire soit un programme complet soit une fonction. Le nombre d'octets le plus bas gagne et les failles standard sont interdites.
Cas de test
Votre programme doit fonctionner sur ces listes pour toutes les valeurs applicables 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)]
Visualisé:
===
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