De onderzeeër maakt wat vreemde en krakende geluiden, en dus vraag je hem om een diagnostisch rapport op te maken, voor het geval dat.
Het diagnostisch rapport (de invoer van deze opgave) bestaat uit een reeks binaire getallen die, als je ze correct decodeert, veel nuttige dingen kunnen vertellen over de toestand van de onderzeeër. De eerste parameter die moet gecontroleerd worden is het energieverbruik.
Je moet de binaire getallen in het diagnostisch rapport gebruiken om twee nieuwe binaire getallen te bepalen (die we de gamma-status en de epsilon-status noemen). Het energieverbruik wordt berekend door de gamma-status en de epsilon-status met elkaar te vermenigvuldigen.
Elk bit van de gamma-status wordt bepaald als het meest voorkomende bit op de corresponderende positie van alle getallen in het diagnostisch rapport. Als 0
en 1
even vaak voorkomen in een bepaalde positie van de getallen in het diagnostisch rapport, zet dan een 1
op die positie van de gamma-status. Neem bijvoorbeeld dit diagnostisch rapport:
00100
11110
10110
10111
10101
01111
00111
11100
10000
11001
00010
01010
Als we alleen maar naar het eerste bit van elk getal kijken, dan zjn er vijf bits gelijk aan 0
en zeven bits gelijk aan 1
. Omdat bit 1
het meest voorkomt, is het eerste bit van de gamma-status gelijk aan 1
.
Het meest voorkomende tweede bit van de getallen in het diagnostisch rapport is 0
, dus is het tweede bit van de gamma-status gelijk aan 0
.
De meest voorkomende waarden van het derde, vierde en vijfde bit zijn respectievelijk 1
, 1
, en 0
, waardoor de laatste drie bits van de gamma-status gelijk zijn aan 110
.
De gamma-status is dus het binaire getal 10110
, of 22
als decimaal getal.
De epsilon-status wordt op een vergelijkbare manier berekend. In plaats van het meest voorkomende bit te gebruiken, wordt de minst voorkomende bit op elke positie gebruikt. Als 0
en 1
even vaak voorkomen in een bepaalde positie van de getallen in het diagnostisch rapport, zet dan een 0
op die positie van de epsilon-status. De epsilon-status is dus 01001
, of 9
als decimaal getal. Vermenigvuldiging van de gamma-status (22
) met de epsilon-status (9
) levert dus een energieverbruik van 198
op.
Gebruik de binaire getallen uit het diagnostisch rapport om de gamma-status en de epsilon-status te berekenen, en vermenigvuldig ze vervolgens met elkaar. Wat is het energieverbruik van de onderzeeër? (Zorg ervoor dat je het resultaat als een decimaal getal teruggeeft, niet als een binair getal.) Bepaal dit op de volgende manier:
powerConsumption
waaraan de padnaam (string
) moet doorgegeven worden van een tekstbestand dat een diagnostisch rapport bevat. De functie moet het product (number
) teruggeven van de gamma-status en de epsilon-status die berekend worden op basis van de binaire getallen in het diagnostisch rapport.In deze interactieve sessie gaan we ervan uit dat de tekstbestanden report01.txt
1 en report02.txt
2 zich in de huidige directory bevinden.
> powerConsumption("report01.txt")
198
> powerConsumption("report02.txt")
1540244