示例#1
0
 private void DumpCarts()
 {
     foreach (var c in AllCarts.GroupBy(x => x.Coordinates.X).OrderBy(x => x.Key))
     {
         foreach (var ca in c.OrderBy(x => x.Coordinates.Y))
         {
             ca.WhereAmI();
         }
     }
 }
示例#2
0
        private void initGrid(string path)
        {
            var input        = File.ReadAllLines(path);
            var indexCounter = 0;
            var grid         = File.ReadAllLines(path).Select(x => x.ToCharArray()).ToArray();

            initTracks(grid);
            foreach (var t in Tracks)
            {
                foreach (var c in t.CartsOnTrack)
                {
                    AllCarts.Add(c);
                }
            }
        }
示例#3
0
        public void StartMoving(int delay = 0, bool dumpGrid = false)
        {
            var tickCount = 0;

            while (true)
            {
                var cartsToRemove = new List <Cart>();
                var cartsByRow    = AllCarts.GroupBy(x => x.Coordinates.X).OrderBy(x => x.Key);
                foreach (var g in cartsByRow)
                {
                    foreach (var c in g.OrderBy(x => x.Coordinates.Y))
                    {
                        if (cartsToRemove.Contains(c))
                        {
                            continue;
                        }
                        c.Move(IntersectionMap);

                        var collidingCarts = AllCarts.Where(x => x.Coordinates.Equals(c.Coordinates)).ToList();
                        if (collidingCarts.Count() > 1)
                        {
                            Console.WriteLine($"{collidingCarts[0].CurrentDirection} " +
                                              $"crashed into {collidingCarts[1].CurrentDirection} " +
                                              $"at {collidingCarts[0].Coordinates.Y}, {collidingCarts[0].Coordinates.X} " +
                                              $"on tick {tickCount + 1}. {AllCarts.Count - 2} carts left.");
                            cartsToRemove.AddRange(collidingCarts);
                        }
                    }
                }

                foreach (var cartToRemove in cartsToRemove)
                {
                    AllCarts.Remove(cartToRemove);
                }

                foreach (var t in Tracks)
                {
                    t.CartsOnTrack.Clear();
                    var newCarts = AllCarts.Where(x => x.OnTrack.TrackId == t.TrackId).ToList();
                    t.CartsOnTrack.AddRange(newCarts);
                }

                if (dumpGrid)
                {
                    DumpGrid();
                }
                foreach (var c in AllCarts)
                {
                    c.ResetMovement();
                }

                tickCount++;
                if (AllCarts.Count <= 1)
                {
                    break;
                }
                if (delay > 0)
                {
                    Thread.Sleep(delay);
                }
            }

            if (AllCarts.Count == 0)
            {
                Console.WriteLine("No Carts left! Finished Moving!");
            }
            else
            {
                Console.WriteLine($"{AllCarts[0].Coordinates.Y}, {AllCarts[0].Coordinates.X}");
            }
        }