Expand description
This is my solution for Advent of Code - Day 8: Resonant Collinearity
parse_input
converts the input file to an AntennaMap
which stores a HashMap
of frequency to list of
antenna coordinates, as well as the upper bounds of the grid.
count_antinodes_for_map
solves both parts, breaking the work down into calling
find_antinodes_for_frequency
for each frequency in the map. This in turn uses find_antinodes_for_pair
on
each combination of antenna in the frequency group.
sequence_from_antenna
extrapolates the line defined by a pair of antenna, in one direction and
antinode_pair_sequence_modifier
and resonant_harmonies_sequence_modifier
handle selecting the right
node(s) for part 1 and 2 respectively. find_antinodes_for_pair
uses sequence_from_antenna
starting from
each node in the pair.
StructsΒ§
- Antenna
Map πRepresent the puzzle grid by its upper bounds and the position of antenna grouped by frequency
FunctionsΒ§
- Part 1 - Select only the first node beyond the origin
- For all frequencies un the map, find all the antinodes, then count unique coordinates.
- Combine all pairs of antenna in a frequency and return the unique antinodes
- Fine the antinodes by determining the coordinate delta between two antinodes, extrapolating the line from both ends, applying the SequenceModifier relevant to the part being solved.
- parse_
input πConverts the text input into the internal representation - Part 2 - Select all nodes including the origin - essentially the identity function
- The entry point for running the solutions with the βrealβ puzzle input.
- Extrapolate from a point along a delta whilst itβs within the bounds of the antenna map
Type AliasesΒ§
- Coordinate πA coordinate on the grid
- Sequence
Modifier πThis differentiates the two parts by allowing outside control over which nodes are selected when extrapolating the line between two antenna