Sprint 3 · Challenge — Routeplanner  ·  Deel 2 van 3

Als conciërge, wil ik dat de drone zelf een inspectieronde door het lokaal vliegt en vanzelf terugkomt op zijn startpunt, zodat ik zonder vliegervaring de ruimte kan laten controleren.

Deel 2: Route valideren

Een route die halverwege tegen het plafond botst of de batterij leegtrekt, mag nooit beginnen. In deel 2 controleert je script de hele route vóórdat de drone opstijgt.

±30 minguards · lijstenlopende tellers
Vervolg op deel 1. Je bouwt verder in inspection_route.py. Er is geen theorie: gebruik wat je weet uit sprint 1–3. Open een hint pas als je echt vastzit.

Doel

Voordat de drone opstijgt, controleert het script de complete route aan de regels van de conciërge. Anders dan in sprint 2 stopt het script niet bij de eerste fout: de piloot wil in één keer álle fouten zien, elk met het nummer van het waypoint, zodat hij ze allemaal tegelijk kan verbeteren. Pas als er geen enkele fout is, mag de route door naar deel 3.

De regels van de conciërge

RegelWanneer is het goed?
RichtingAlleen forward, back, left, right, up of down.
AfstandPer waypoint van 20 tot en met 200 cm. Korter kan de drone niet precies; langer past niet in het lokaal.
Totale routeAlle afstanden van de heenweg samen zijn hooguit 800 cm.
HoogteNa het opstijgen hangt de drone op 80 cm. Tijdens de hele route blijft hij tussen 30 en 200 cm (beide grenzen mogen nog).
BatterijVoor elke 100 cm vliegen — heen én terug samen — reken je 2% batterij. Daarbovenop moet er minstens 25% over blijven.
Let op de hoogteregel. Die gaat niet over één waypoint, maar over waar de drone op dat moment is. Een up 100 is prima als de drone laag hangt, en fout als hij al hoog zit. Je moet dus onthouden hoe hoog de drone na elk waypoint is.

Testroutes

Zet deze routes in je code klaar (twee lijsten per route) en controleer ze. Voor de batterij vervang je de meting tijdelijk door een vast getal. Bepaal eerst op papier welke fouten er in zitten; er staat bewust geen verwachte uitvoer bij.

RouteWaypointsBatterij
Aforward 150 · left 100 · up 50 · forward 100 · right 100 · down 5080%
Bforward 250 · spin 90 · up 150 · back 10080%
Croute A40%
Ddown 50 · forward 200 · forward 200 · forward 200 · forward 200 · left 2090%

Bedenk er daarna zelf twee bij: één route die precies op alle grenzen zit en tóch goed is, en één met een fout die geen van de routes hierboven heeft.

Hints

Hoe verzamel je fouten zonder te stoppen?
Een lege lijst aan het begin, en bij elke fout een melding erin. Waar komt dan die ene guard met exit(), en waarop controleert hij?
Hoe weet je bij een fout om welk waypoint het gaat?
Loop je met enumerate() door de route, dan heb je bij elk waypoint zijn plek. Begint jouw nummering bij 0 of bij 1 — en wat verwacht de piloot?
Welke richtingen tellen mee voor de hoogte?
Alleen up en down. Welke waarde heeft je hoogte-teller vóór het eerste waypoint? En controleer je de hoogte vóór of ná het optellen?
Route D heeft een fout die niet bij één waypoint hoort. Welke?
Sommige regels gaan over de hele route. Kun je die al controleren terwijl de lus nog loopt, of pas als hij klaar is?
Hoeveel batterij heeft route A nodig?
Heen en terug is twee keer de routelengte. Reken het eerst met de hand uit. Klopt je code met je eigen berekening?
Een onbekende richting: moet je die wél of niet meetellen voor de totale afstand?
Er is geen fout antwoord, maar je moet een keuze maken én uitleggen. Schrijf je keuze op in challenge.md.

Klaar als

  • Alle regels uit de tabel worden gecontroleerd, met de grenzen zoals ze in de tabel staan.
  • Het script meldt álle fouten tegelijk, elk met het nummer van het waypoint (of "hele route" als dat van toepassing is).
  • Pas na de controle stopt één guard het script als er minstens één fout is.
  • Route A komt door; B, C en D niet, en voor elke fout die jij op papier had gevonden staat een melding.
  • Je twee eigen routes staan met je verwachting én de werkelijke uitkomst in challenge.md.