internal static void Distribute(Tape src, CyclicList<Tape> tapes)
 {
     //Log.WriteDistMessage("Dist start");
     tapes.Clean();
     string line;
     using (StreamReader reader = new StreamReader(src.FilePath))
         while ((line = reader.ReadLine()) != null)
         {
             int val = int.Parse(line);
             if (tapes.IsFirstRun() || val >= tapes.LastValue)
             {
                 tapes.Add(val);
                 //Log.WriteDistMessage("Adding " + val + " to " + tapes.Index + ".", 4);
             }
             else
             {
                 tapes.ChangeToNextAndAdd(val);
                 //Log.WriteInfoMessage("NIEPOSORTOWANE!" + val);
             }
             //Log.WriteDistMessage("Adding " + val + " to " + tapes.Index + ".", 4);
         }
     Log.WriteDistMessage("A: " + tapes[0].ShowFile());
     Log.WriteDistMessage("B: " + tapes[1].ShowFile());
     //Log.WriteDistMessage("Dist end");
 }
Example #2
0
    public CyclicList <T>[] split(Func <T, int> func)
    {
        var rawResult = new Dictionary <int, List <T> >();
        var keys      = new List <int>();

        foreach (T t in _args)
        {
            int type = func(t);
            if (!rawResult.ContainsKey(type))
            {
                rawResult.Add(type, new List <T>());
                keys.Add(type);
            }
            rawResult[type].Add(t);
        }
        var result = new CyclicList <T> [rawResult.Count];

        keys.Sort();
        int i = 0;

        foreach (int v in keys)
        {
            result[i++] = new CyclicList <T>(rawResult[v].ToArray());
        }
        return(result);
    }
Example #3
0
 public bool Equals(CyclicList <T> other)
 {
     if (ReferenceEquals(other, null))
     {
         return(false);
     }
     if (ReferenceEquals(this, other))
     {
         return(true);
     }
     if (GetType() != other.GetType())
     {
         return(false);
     }
     for (int i = 0; i < Length; ++i)
     {
         if (!ReferenceEquals(_args[i], other._args[i]))
         {
             if (ReferenceEquals(_args[i], null))
             {
                 return(false);
             }
             if (!_args[i].Equals(other._args[i]))
             {
                 return(false);
             }
         }
     }
     return(true);
 }
Example #4
0
        public void AddTest()
        {
            CyclicList <int> c = new CyclicList <int>();

            c.Add(1);
            c.Add(2);
            c.Add(3);
        }
Example #5
0
        }                                                                                                                           // Создаёт новый цикл. список

        static void FindElIndexByValue(CyclicList list)
        {                             // Список, в котором ведётся поиск
            if (list.Length == 0)     // Проверка на пусто список
            {
                Console.WriteLine("Ошибка, список пуст!");
                return;
            }
            Console.Write("Введите значение искомого элемента (>=1): ");
            int elIndex = list.FindElIndexByValue(Read.Natural());

            Console.WriteLine("\nЭлемент по заданному значению " + (elIndex == -1
                ? "не находится в списке"                       // Если вышел код ошибки (-1), то элемента в списке нет
                : "находится на " + elIndex + "-ой позиции"));  // Иначе выводится его позиция
        } // Находит индекс элемента в циклическом списке по его значению
Example #6
0
        public void RemoveTest()
        {
            CyclicList <int> c = new CyclicList <int>();

            c.Add(1);
            c.Add(2);
            c.Add(3);

            c.Remove(1);

            Assert.AreEqual(c[0], 1);
            Assert.AreEqual(c[1], 3);
            Assert.AreEqual(c[2], 1);
            Assert.AreEqual(c[3], 3);
        }
Example #7
0
        } // Находит индекс элемента в циклическом списке по его значению

        static void DelElByValue(CyclicList list)
        {                         // Список, в котором происходит удаление
            if (list.Length == 0) // Проверка на пустой список
            {
                Console.WriteLine("Ошибка, список пуст!");
                return;
            }

            Console.Write("Введите значение элемента, который требуется удалить (>=1): ");
            int elIndex = list.RemoveElByValue(Read.Natural());

            Console.WriteLine("\nЭлемент по заданному значению " + (elIndex == -1
                ? "не находится в списке"                                // Если вышел код ошибки (-1), то элемента в списке нет
                : "удалён, элемент был на " + elIndex + "-ой позиции")); // Иначе выводится сообщение о его удалении, и позиция на которой он находился
        }                                                                // Удаляет элемент в циклическом списке по значению
Example #8
0
        public void GetTest()
        {
            CyclicList <int> c = new CyclicList <int>();

            c.Add(1);
            c.Add(2);
            c.Add(3);


            Assert.AreEqual(c[0], 1);
            Assert.AreEqual(c[1], 2);
            Assert.AreEqual(c[2], 3);
            Assert.AreEqual(c[3], 1);
            Assert.AreEqual(c[4], 2);
            Assert.AreEqual(c[5], 3);
        }
Example #9
0
        public static void Main(string[] args)
        {
            Tape a = new Tape("a.txt");
            Tape b = new Tape("b.txt");
            var input = args.Length == 0 ? "../../../data/pentagons_01.dat" : args[0];
            Tape c = new Tape("c.txt", input);

            Log.WriteInfoMessage("Natural sort");
            CyclicList<Tape> tapes = new CyclicList<Tape>() { a, b };

            while (!SortHelper.IsSorted(c))
            {

                SortHelper.Distribute(c, tapes);
                SortHelper.Merge(c, tapes);
            }
            Log.WriteInfoMessage("End of execution");
            if (!(args.Length == 2 && args[1].Equals("TEST")))
                Console.ReadKey();
        }
