Пример #1
0
 /// <summary>
 /// Добавить вагон.
 /// </summary>
 /// <param name="carriage"> Вагон поезда.</param>
 public void Add(Carriage carriage)
 {
     if (Head == null)
     {
         Head          = carriage;
         Head.Next     = carriage;
         Head.Previous = carriage;
     }
     else
     {
         carriage.Previous  = Head.Previous;
         carriage.Next      = Head;
         Head.Previous.Next = carriage;
         Head.Previous      = carriage;
     }
 }
Пример #2
0
        /// <summary>
        /// Подсчет вагонов включая и выключая свет.
        /// </summary>
        /// <param name="current"></param>
        /// <param name="count"></param>
        /// <returns></returns>
        /// <exception cref="ArgumentNullException"></exception>
        public static int CountByLights(Carriage current)
        {
            if (current == null)
            {
                return(0);
            }

            //выключаем свет в первом вагоне
            current.LightOn = true;
            current         = current.Next;
            var count = 1;

            //идем вперед пока не зайдем в вагон с включенным светом
            while (!current.LightOn)
            {
                current = current.Next;
                count++;
            }

            //выключаем в нем свет
            current.LightOn = false;
            //идем назад столько же сколько прошли

            for (int i = 0; i < count; i++)
            {
                current = current.Previous;
            }

            //если свет выключился мы замкнулись, значит посчитали вагоны
            if (!current.LightOn)
            {
                return(count);
            }

            //если нет то повторяем
            return(CountByLights(current));
        }