Deze grotten blijken lavatunnels1 te zijn. Delen ervan zijn zelfs nog vulkanisch actief. Kleine hydrothermale bronnen spuwen rook uit in de grotten die langzaam bezinkt als regen.
Als je kunt modelleren hoe de rook door de grotten stroomt, dan kun je het misschien vermijden en ben je veel veiliger. De onderzeeër genereert voor jou een hoogtekaart van de bodem van de nabijgelegen grotten (de invoer van deze opgave).
Rook stroomt naar het diepste punt van het gebied waarin het zich bevindt. Neem bijvoorbeeld de volgende hoogtekaart:
2199943210
3987894921
9856789892
8767896789
9899965678
Elk getal correspondeert met de hoogte van een bepaalde locatie, waarbij 9
het hoogste is en 0
het diepste die een locatie kan zijn.
Je eerste doel is om de dieptepunten te vinden - de locaties die lager zijn dan alle aangrenzende locaties. De meeste locaties hebben vier aangrenzende locaties (omhoog, omlaag, links en rechts). Locaties aan de rand of in de hoeken van de kaart hebben respectievelijk drie of twee aangrenzende locaties. (Diagonale locaties tellen niet als aangrenzend.)
In het voorgaande voorbeeld, zijn er vier dieptepunten, die aangeduid zijn: twee ervan bevinden zich op de eerste rij (een 1
en een 0
), één op de derde rij (een 5
), en één op de onderste rij (ook een 5
). Alle andere locaties op de hoogtekaart hebben een lagere aangrenzende locatie, en zijn dus geen dieptepunten.
Het risiconiveau van een dieptepunt is 1 plus zijn hoogte. In het voorgaande voorbeeld zijn de risiconiveaus van de dieptepunten 2
, 1
, 6
, en 6
. De som van de risiconiveaus van alle dieptepunten op de hoogtekaart is dus 15
.
Vind alle dieptepunten op een hoogtekaart.Wat is de som van de risiconiveaus van alle dieptepunten op de hoogtekaart? Bepaal dit op de volgende manier:
basin
waaraan de padnaam (char*
) moet doorgegeven worden van een tekstbestand met een hoogtekaart van de bodem van de nabijgelegen grotten. De functie moet de som (int
) van de risiconiveaus van alle dieptepunten op de hoogtekaart teruggeven.In deze interactieve sessie gaan we ervan uit dat de tekstbestanden caves01.txt
2 en caves02.txt`3 zich in de huidige directory bevinden.
> basins("displays01.txt")
15
> basins("displays02.txt")
522
@miladamlli4 tekende een hoogtekaart in Livebook5 met VegaLite6.