De derde dag bracht gelijk wat meer uitdaging dit jaar, al was ik voorbereid met wat handige code die ik vooraf heb geschreven voor dit soort opdrachten.

Dat was voor mij dan ook de reden om deze in PHP aan te pakken, omdat ik veel van dit soort code ooit al eens voorbereid heb in PHP.

Advent of Code 2023 dag 3: de opdracht Link to heading

We staan bij een waterval, en moeten zorgen dat de gondel lift (denk aan ski-liftjes) weer gaat werken.

Eén van de onderdelen van de motor ontbreekt, en het is aan ons om te vinden welk onderdeel dat is.

Hiervoor krijgen we een schema als dit te zien:

467..114..
...*......
..35..633.
......#...
617*......
.....+.58.
..592.....
......755.
...$.*....
.664.598..

Alle getallen die een “symbool” aanraken (alles behalve een “.” of een ander cijfer) duiden een onderdeel aan.

De som van al die getallen is het antwoord voor deze puzzel. (Voor bovenstaande dus 4361, omdat 114 en 58 de enige twee zijn die niets aanraken.)

Voorbereiding: eerder geschreven code hergebruiken Link to heading

Het grote voordeel voor deze opdracht was dat ik al heel veel utility code eerder geschreven had, voor eerdere edities.

Elk jaar zijn er meerdere van dit type opdrachten, dus zorgen dat ik het kan omzetten naar een 2D array, en die dan weer laten zien als een matrix zijn sowieso handig.

Maar ook een uitgebreide adjacentInArray-functie kwam hier van pas: deze laat me eenvoudig opvragen wie de “buren” zijn van een item.

Een belangrijke regel hier werd dan ook adjacentInArray($lines, $row_idx, $col_idx, adjacentInArray::ALL_DIRECTIONS, $wraparound = false);, wat in alle richtingen kijkt wie de buren zijn.

Het presenteert alleen één nadeel voor deze blog: zonder de library code is het allemaal niet zo logisch wat ik gedaan heb. 😉

Al die code ook delen wordt wat veel om hier zo te doen zonder documentatie, dus ik denk dat ik op dag drie al moet zeggen: ik vul deze later nog even aan…