Je vraagt de onderzeeër om de beste route uit de diepzeegrot te bepalen, maar zijn antwoord luidt:

Syntax error in navigation subsystem on line: all of them

Allemaal?! De schade is erger dan je dacht. Je opent de code van het navigatie-subsysteem (de invoer van deze opgave).

De syntaxis van het navigatie-subsysteem bestaat uit meerdere regels die chunks bevatten. Elk regel bestaat uit één of meer blokken, en blokken bevatten nul of meer andere blokken. Aangrenzende blokken worden niet van elkaar gescheiden door een scheidingsteken: als een blok stop dan kan er daarna onmiddellijk een nieuw blok beginnen. Elk blok moet openen en sluiten met één van de vier geldige paren van overeenkomstige karakters:

Op die manier is () een geldig blok dat geen andere blokken bevat, net als []. Complexere maar eveneens geldige blokken zijn onder andere ([]), {()()()}, <([{}])>, [<>({}){}[([])<>]], en zelfs (((((((((()))))))))).

Sommige regels zijn onvolledig, maar andere zijn beschadigd. Zoek eerst de beschadigde regels en gooi ze weg.

Een beschadigde regel is er een waar een blok sluit met het verkeerde karakter - dat wil zeggen, waarbij de karakters die het blok openen en sluiten niet één van de vier geldige paren van overeenkomstige karakters vormen zoals we die hierboven gegeven hebben.

Voorbeelden van beschadigde blokken zijn (], {()()()>, (((()))}, en <([]){()}[{}]). Zo’n blok kan overal op een regel voorkomen, en de aanwezigheid ervan zorgt ervoor dat we de hele regel als beschadigd beschouwen.

Neem bijvoorbeeld het volgende navigatie-subsysteem:

[({(<(())[]>[[{[]{<()<>>
[(()[<>])]({[<{<<[]>>(
{([(<{}[<>[]}>{[]{[(<()>
(((({<>}<{<{<>}{[]{[]{}
[[<[([]))<([[{}[[()]]]
[{[{({}]{}}([{[{{{}}([]
{<[[]]>}<{[{[{[]{()[[[]
[<(<(<(<{}))><([]([]()
<{([([[(<>()){}]>(<<{{
<{([{{}}[<[[[<>{}]]]>[]]

Sommige van die regels zijn niet beschadigd, alleen maar onvolledig. Je kunt de onvolledige regels voorlopig negeren. De overige vijf regels zijn beschadigd.

Stop bij het eerst verkeerd sluitend karakter op elke beschadigde regel.

Wist je dat syntaxis-checkers eigenlijk wedstrijden houden om te zien wie de hoogste score kan halen voor het opsporen van syntaxisfouten in een bestand? Het is echt waar! Om de score van de syntaxisfout voor een beschadigde regel te berekenen, bepaal je het eerste verkeerd sluitend karakter op de regel en zoekt de bijhorende score op in de volgende tabel:

In bovenstaand voorbeeld werd twee keer een verkeerd ) gevonden (\(2 \times 3 = 6\) punten), één keer een verkeerd ] (57 punten), één keer een verkeerde } (1197 punten), en één keer een verkeerd > (25137 punten). De totale score voor de syntaxisfouten in dit bestand is dus \(6 + 57 + 1197 + 25137 = 26397\) punten!

Opgave

Zoek het eerste verkeerd sluitende karakter op elke beschadigde regel van het navigatie-subsysteem. Wat is de totale score voor al die syntaxisfouten? Bepaal dit op de volgende manier:

Voorbeeld

In deze interactieve sessie gaan we ervan uit dat de tekstbestanden subsystem01.txt1 en subsystem02.txt`2 zich in de huidige directory bevinden.

>>> score('subsystem01.txt')
26397
>>> score('subsystem02.txt')
389589

Epiloog

We vroegen de Elfen om wat tips & tricks waarmee deze opgave kan opgelost worden, maar ze stuurden alleen deze GIF terug.