From bbf18aac9fd7f6ee4ae5a5f125ba569acb018475 Mon Sep 17 00:00:00 2001 From: Parnic Date: Mon, 11 Dec 2023 11:51:33 -0600 Subject: [PATCH] Day 11 I've got an off-by-one in ExpandGrid that only seems to affect expanding by more than one. I don't know what that is yet. --- advent-of-code-2023.csproj | 2 + inputs/11.txt | 140 +++++++++++++++++++++++++++++++++++++ inputs/11a.txt | 10 +++ src/11.cs | 106 ++++++++++++++++++++++++++++ 4 files changed, 258 insertions(+) create mode 100644 inputs/11.txt create mode 100644 inputs/11a.txt create mode 100644 src/11.cs diff --git a/advent-of-code-2023.csproj b/advent-of-code-2023.csproj index e8a6fa9..a384cb0 100644 --- a/advent-of-code-2023.csproj +++ b/advent-of-code-2023.csproj @@ -52,6 +52,8 @@ + + diff --git a/inputs/11.txt b/inputs/11.txt new file mode 100644 index 0000000..17cfde4 --- /dev/null +++ b/inputs/11.txt @@ -0,0 +1,140 @@ +........................................#........#.............#............#.........#................................................#.... +....#.............................................................................................................................#......... +....................#...................................#......................................#.........................#.................. +............................................................................................................................................ +#..........#.....................#...............................................................................#.......................... +......................................................................................................#.....................#............... +........................#..................................#.............................#.................................................. +............................................#.........................#..........#............#.........................#...............#... +...#..........................#.......................#......................................................#.............................. +............#............................................................................................................................... +..................................................................................................#......................................... +.........................#..................................................#............................................................... +.....................................#..............................................#..................#...................#................ +...............................................#.......................#....................................#............................... +..#...............................................................#...............................................................#......... +..................#.............................................................#.........#........................#........................ +.......................................#..............#......#.............................................................................. +.............................#........................................................#.........#.............................#............. +...................................#....................................................................#................#...............#.. +...#........................................#............................................................................................... +........................................................................#..................#................................................ +...........#........................................................................#...............................#.......#............... +................#...........................................#..............................................#................................ +............................................................................................................................................ +......................#.......#.........#.........#................#...................................#..............................#..... +.........#....................................................................#............................................................. +..................................#..........#............#..............#..................#......#........................................ +............................................................................................................................................ +...................................................................................#..............................#.............#........... +#..........................#........................#...........................................#........................................... +............................................................................................................................................ +.....#.......#......#.........................................#.......#.................#...............#..................#................ +..............................................................................#............................................................. +.........#.............................#............................................................#....................................... +.....................................................#.......................................#.................#............................ +......................#...........................................#..................................................#..................#... +..............#..........................................#.........................#........................................#............... +..........................#.....................#................................................................................#.......... +..........................................................................................................#................................# +.......................................#............#...................................#................................................... +#...............#............................................#....................................................#......................... +............................#..................................................................................................#............ +............#.........#.................................#.....................#............................................................. +......................................................................................................#..................................... +...#......................................#.........................#.......................................#..............#......#.....#... +..............................................................................................#............................................. +................#.............#.....................#...........................#........................................................... +............................................................................................................................................ +.#......#.......................................#........................................................................................... +.............#..........................#........................#..........#....................#.......................................... +............................................................................................................................................ +............................................................................................................................................ +..........................#........#.................................................................#.........................#............ +...#.......#..................................................#......................................................................#...... +................#........................................................................................................................... +..........................................#............#.......................................................#............#.............#. +............................................................................................................................................ +...................#........#....................#...................................#.............................#........................ +............................................................................................................................................ +............................................................................................................................................ +..............#.........#............................#.............#..............#....................#.................................... +......................................#.....#............................................................................................#.. +......#...........#...........#.........................................#........................#.......................................... +.............................................................................................................#........#..................... +..............................................................#...............................................................#............. +..................................#..............#......................................#................................................... +............................................................................................................................................ +.............#..............................#..................................................#............................................ +...#.................#.................................................#..............................#..................................... +............................................................................................................................................ +............................#..........#................#.......................#.................#..........#.............................. +...............................................#..................................................................................#......... +..........#........................#........................................................................................................ +......................#................................................................................#.................................... +#............................................................................................#..........................#................#.. +.................#..............#.......#..........#.........................#..................................#........................... +..................................................................#.....#........................#...............................#.......... +.........#....................................#............................................................#..........................#..... +..#......................................................................................................................................... +............................................................................................................................................ +....................#........................................#.......................#...................................................... +.............................#.............................................................#.........#............#.........#.......#....... +..........................................#............#.................................................................................... +............................................................................................................................................ +.#...............#....................................................#..........#.............................................#............ +............#......................................#.....................................#........#.................#....................... +......#.................#........#.....................................................................#...................#................ +........................................#......#...............................................................#.......................#.... +............................................................................................................................................ +..................................................................#.....#................................................................... +.............#............................................................................................#...............................#. +............................................................................................................................................ +............................#........................................................................................#.........#............ +......................................................#.....................#.................#............................................. +.......................................#................................................#................................................... +............................................#............................................................................................... +.#..............#..................#..............#.............#..............................................#.....................#...... +..........................................................#............#...................................................#................ +........................#........................................................#.......................................................... +....#..............................................................#........#.........#..................................................... +............................#...................................................................#........................................... +........................................#....................................................................#..........#................... +................................#............#..............................................#............................................... +..#......................................................#......#.................................................#...................#..... +...................#...................................................................................#.................................... +.............#....................................#..........................................................................#.............# +........#.................................................................#.....#...............#........................................... +..........................................#............#..................................#...............#................................. +......................................................................................................................#..................... +.................................#...................................................#..............................................#....... +.................................................#..........#...............#..............................................#................ +#.....#.................#...........................................#.............................#.............#........................... +.................#.......................................................................................................................... +........................................................................#.....................#........#.................................#.. +..........#...................#..........................#........................................................................#......... +....................................#...........................#.........................................................#................. +..........................#..................#.....................................#........................................................ +.....#................................................#..............................................#........#............................. +.............#......................................................#................................................................#...... +....................#............#..............#...............................#...............#.........................................#. +...........................................................................................#..............#......#.......................... +#..........................................................#................#.........................................#..................... +.........................................#.................................................................................................. +......................#..............................#..................................................................................#... +...#..........#....................#..........#...................................#...............................................#......... +.........................................................#..............#...................................................#............... +............................#....................................#.................................#...............#........................ +........................................................................................................................#................... +.#...................#......................................................#............#...........................................#.....# +............#.....................................#.........#.........#..................................................................... +.............................................................................................#................#............................. +.................................#.........#............#.......................................................................#........... +...............#.......#.................................................................................#.................................. +.................................................................#.......................................................#..........#....... +............................................................................................................................................ +............#.....#.........#...............................#..............................#......#..........#.............................. +.......................................................#............................#....................................................... +................................#..................................#...................................................#.................... +............................................#......#......................#..........................................................#...... +.#..............................................................................................#..................#........................ \ No newline at end of file diff --git a/inputs/11a.txt b/inputs/11a.txt new file mode 100644 index 0000000..a0bda53 --- /dev/null +++ b/inputs/11a.txt @@ -0,0 +1,10 @@ +...#...... +.......#.. +#......... +.......... +......#... +.#........ +.........# +.......... +.......#.. +#...#..... \ No newline at end of file diff --git a/src/11.cs b/src/11.cs new file mode 100644 index 0000000..09e8039 --- /dev/null +++ b/src/11.cs @@ -0,0 +1,106 @@ +using aoc2023.Util; + +namespace aoc2023; + +internal class Day11 : Day +{ + private readonly List grid = new(); + private int width; + private int height; + + internal override void Parse() + { + var lines = Parsing.ReadAllLines($"{GetDay()}").ToList(); + for (int row = 0; row < lines.Count; row++) + { + for (int col = 0; col < lines[row].Length; col++) + { + if (lines[row][col] == '#') + { + grid.Add(new ivec2(col, row)); + } + + width = col + 1; + } + + height = row + 1; + } + } + + List ExpandGrid(int expandBy) + { + List result = grid.ToList(); + for (int row = 0; row < height; row++) + { + if (result.All(p => p.y != row)) + { + var pointsToMove = result.Where(p => p.y > row).ToList(); + result.RemoveAll(p => pointsToMove.Contains(p)); + foreach (var pt in pointsToMove) + { + result.Add(new ivec2(pt.x, pt.y + expandBy)); + } + + row += expandBy; + height += expandBy; + } + } + + for (int col = 0; col < width; col++) + { + if (result.All(p => p.x != col)) + { + var pointsToMove = result.Where(p => p.x > col).ToList(); + result.RemoveAll(p => pointsToMove.Contains(p)); + foreach (var pt in pointsToMove) + { + result.Add(new ivec2(pt.x + expandBy, pt.y)); + } + + col += expandBy; + width += expandBy; + } + } + + return result; + } + + internal override string Part1() + { + List p1grid = ExpandGrid(1); + long total = 0; + while (p1grid.Count > 0) + { + var source = p1grid.First(); + p1grid.Remove(source); + + foreach (var pt in p1grid) + { + var dist = source.ManhattanDistanceTo(pt); + total += dist; + } + } + + return $"<+white>{total}"; + } + + internal override string Part2() + { + // this should be 1 million, but that gives me a sort-of "off by one" problem that this solves. i don't know why yet. + List p2grid = ExpandGrid(999999); + long total = 0; + while (p2grid.Count > 0) + { + var source = p2grid.First(); + p2grid.Remove(source); + + foreach (var pt in p2grid) + { + var dist = source.ManhattanDistanceTo(pt); + total += dist; + } + } + + return $"<+white>{total}"; + } +}