public override int Puzzle1Solution()
        {
            var seats = new SeatBlock(Data.Get());

            if (debug)
            {
                Console.WriteLine("InitialState:");
                Console.WriteLine(seats);
                Console.WriteLine();
            }
            int i = 1;

            while (!seats.InSteadyState())
            {
                seats.AdvanceSimulation();
                if (debug)
                {
                    Console.WriteLine(string.Format("Iteration {0}:", i));
                    Console.WriteLine(seats);
                    Console.WriteLine();
                }
                i++;
            }

            Console.WriteLine("Final state:");
            Console.WriteLine(seats);
            return(seats.Seats.Count(s => s.Occupied));
        }
        public Seat(SeatBlock parent, Coordinates location, char s, int overcrowdingThreshold)
        {
            SeatLabel             = s;
            OvercrowdingThreshold = overcrowdingThreshold;
            Parent   = parent;
            Location = location;
            switch (s)
            {
            case NullChar:
                IsNull   = true;
                Occupied = false;
                break;

            case AvailableChar:
                Occupied = false;
                IsNull   = false;
                break;

            case OccupiedChar:
                Occupied = true;
                IsNull   = false;
                break;
            }
        }