|
|
@@ -0,0 +1,48 @@
|
|
|
+using System;
|
|
|
+using System.IO;
|
|
|
+using System.Linq;
|
|
|
+
|
|
|
+namespace D18._1
|
|
|
+{
|
|
|
+ class Program
|
|
|
+ {
|
|
|
+ static void Main(string[] args)
|
|
|
+ {
|
|
|
+ string input = File.ReadAllText(args[0]).Trim();
|
|
|
+
|
|
|
+ Console.WriteLine($"Part 1 : There is {CountSafeTiles(input, 40)} safe tiles.");
|
|
|
+ Console.WriteLine($"Part 2 : There is {CountSafeTiles(input, 400000)} safe tiles.");
|
|
|
+ }
|
|
|
+
|
|
|
+ private static int CountSafeTiles(string input, int rows)
|
|
|
+ {
|
|
|
+ var line = new bool[input.Length];
|
|
|
+ int safe = 0;
|
|
|
+ for (var i = 0; i < input.Length; ++i)
|
|
|
+ {
|
|
|
+ line[i] = input[i] == '^' ? true : false;
|
|
|
+ if (line[i] == false) safe++;
|
|
|
+ }
|
|
|
+
|
|
|
+ for (var r = 1; r < rows; ++r)
|
|
|
+ {
|
|
|
+ var nline = new bool[line.Length];
|
|
|
+ for (var i = 0; i < line.Length; ++i)
|
|
|
+ {
|
|
|
+ var left = i == 0 ? false : line[i - 1];
|
|
|
+ var center = line[i];
|
|
|
+ var right = i == line.Length - 1 ? false : line[i + 1];
|
|
|
+
|
|
|
+ if (left && center && right == false) nline[i] = true;
|
|
|
+ else if (center && right && left == false) nline[i] = true;
|
|
|
+ else if (left && center == false && right == false) nline[i] = true;
|
|
|
+ else if (left == false && center == false && right) nline[i] = true;
|
|
|
+ else safe++;
|
|
|
+ }
|
|
|
+ line = nline;
|
|
|
+ }
|
|
|
+
|
|
|
+ return safe;
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|