Op basis van je berekeningen blijkt de geplande koers geen steek te houden. Je vindt de handleiding van de onderzeeër en ontdekt dat het proces eigenlijk iets ingewikkelder is.
Naast de horizontale positie en de diepte, moet je ook een derde waarde richting bijhouden, die ook begint bij 0
. De commando’s werken ook helemaal anders dan wat je eerst dacht:
down X
verhoogt je richting met X
eenheden.up X
verlaagt je richting met X
eenheden.forward X
doet twee dingen:
X
eenheden.X
.Merk opnieuw op dat aangezien je je in een onderzeeër bevindt, down
en up
het omgekeerde doen van wat je zou verwachten: “down” betekent in de positieve richting richten.
Het voorgaande voorbeeld doet nu het volgende:
forward 5
telt 5
op bij je horizontale positie, die in totaal 5
wordt. Omdat je richting 0
is, verandert je diepte niet.down 5
telt 5
op bij je richting, die een waarde van 5
krijgt.forward 8
telt 8
op bij je horizontale positie, die in totaal 13
wordt. Omdat je richting 5
is, verhoogt je diepte met \(8 \times 5=40\).up 3
vermindert je richting met 3
, waardoor die de waarde 2
krijgt.down 8
telt 8
op bij je richting, die een waarde van 10
krijgt.forward 2
telt 2
op bij je horizontale positie, die in totaal 15
wordt. Omdat je richting 10
is, verhoogt je diepte met \(2 \times 10=20\) tot een totaal van 60
.Na het volgen van de nieuwe instructies, zou je een horizontale positie van 15
en een diepte van 60
hebben. (Het product van deze waarden is 900
.)
Gebruik deze nieuwe interpretatie van de commando’s om de horizontale positie en de diepte van de onderzeeër te berekenen die je zou hebben na het volgen van de geplande koers. Wat krijg je als je je finale horizontale positie vermenigvuldigt met je finale diepte? Bepaal dit op de volgende manier:
dive
waaraan de padnaam (String
) moet doorgegeven worden van een tekstbestand met een reeks commando’s voor de onderzeeër. De functie moet het product (Int
) teruggeven van de finale horizontale positie en de finale diepte.In deze interactieve sessie gaan we ervan uit dat de tekstbestanden commands01.txt
1 en commands02.txt
2 zich in de huidige directory bevinden.
> dive ("commands01.txt")
900 :: Int
> dive ("commands02.txt")
2044620088 :: Int