De ongelofelijke druk op deze diepte begint je onderzeeër aan te tasten. De onderzeeër beschikt over apparatuur voor polymerisatie1 die geschikte materialen zou kunnen produceren om de onderzeeër te versterken, en de nabijgelegen vulkanisch actieve grotten kunnen zeker voldoende chemicaliën aanleveren die je daarvoor nodig hebt.
De handleiding van de onderzeeër bevat instructies om de optimale polymeerformule te vinden. Het bevat een specifiek polymeersjabloon en een lijst met regels om een element tussen een paar opeenvolgende elementen in te voegen (de invoer van deze opgave). Je hoeft alleen maar uit te zoeken welk polymeer je bekomt door een paar keer na elkaar het proces uit te voeren om elementen tussen paren opeenvolgende elementen in te voegen.
Bijvoorbeeld:
NNCB
CH -> B
HH -> N
CB -> H
NH -> C
HB -> C
HC -> B
HN -> C
NN -> C
BH -> H
NC -> B
NB -> B
BN -> B
BB -> N
BC -> B
CC -> N
CN -> C
De eerste regel bevat het polymeersjabloon - dit is het startpunt van het proces.
De volgende sectie definieert de regels om elementen tussen paren opeenvolgende elementen in te voegen. Een regel zoals AB -> C
betekent dat wanneer het element A
onmiddellijk gevolgd wordt door het element B
, er een element C
moet tussen gevoegd worden. Deze invoegingen gebeuren allemaal tegelijkertijd.
Als we dus starten met het polymeersjabloon NNCB
, dan worden in de eerste stap elementen ingevoegd tussen de drie paren van opeenvolgende elementen:
NN
) komt overeen met de regel NN -> C
, waardoor het element C
wordt ingevoegd tussen de eerste N
en de tweede N
.NC
) komt overeen met de regel NC -> B
, waardoor het element B
wordt ingevoegd tussen de N
en de C
.CB
) komt overeen met de regel CB -> H
, waardoor het element H
wordt ingevoegd tussen de C
en de B
.Merk op dat opeenvolgende paren overlappen: het tweede element van het ene paar is het eerste element van het volgende paar. Omdat alle invoegingen tegelijkertijd gebeuren, worden de ingevoegde elementen pas in de volgende stap als onderdeel van een paar beschouwd.
Na de eerste stap van dit proces wordt het polymeer NCNBCHB
.
Dit zijn de resultaten van een paar stappen waarin de bovenstaande regels gebruikt worden:
Sjabloon: NNCB
Na stap 1: NCNBCHB
Na stap 2: NBCCNBBBCBHCB
Na stap 3: NBBBCNCCNBBNBNBBCHBHHBCHB
Na stap 4: NBBNBNBBCCNBCNCCNBBNBBNBBBNBBNBBCBHCBHHNHCBBCBHCB
Dit polymeer groeit snel. Na stap 5 heeft het lengte 97 en na stap 10 heeft het een lengte van 3073. Na stap 10 komt element B
1749 keer voor, element C
298 keer, element H
161 keer, en element N
865 keer. Als we de hoeveelheid nemen van het meest voorkomende element (B
, 1749) en daar de hoeveelheid van het minst voorkomende element (H
, 161) van aftrekken, dan krijgen we \(1749 - 161 = 1588\).
Voer op het polymeersjabloon 10 stappen uit waarin elementen ingevoegd worden tussen paren opeenvolgende elementen, en vind het meest en het minst voorkomende element in het resulterende polymeer. Wat krijg je als je de hoeveelheid van het meest voorkomende element neemt, en daar de hoeveelheid van het minst voorkomende element van aftrekt? Bepaal dit op de volgende manier:
polymerize
waaraan de padnaam (char*
) moet doorgegeven worden van een tekstbestand met een polymeersjabloon en een lijst met regels om elementen tussen paren opeenvolgende elementen in te voegen. De functie moet de hoeveelheid van het meest voorkomende element min de hoeveelheid van het minst voorkomende element (int
) teruggeven na het uitvoeren van 10 stappen waarin elementen ingevoegd worden tussen paren opeenvolgende elementen.In deze interactieve sessie gaan we ervan uit dat de tekstbestanden rules01.txt
2 en rules02.txt
3 zich in de huidige directory bevinden.
> polymerize("rules01.txt")
1588
> polymerize("rules02.txt")
2712