mgla

Advent of Code - 2025 - Day 4

Dec 4th, 2025
108
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 1.11 KB | None | 0 0
  1. var input = await File.ReadAllLinesAsync("input.txt");
  2. var grid = new List<PaperRoll>();
  3.  
  4. for (var row = 0; row < input.Length; row++)
  5. {
  6.     for (var column = 0; column < input[row].Length; column++)
  7.     {
  8.         if (input[row][column] == '@')
  9.         {
  10.             grid.Add(new PaperRoll(row, column, []));
  11.         }
  12.     }
  13. }
  14.  
  15. var part2 = 0;
  16.  
  17. while (true)
  18. {
  19.     for (int i = 0; i < grid.Count; i++)
  20.     {
  21.         var roll = grid[i];
  22.         var adjacent = grid.Where(r =>
  23.             Math.Abs(r.Row - roll.Row) <= 1 &&
  24.             Math.Abs(r.Column - roll.Column) <= 1 &&
  25.             r != roll).ToList();
  26.  
  27.         grid[i] = roll with { Adjacent = adjacent };
  28.     }
  29.  
  30.     var pickableRolls = grid.Where(r => r.Adjacent.Count < 4).ToList();
  31.  
  32.     if (part2 == 0)
  33.     {
  34.         Console.WriteLine($"Part 1: {pickableRolls.Count}");
  35.     }
  36.  
  37.     if (pickableRolls.Count == 0)
  38.     {
  39.         Console.WriteLine($"Part 2: {part2}");
  40.         break;
  41.     }
  42.  
  43.     part2 += pickableRolls.Count;
  44.     grid = [.. grid.Except(pickableRolls)];
  45. }
  46.  
  47. record PaperRoll(int Row, int Column, List<PaperRoll> Adjacent);
Advertisement
Add Comment
Please, Sign In to add comment