Day 8: Resonant Collinearity
Megathread guidelines
- Keep top level comments as only solutions, if you want to say something other than a solution put it in a new post. (replies to comments can be whatever)
- You can send code in code blocks by using three backticks, the code, and then three backticks or use something such as https://topaz.github.io/paste/ if you prefer sending it through a URL
FAQ
- What is this?: Here is a post with a large amount of details: https://programming.dev/post/6637268
- Where do I participate?: https://adventofcode.com/
- Is there a leaderboard for the community?: We have a programming.dev leaderboard with the info on how to join in this post: https://programming.dev/post/6631465
C#
public class Day08 : Solver { private ImmutableArray<string> data; private int width, height; public void Presolve(string input) { data = input.Trim().Split("\n").ToImmutableArray(); width = data[0].Length; height = data.Length; } public string SolveFirst() { Dictionary<char, List<(int, int)>> antennae = []; HashSet<(int, int)> antinodes = []; for (int i = 0; i < width; i++) { for (int j = 0; j < height; j++) { if ('.' == data[j][i]) continue; antennae.TryAdd(data[j][i], []); foreach (var (oi, oj) in antennae[data[j][i]]) { int di = i - oi; int dj = j - oj; int ai = i + di; int aj = j + dj; if (ai >= 0 && aj >= 0 && ai < width && aj < height) { antinodes.Add((ai, aj)); } ai = oi - di; aj = oj - dj; if (ai >= 0 && aj >= 0 && ai < width && aj < height) { antinodes.Add((ai, aj)); } } antennae[data[j][i]].Add((i, j)); } } return antinodes.Count.ToString(); } public string SolveSecond() { Dictionary<char, List<(int, int)>> antennae = []; HashSet<(int, int)> antinodes = []; for (int i = 0; i < width; i++) { for (int j = 0; j < height; j++) { if ('.' == data[j][i]) continue; antennae.TryAdd(data[j][i], []); foreach (var (oi, oj) in antennae[data[j][i]]) { int di = i - oi; int dj = j - oj; for (int ai = i, aj = j; ai >= 0 && aj >= 0 && ai < width && aj < height; ai += di, aj +=dj) { antinodes.Add((ai, aj)); } for (int ai = oi, aj = oj; ai >= 0 && aj >= 0 && ai < width && aj < height; ai -= di, aj -=dj) { antinodes.Add((ai, aj)); } } antennae[data[j][i]].Add((i, j)); } } return antinodes.Count.ToString(); } }