sfondo
Gli stampi di melma sono fantastici. Se li metti su una superficie con fonti di cibo, essi diffonderanno i loro viticci per trovare il cibo, dopo di che formeranno una rete di connessioni tra le fonti. In questa sfida, dovrai simulare uno stampo di melma in cerca di cibo. Inoltre, questo particolare stampo si fermerà una volta trovato abbastanza.
Ingresso
I tuoi input devono essere un elenco L
di coordinate intere 2D nel formato nativo della tua lingua e un numero intero non negativo N
. L'elenco L
è garantito per essere privo di duplicati, ma potrebbe non essere ordinato. L'input N
è compreso tra 0 e la lunghezza di L
, incluso.
L'elenco L
rappresenta un insieme di coordinate per le fonti alimentari. Ad esempio, l'elenco
[(0,0),(2,-1),(3,1),(0,4),(5,5)]
potrebbe essere interpretato visivamente come
o
o
o
o
o
Produzione
L'output è un altro elenco K
di coordinate intere 2D senza duplicati nello stesso formato dell'input. Rappresenta la rete formata dallo stampo di melma e deve soddisfare le seguenti condizioni:
- L'intersezione di
L
eK
ha dimensioni esatteN
. - L'insieme
K
è collegato come sottoinsieme della griglia intera (tramite adiacenze ortogonali o diagonali). - Se
K
viene rimossa qualsiasi coordinata di , non soddisfa più le prime due condizioni.
Si noti che se N = 0
, l'output deve essere un elenco vuoto.
Un esempio di output accettabile per l'elenco sopra L
e N = 4
sarebbe
[(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)]
che può essere visualizzato come
xxO
Oxx
x x
x x
x O
O
o
dove ognuno O
rappresenta una coordinata in entrambi L
e K
, e ciascuno x
rappresenta una coordinata in K
ma non in L
. Sono accettabili anche altri output e i "viticci" non devono essere i più brevi possibili. Ad esempio, questa è anche una soluzione accettabile:
xxOxx
Oxx x
x x
x x
x o x
O x
Ox
Regole
Sia l'input che l'output devono essere elenchi, non set o altri tipi di dati. Le coordinate stesse possono essere liste o tuple. È possibile modificare l'ordine dei due ingressi se necessario.
È possibile scrivere un programma completo o una funzione. Vince il conteggio di byte più basso e non sono consentite scappatoie standard.
Casi test
Il tuo programma dovrebbe funzionare su questi elenchi per tutti i valori applicabili di 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)]
visualizzati:
===
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