Je analyse bevestigde alleen wat iedereen al vreesde: de twee lijsten met locatie-ID’s zijn inderdaad heel verschillend.
Of toch niet?
The Historians zijn het er niet over eens welke groep de fouten heeft gemaakt of hoe ze de meeste schrijfsels van de Chief moeten lezen, maar in de commotie valt je een interessant detail op: een hoop locatie-ID’s komen in beide lijsten voor! Misschien zijn de andere nummers helemaal geen locatie-ID’s, maar verkeerd geïnterpreteerd handschrift.
Deze keer moet je precies uitzoeken hoe vaak elk getal uit de linker lijst voorkomt in de rechter lijst. Bereken een totale gelijkenisscore door elk getal in de linker lijst op te tellen en te vermenigvuldigen met het aantal keren dat dat getal in de rechter lijst voorkomt.
Hier zijn weer dezelfde voorbeeldlijsten:
3 4
4 3
2 5
1 3
3 9
3 3
Voor deze voorbeeldlijsten volgt hier het proces voor het vinden van de similariteitsscore:
Het eerste getal in de linker lijst is 3
. Het komt drie keer voor in de rechter lijst, dus de gelijkenisscore stijgt met 3 * 3 = 9
.
Het tweede getal in de linker lijst is 4
. Het komt één keer voor in de rechterlijst, dus de gelijkenisscore stijgt met 4 * 1 = 4
.
Het derde getal in de linker lijst is 2
. Het komt niet voor in de rechter lijst, dus de gelijkenisscore stijgt niet (2 * 0 = 0
).
Het vierde getal, 1
, komt ook niet voor in de rechterlijst.
Het vijfde getal, 3
, komt drie keer voor in de rechter lijst; de similariteitsscore stijgt met 9
.
Het laatste getal, 3
, komt drie keer voor in de rechterlijst; de similariteitsscore neemt weer toe met 9
.
Dus voor deze voorbeeldlijsten is de similariteitsscore aan het einde van dit proces 31
(9 + 4 + 0 + 0 + 9 + 9
).
Kijk nog eens naar je linker- en rechterlijst. Wat is hun gelijkenisscore?
Schrijf een bash
shell script similarity
waaraan de padnaam moet doorgegeven worden van een tekstbestand dat twee lijsten met locatie-ID’s naast elkaar bevat. Het script moet de gelijkenisscore tussen de linker en rechter lijst uitschrijven naar stdout
. Als we bijvoorbeeld dit tekstbestand nemen (data.txt
1)
3 4
4 3
2 5
1 3
3 9
3 3
dan is de gelijkenisscore tussen de linkerlijst en de rechterlijst gelijk aan \(9 + 4 + 0 + 0 + 9 + 9 = 31\).
In deze interactieve sessie veronderstellen we dat het tekstbestand data.txt
2 in de huidige directory staat.
$ similarity data.txt
31
Advent of Code 2024
Deze opgave is gebaseerd op de Advent of Code 20243 van Eric Wastl.