Example #10
0
        }                                                                // Удаляет элемент в циклическом списке по значению

        static void Main(string[] args)
        {
            CyclicList list = CreateNewCyclicList();

            while (true)
            {
                switch (Menu("Ввести длину списка заново", "Вывести список", "Найти элемент в списке", "Удалить элемент из списка", "Выход"))
                {
                case 1: list = CreateNewCyclicList(); break;     // Создаёт новый цикл. список

                case 2: list.Show(); break;                      // Выводит список на экран

                case 3: FindElIndexByValue(list); break;         // Находит индекс элемента в циклическом списке по его значению

                case 4: DelElByValue(list); break;               // Удаляет элемент в циклическом списке по значению

                default: return;
                }
            }
        }                 // Меню с вариантами действий
Example #11
0
        public void HeadRemovalTest()
        {
            CyclicList <int> c = new CyclicList <int>();

            c.Add(1);
            c.Add(2);
            c.Add(3);

            c.Remove(0);
            Debug.WriteLine(c[0].ToString() + c[1].ToString() + c[2].ToString());

            Assert.AreEqual(c[0], 2);
            Assert.AreEqual(c[1], 3);
            Assert.AreEqual(c[2], 2);
            Assert.AreEqual(c[3], 3);

            c.Remove(0);
            Assert.AreEqual(3, c[0]);
            c.Remove(0);
            Assert.ThrowsException <Exception>(() => { Debug.WriteLine(c[0]); });
        }
Example #12
0
 public static int Process(int N, int M)
 {
     CyclicList lst = new CyclicList();
     ListElement<int> pt = new ListElement<int>(0);
     lst.Add(pt, pt);
     for (int i = 1; i < N; i++)
     {
         var tm = new ListElement<int>(i);
         lst.Add(tm, pt);
         pt = tm;
     }
     ListElement<int> el = pt;
     while (el.Next != el)
     {
         for (int i = 0; i < M; i++)
         {
             el = el.Next;
         }
         Console.WriteLine("Remove {0}", el.Next.Value);
         el.Next = el.Next.Next;
     }
     return el.Value;
 }
Example #13
0
    static void Main(string[] args)
    {
        CyclicList <string> cL     = new CyclicList <string>("Ala", "ma", "kota");
        CyclicList <string> cLtemp = cL;

        for (int i = 0; i < 2 * cL.Length; i++)
        {
            Console.WriteLine(cL[i]);
        }
        cL[2] = "kociaki";
        Console.WriteLine(cL);
        cL    = cL << 1;
        cL[1] = "koty";
        Console.WriteLine(cL);
        Console.WriteLine(cLtemp);
        cL = cL >> 2;
        Console.WriteLine(cL);
        string[] sA = cL;
        foreach (string s in sA)
        {
            Console.WriteLine(s);
        }
        CyclicList <string> str = new CyclicList <string>("Ala", "ma", "kota", "Sam", "worek");

        foreach (var C in str.split(n => n[1]))
        {
            Console.WriteLine(C);
        }
        CyclicList <int> cI = new CyclicList <int>(0, 1, 2, 3, 4, 5, 6);

        foreach (var C in (cI >> 1).split(n => 1 - n % 2))
        {
            Console.WriteLine(C);
        }
        Console.ReadKey();
    }
Example #14
0
 public SwipeMenu()
 {
     _menuItems = new CyclicList <MenuSelection>();
 }
Example #15
0
        public static void Merge(Tape dest, CyclicList<Tape> tapes)
        {
            //Log.WriteMergeMessage("Merge start");
            //Log.WriteMergeMessage("A: " + tapes[0].ShowFile(), 5);
            //Log.WriteMergeMessage("B: " + tapes[1].ShowFile(), 5);
            dest.Clean();
            tapes.Prepare();

            double a1 = (double)tapes.Current.GetNextValue();

            double b1 = -1;

            while (!tapes.Current.IsFinished)
            {
                double? nextValue = tapes.Next.GetNextValue();
                double b2;
                if (nextValue != null)
                    b2 = (double)nextValue;
                else
                    break; // przepisz resztę taśmy
                if (b2 >= b1) // czy ciągle na tym samym run-ie
                {
                    if (b2 <= a1)
                    {
                        b1 = b2;
                        dest.Append(b1);
                    }
                    else
                    {
                        dest.Append(a1);
                        tapes.MoveNext();
                        b1 = a1;
                        a1 = b2;
                    }
                }
                else // przepisz resztę run-a
                {
                    b1 = b2;
                    double a2 = a1;
                    var value = tapes.Current.GetNextValue();
                    if (value != null) a1 = (double)value;
                    else
                    {
                        dest.Append(a2);
                        tapes.MoveNext();
                        break;
                    }
                    while (a1 >= a2)
                    {
                        dest.Append(a2);
                        a2 = a1;
                        double? d = tapes.Current.GetNextValue();
                        if (d != null) a1 = (double)d;
                        else
                            break;
                    }

                    dest.Append(a2);
                    tapes.Next.StepBack();
                }
            }
            double? v;
            //dest.Append(a1);
            tapes.Current.StepBack();
            while ((v = tapes.Current.GetNextValue()) != null)
            {
                dest.Append((double)v);
            }
            //Log.WriteMergeMessage("Result:", 5);
            Log.WriteMergeMessage("C: " + dest.ShowFile());
            //Log.WriteMergeMessage("Merge end");
        }