Advertisement
Guest User

AoC_2016_DaySeventeen

a guest
Dec 17th, 2016
165
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 5.04 KB | None | 0 0
  1. using System;
  2. using System.Text;
  3. using System.Security.Cryptography;
  4. using System.Collections.Generic;
  5.  
  6. namespace AdventOfCode_Solutions
  7. {
  8.     class DaySeventeen_1
  9.     {
  10.         public static List<string> pathsToEnd;
  11.         public const string CODE = "dmypynyp";
  12.  
  13.         internal static void Run()
  14.         {
  15.             DateTime start = DateTime.Now;
  16.             pathsToEnd = new List<string>();
  17.  
  18.             Room[,] rooms = new Room[4, 4];
  19.             for (int column = 0; column < 4; column++)
  20.             {
  21.                 for (int row = 0; row < 4; row++)
  22.                 {
  23.                     rooms[column, row] = new Room();
  24.                 }
  25.             }
  26.  
  27.             for (int column = 0; column < 4; column++)
  28.             {
  29.                 for (int row = 0; row < 4; row++)
  30.                 {
  31.                     if (row != 0)
  32.                     {
  33.                         rooms[column, row].upConnection = rooms[column, row - 1];
  34.                     }
  35.                     if (row != 3)
  36.                     {
  37.                         rooms[column, row].downConnection = rooms[column, row + 1];
  38.                     }
  39.                     if (column != 0)
  40.                     {
  41.                         rooms[column, row].leftConnection = rooms[column - 1, row];
  42.                     }
  43.                     if (column != 3)
  44.                     {
  45.                         rooms[column, row].rightConnection = rooms[column + 1, row];
  46.                     }
  47.                 }
  48.             }
  49.             rooms[3, 3].isExit = true;
  50.  
  51.             rooms[0, 0].RecursivePath("");
  52.  
  53.             string shortestPath = pathsToEnd[0];
  54.             foreach (string path in pathsToEnd)
  55.             {
  56.                 if (path.Length < shortestPath.Length)
  57.                 {
  58.                     shortestPath = path;
  59.                 }
  60.             }
  61.  
  62.             string longestPath = pathsToEnd[0];
  63.             foreach (string path in pathsToEnd)
  64.             {
  65.                 if (path.Length > longestPath.Length)
  66.                 {
  67.                     longestPath = path;
  68.                 }
  69.             }
  70.  
  71.             Console.WriteLine("Shortest Path: " + shortestPath);
  72.             Console.WriteLine("Longest Path Length: " + longestPath.Length);
  73.             Console.WriteLine("Time: " + (DateTime.Now - start));
  74.         }
  75.  
  76.         private static string CreateHash(string input)
  77.         {
  78.             MD5 md5 = MD5.Create();
  79.             byte[] md5Hash = md5.ComputeHash(Encoding.ASCII.GetBytes(input));
  80.             StringBuilder sb = new StringBuilder();
  81.             for (int count = 0; count < 2; count++)
  82.             {
  83.                 sb.Append(md5Hash[count].ToString("X2"));
  84.             }
  85.             return sb.ToString().ToLower();
  86.         }
  87.  
  88.         public class Room
  89.         {
  90.             public Room upConnection;
  91.             public Room downConnection;
  92.             public Room rightConnection;
  93.             public Room leftConnection;
  94.  
  95.             public bool isExit;
  96.  
  97.             public Room()
  98.             {
  99.                 upConnection = null;
  100.                 downConnection = null;
  101.                 rightConnection = null;
  102.                 leftConnection = null;
  103.                 isExit = false;
  104.             }
  105.  
  106.             public void RecursivePath(string senderPath)
  107.             {
  108.                 if (isExit)
  109.                 {
  110.                     pathsToEnd.Add(senderPath);
  111.                 }
  112.                 else
  113.                 {
  114.                     string hash = CreateHash(CODE + senderPath);
  115.                     if (upConnection != null)
  116.                     {
  117.                         if (!Locked(0, hash))
  118.                         {
  119.                             upConnection.RecursivePath(senderPath + 'U');
  120.                         }
  121.                     }
  122.                     if (rightConnection != null)
  123.                     {
  124.                         if (!Locked(3, hash))
  125.                         {
  126.                             rightConnection.RecursivePath(senderPath + 'R');
  127.                         }
  128.                     }
  129.                     if (downConnection != null)
  130.                     {
  131.                         if (!Locked(1, hash))
  132.                         {
  133.                             downConnection.RecursivePath(senderPath + 'D');
  134.                         }
  135.                     }
  136.                     if (leftConnection != null)
  137.                     {
  138.                         if (!Locked(2, hash))
  139.                         {
  140.                             leftConnection.RecursivePath(senderPath + 'L');
  141.                         }
  142.                     }                    
  143.                 }
  144.             }
  145.  
  146.             public static bool Locked(int index, string hashCode)
  147.             {
  148.                 int holder;
  149.                 if (int.TryParse(hashCode[index].ToString(), out holder) || hashCode[index] == 'a')
  150.                 {
  151.                     return true;
  152.                 }
  153.                 else
  154.                 {
  155.                     return false;
  156.                 }
  157.             }
  158.         }
  159.     }
  160. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement