Jouw veerboot is al een aardig stukje opgeschoten richting het eiland, als de storm sneller komt opzetten dan iemand verwacht had. De veerboot moet ontwijkende manoeuvres uitvoeren.
Helaas lijkt de navigatiecomputer van het schip niet goed te werken. In plaats van een directe route naar veiliger oorden aan te geven, levert ze uiterst omslachtige instructies op. Als de kapitein de PA1 om te vragen of iemand kan helpen, meld je je snel aan als vrijwilliger.
De navigatie-instructies (jouw invoer voor deze opgave) bestaan uit een reeks acties van één hoofdletter, gecombineerd met natuurlijke getallen als invoerwaarden. Nadat je er een paar minuten naar gestaard hebt, kom je er achter wat ze waarschijnlijk betekenen:
N
betekent: ga het gegeven aantal stappen naar het noorden.S
betekent: ga het gegeven aantal stappen naar het zuiden.E
betekent: ga het gegeven aantal stappen naar het oosten.W
betekent: ga het gegeven aantal stappen naar het westen.L
betekent: draai het gegeven aantal graden naar links.R
betekent: draai het gegeven aantal graden naar rechts.F
betekent: ga het gegeven aantal stappen vooruit in de richting waarin het schip nu aan het varen is.Het schip begint met naar het oosten te varen. Alleen de acties L
en R
veranderen de richting van het schip. (Dat betekent, als het schip naar het oosten gericht is en de volgende instructie is N10
, dan zou het schip zich 10 stappen naar het noorden verplaatsen, maar nog steeds naar het oosten blijven varen als de volgende actie F
was.)
Bijvoorbeeld:
F10
N3
F7
R90
F11
Deze instructies zouden als volgt uitgevoerd worden:
F10
zou het schip 10 stappen naar het oosten verplaatsen (omdat het schip bij aanvang naar het oosten gericht is) naar 10 oost en 0 noord.N3
zou het schip 3 stappen naar het noorden verplaatsen, naar 10 oost en 3 noord.F7
zou het schip 7 stappen naar het oosten verplaatsen (omdat het schip nog altijd naar het oosten gericht is), naar 17 oost en 3 noord.R90
zou het schip 90 graden naar rechts draaien, zodat het naar het zuiden gericht is; het blijft op 17 oost en 3 noord.F11
zou het schip 11 stappen naar het zuiden verplaatsen, naar 17 oost en 8 zuid.Op het einde van deze instructies, bevindt het schip zich op Manhattan-afstand2 (som van absolute waarden van oost/west-positie en noord/zuid-positie) 17 + 8 =
25
van zijn beginpositie.
Zoek uit waar de navigatie-instructies naartoe leiden. Wat is de Manhattan-afstand tussen die positie en de beginpositie van het schip? Hiervoor ga je als volgt te werk:
distance
waaraan de padnaam (char*
) moet doorgegeven worden van een tekstbestand met navigatie-instructies. De functie moet de Manhattan-afstand (int
) teruggeven tussen de positie waar de navigatie-instructies naartoe leiden en de beginpositie van het schip.In deze interactieve sessie gaan we ervan uit dat het tekstbestand instructions.txt
3 zich in de huidige directory bevindt.
> distance("instructions.txt")
25