De Chief Historian is altijd aanwezig bij de grote lancering van de kerstslee, maar niemand heeft hem in maanden gezien! Het laatste dat iemand hoorde, was dat hij locaties bezocht die historisch belangrijk zijn voor de Noordpool. Een groep Senior Historians heeft jou gevraagd om hen te vergezellen bij het controleren van de plaatsen waarvan zij denken dat hij die waarschijnlijk heeft bezocht.
Als elke locatie is gecontroleerd, markeren ze deze op hun lijst met een ster. Ze denken dat de Chief Historian op een van de eerste vijftig plaatsen moeten zijn waar ze naar kijken, dus om Kerstmis te redden moet je ze helpen om vijftig sterren op hun lijst te krijgen voordat de Kerstman vertrekt op 25 december.
Verzamel sterren door puzzels op te lossen. Er worden twee puzzels op elke dag van de adventskalender beschikbaar gesteld. De tweede puzzel wordt ontgrendeld als je de eerste hebt opgelost. Elke puzzel levert één ster op. Veel succes!
Je bent nog niet eens vertrokken en de groep van Elvish Senior Historians heeft al een probleem: hun lijst met te controleren locaties is op dit moment leeg. Uiteindelijk besluit iemand dat de beste plek om als eerste te controleren het kantoor van de Chief Historian is.
Als ze het kantoor binnenstormen, bevestigt iedereen dat de Chief Historian inderdaad nergens te vinden is. In plaats daarvan ontdekken de Elfen een assortiment aantekeningen en lijsten met historisch belangrijke locaties! Dit lijkt de planning te zijn die de Chief Historian maakte voordat hij vertrok. Misschien kunnen deze aantekeningen gebruikt worden om te bepalen welke locaties gezocht moeten worden?
In het hele kantoor van de chef staan de historisch belangrijke locaties niet op naam, maar op een uniek nummer dat de locatie-ID wordt genoemd. Om er zeker van te zijn dat ze niets missen, splitsen de Historians zich op in twee groepen die elk het kantoor doorzoeken en proberen hun eigen complete lijst met locatie-ID’s samen te stellen.
Er is alleen één probleem: als je de twee lijsten tegenover elkaar houdt (je puzzelinvoer), wordt het al snel duidelijk dat de lijsten niet erg op elkaar lijken. Misschien kun je The Historians helpen om hun lijsten met elkaar in overeenstemming te brengen?
Dit zijn bijvoorbeeld hun lijsten:
3 4
4 3
2 5
1 3
3 9
3 3
Misschien zitten de lijsten er maar een klein beetje naast! Om daar achter te komen, koppel je de getallen en meet je hoe ver ze uit elkaar liggen. Koppel het kleinste getal van de linkerlijst aan het kleinste getal van de rechterlijst, dan het op-een-na-kleinste getal van links aan het op-een-na-kleinste getal van rechts, enzovoort.
Zoek binnen elk paar uit hoe ver de twee getallen uit elkaar liggen. Je moet alle afstanden bij elkaar optellen. Als je bijvoorbeeld een 3
uit de linker lijst koppelt aan een 7
uit de rechter lijst, dan is de onderlinge afstand 4
; als je een 9
koppelt aan een 3
, dan is de onderlinge afstand 6
.
Within each pair, figure out how far apart the two numbers are; you’ll need to add up all of those distances. For example, if you pair up a 3
from the left list with a 7
from the right list, the distance apart is 4
; if you pair up a 9
with a 3
, the distance apart is 6
.
In de voorbeeldlijst hierboven zijn dit de paren en afstanden:
Het kleinste getal in de linker lijst is 1
, en het kleinste getal in de rechter lijst is 3
. De onderlinge afstand is 2
.
Het op één na kleinste getal in de linker lijst is 2
, en het op één na kleinste getal in de rechter lijst is weer 3
. De onderlinge afstand is 1
.
Het op twee na kleinste getal in beide lijsten is 3
, dus de onderlinge afstand is 0
.
De volgende getallen die paren zijn 3
en 4
, een afstand van 1
.
De op vier na kleinste getallen in elke lijst zijn 3
en 5
, een afstand van 2
.
Tot slot is het grootste getal in de linker lijst 4
, terwijl het grootste getal in de rechter lijst 9
is; deze liggen op een afstand 5
van elkaar.
Om de totale afstand tussen de linker en de rechter lijst te vinden, tel je de afstanden op tussen alle paren die je hebt gevonden. In het bovenstaande voorbeeld is dit 2 + 1 + 0 + 1 + 2 + 5
, een totale afstand van 11
!
Je eigenlijke linker- en rechterlijst bevatten veel locatie-ID’s. Wat is de totale afstand tussen deze lijsten?
Schrijf een bash
shell script distance
waaraan de padnaam moet doorgegeven worden van een tekstbestand dat twee lijsten met locatie-ID’s naast elkaar bevat. Het script moet de totale afstand 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 totale afstand tussen de linkerlijst en de rechterlijst gelijk aan \(2 + 1 + 0 + 1 + 2 + 5 = 11\).
In deze interactieve sessie veronderstellen we dat het tekstbestand data.txt
2 in de huidige directory staat.
$ distance data.txt
11
Advent of Code 2024
Deze opgave is gebaseerd op de Advent of Code 20243 van Eric Wastl.