Program.cs 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. using System;
  2. using System.IO;
  3. using System.Linq;
  4. namespace D18._1
  5. {
  6. class Program
  7. {
  8. static void Main(string[] args)
  9. {
  10. string input = File.ReadAllText(args[0]).Trim();
  11. Console.WriteLine($"Part 1 : There is {CountSafeTiles(input, 40)} safe tiles.");
  12. Console.WriteLine($"Part 2 : There is {CountSafeTiles(input, 400000)} safe tiles.");
  13. }
  14. private static int CountSafeTiles(string input, int rows)
  15. {
  16. var line = new bool[input.Length];
  17. int safe = 0;
  18. for (var i = 0; i < input.Length; ++i)
  19. {
  20. line[i] = input[i] == '^' ? true : false;
  21. if (line[i] == false) safe++;
  22. }
  23. for (var r = 1; r < rows; ++r)
  24. {
  25. var nline = new bool[line.Length];
  26. for (var i = 0; i < line.Length; ++i)
  27. {
  28. var left = i == 0 ? false : line[i - 1];
  29. var center = line[i];
  30. var right = i == line.Length - 1 ? false : line[i + 1];
  31. if (left && center && right == false) nline[i] = true;
  32. else if (center && right && left == false) nline[i] = true;
  33. else if (left && center == false && right == false) nline[i] = true;
  34. else if (left == false && center == false && right) nline[i] = true;
  35. else safe++;
  36. }
  37. line = nline;
  38. }
  39. return safe;
  40. }
  41. }
  42. }