aoc::year2024

Module day15

Source
Expand description

ยงWarehouse Woes

Festive version of Sokoban.

Part one loops in a straight line looking for the next space . or wall #. No bounds checks are needed as the maze is enclosed. If a space is found then all items are pushed one block in that direction.

Part two re-uses the part one logic for horizontal moves. Vertical moves use a breadth first search to identify the cascading boxes that need to be moved. Boxes are added strictly left to right to make checking for previously added boxes easier. To prevent adding a box twice we check that the item at index - 2 is different. For example:

    @          Indices:
    []         23
   [][]       4567
    []         89

When processing 6 we try to add 8, however 8 and 9 have already been added when processing 4 so we skip.

If any next space is a wall then we cancel the entire move and return right away. Otherwise all boxes are moved in the reverse order that they were found by the search.

Functionsยง

Type Aliasesยง