Majitel má na pozemku malý lesík, který chce oplotit tak, že plot přidělá přímo na některé ze stromů v lesíku. Plot by měl být co nejkratší, ale všechny stromy by měly být uvnitř oplocení (nebo být součástí plotu). Na které stromy plot přidělá?
Prerekvizity | Trochu lineární algebry |
---|---|
Náročnost přemýšlení | Střední |
Náročnost programování | Střední (seznamy, n-tice, cykly, podmínky, …) |
V modulu solver.py
vytvořte funkci build_fence()
, která na základě seznamu souřadnic stromů vrátí indexy těch stromů, na které má být plot přidělán, a to v pořadí, v jakém by se měl plot stavět. Soubor solver.py
pak odešlete do odevzdávacího systému.
Zárodek takové funkce může vypadat např. takto:
def build_fence(trees): fence = list(range(len(trees))) return fence
Tato funkce ale nepracuje správně, vrací indexy všech stromů, a takový plot skoro jistě nesplňuje podmínky uvedené níže. Na vás je upravit funkci tak, aby fungovala podle požadavků.
Funkce build_fence()
by měla mít následující vstupy a výstupy:
Vstup | trees | N-tice (tuple) míst, kde se nacházejí v lesíku stromy. Každý strom je reprezentován dvojicí souřadnic (x,y). |
---|---|---|
Výstup | fence | Plán stavby plotu, tj. seznam indexů stromů, na které má být plot přidělaný. |
Doplňující informace:
build_fence()
by měla vrátit plán stavby plotu, tj. indexy stromů v takovém pořadí, v jakém je možné plot okolo lesa postavit. Záleží tedy na pořadí indexů, ale nezáleží na tom, u kterého krajního stromu začneme a kterým směrem kolem lesa se vydáme.
Na vašem řešení bude provedena série testů na cca 20 různých lesících.
Nebude-li některá z těchto podmínek splněna, hodnocení na zbývajících testovacích lesích nebude provedeno.
Získaný počet bodů se skládá