bastien.monsarrat 6 роки тому
батько
коміт
f1b16ac739
2 змінених файлів з 98 додано та 7 видалено
  1. 90 7
      D13.1/Program.cs
  2. 8 0
      D13.1/Properties/launchSettings.json

+ 90 - 7
D13.1/Program.cs

@@ -5,7 +5,7 @@ using System.IO;
 namespace D13._1
 {
     class Track : Dictionary<(int x, int y), char> { };
-    class Carts : List<(int x, int y, int vx, int vy)> { };
+    class Carts : List<(int x, int y, int vx, int vy, int t)> { };
 
     class Program
     {
@@ -31,7 +31,7 @@ namespace D13._1
 
                     if (isCart(c))
                     {
-
+                        carts.Add(getCart(c, x, y));
                         c = '|';
                     }
 
@@ -41,6 +41,43 @@ namespace D13._1
                 y++;
 
             } while (true);
+
+            (int x, int y)? coord = null;
+            do
+            {
+
+                for (var i = 0; i < carts.Count; ++i)
+                {
+                    var cart = carts[i];
+
+                    cart.x += cart.vx;
+                    cart.y += cart.vy;
+
+                    var c = track[(cart.x, cart.y)];
+                    var ncart = getCart(c, cart);
+
+                    carts[i] = ncart;
+                }
+                coord = inter(carts);
+
+            } while (coord == null);
+
+            Console.WriteLine($"The answer is \"{coord?.x},{coord?.y}\"");
+        }
+
+        static (int x, int y)? inter(Carts carts)
+        {
+            for (var i = 0; i < carts.Count; ++i)
+            {
+                for (var j = i + 1; j < carts.Count; ++j)
+                {
+                    var ci = carts[i];
+                    var cj = carts[j];
+
+                    if (ci.x == cj.x && ci.y == cj.y) return (ci.x, ci.y);
+                }
+            }
+            return null;
         }
 
         static bool isCart(char c)
@@ -48,14 +85,60 @@ namespace D13._1
             return c == '>' || c == '<' || c == '^' || c == 'v';
         }
 
-        static (int x, int y, int vx, int vy) getCart(char c, int x, int y)
+        static (int x, int y, int vx, int vy, int t) getCart(char c, int x, int y)
         {
             switch (c)
             {
-                case '>': return (x, y, +1, +0);
-                case '<': return (x, y, -1, +0);
-                case '^': return (x, y, +0, -1);
-                case 'v': return (x, y, +0, +1);
+                case '>': return (x, y, +1, +0, 0);
+                case '<': return (x, y, -1, +0, 0);
+                case '^': return (x, y, +0, -1, 0);
+                case 'v': return (x, y, +0, +1, 0);
+            }
+            return default;
+        }
+
+        static (int x, int y, int vx, int vy, int t) getCart(char c, (int x, int y, int vx, int vy, int t) cart)
+        {
+            if (c == '|' || c == '-') return cart;
+            if (c == '+' && cart.t == 1)
+            {
+                cart.t++;
+                return cart;
+            }
+
+            switch (cart)
+            {
+                case var t when t.vx == 1 && t.vy == 0:
+
+                    if (c == '/')  return (cart.x, cart.y, +0, -1, cart.t);
+                    if (c == '\\') return (cart.x, cart.y, +0, +1, cart.t);
+                    if (c == '+' && cart.t == 0) return (cart.x, cart.y, +0, -1, 1);
+                    if (c == '+' && cart.t == 2) return (cart.x, cart.y, +0, +1, 0);
+                    return default;
+
+                case var t when t.vx == -1 && t.vy == 0:
+
+                    if (c == '/') return (cart.x, cart.y, +0, +1, cart.t);
+                    if (c == '\\') return (cart.x, cart.y, +0, -1, cart.t);
+                    if (c == '+' && cart.t == 0) return (cart.x, cart.y, +0, +1, 1);
+                    if (c == '+' && cart.t == 2) return (cart.x, cart.y, +0, -1, 0);
+                    return default;
+
+                case var t when t.vx == 0 && t.vy == 1:
+
+                    if (c == '/') return (cart.x, cart.y, -1, +0, cart.t);
+                    if (c == '\\') return (cart.x, cart.y, +1, +0, cart.t);
+                    if (c == '+' && cart.t == 0) return (cart.x, cart.y, +1, +0, 1);
+                    if (c == '+' && cart.t == 2) return (cart.x, cart.y, -1, +0, 0);
+                    return default;
+
+                case var t when t.vx == 0 && t.vy == -1:
+
+                    if (c == '/') return (cart.x, cart.y, +1, +0, cart.t);
+                    if (c == '\\') return (cart.x, cart.y, -1, +0, cart.t);
+                    if (c == '+' && cart.t == 0) return (cart.x, cart.y, -1, +0, 1);
+                    if (c == '+' && cart.t == 2) return (cart.x, cart.y, +1, +0, 0);
+                    return default;
             }
             return default;
         }

+ 8 - 0
D13.1/Properties/launchSettings.json

@@ -0,0 +1,8 @@
+{
+  "profiles": {
+    "D13.1": {
+      "commandName": "Project",
+      "commandLineArgs": "\"D:\\adv\\Adv2018\\D13.1\\input.txt\" "
+    }
+  }
+}